Keepalived kasutamine

Allikas: Imre kasutab arvutit
Mine navigeerimisribaleMine otsikasti

Sissejuhatus

Keepalived http://www.keepalived.org/ tarkvaraga saab kontrollida kahe koostööd tegeva arvuti võrguseadistusi sh automatiseerida võrguseadistuste muutmist vastuseks mingitele sündmustele (nt ühe arvuti võrgust kadumine). Keepalived sobib kasutamiseks nt

  • võrgusõlmes, nt kahe õlalise tulemüüri klastri pidamisel, kus vip aadressiks on ülejäänud arvutite default gw aadress
  • rakendusserveris, nt kahe õlalise NginX klastri pidamisel, kus vip aadressiks on rakendusserveri ip aadress kuhu brauserid pöörduvad

Lisaks puhtale võrguseadistustega tegelemisele on Keepalived integreeritud http://www.linux-vs.org/ lahendusega. Keepalived implementeerib VRRP (virtual router redundancy protocol) protokolli. Käesolevas tekstis tegeldakse ainult Keepalived kasutamisega rakendusserveris.

Tööpõhimõte

Keepalived on võrgule orienteeritud lahendus erinevalt nt Pacemaker rakendustele orienteeritud lahendusest; st Keepalived tegeleb ainult node'ide vahel ip aadresside, ruutingute jms sättimisega; Pacemaker hoolitseb selle eest, et erinevates node'des töötaksid täpselt sellised rakendused nagu tarvis (nt et sama failisüsteem ei oleks külge ühendatud mitmes kohas).

Keepalived kasutamist kirjeldab selline skeem

                                                              __________
                                                             |          |
                                          -------------------|  bauser  |
                                                             |__________|
                                   internet
                    
                                       |   
                                  _____|_____
                                 |           |
                                 |  ruuter   |
                                 |___________| 
                                       |       192.168.10.254
                                       |
                                       |
                   ---|----------------|------------------------|-----
                      |                                         |
   192.168.10.191   __|__         vip 192.168.10.193          __|__   192.168.10.192
                   |     |                                   |     |
                   |     | keepalived                        |     | keepalived
                   |     | nginx protsess                    |     | nginx protess
                   |_____|                                   |_____|
 
                   NginX A    <--- multicast sõnumid --->    NginX B
          

kus

  • NginX A arvuti native ip aadress on 192.168.10.191
  • NginX B arvuti native ip aadress on 192.168.10.192
  • NginX klastri vip (virtual ip) aadress on 192.168.10.193
  • NginX protsess on binditud * liidesele
  • vip mac aadressi ei ole kasutusel
  • aadressi üleandmisel kasutatakse gratitous arp'i
  • igal ajahetkel on vip aadress ühe või teise node küljes (ja need aadressi ei anta käest kätte millisekundis tuhat korda vaid siis kui üks node rikneb, toimub plaaniline hooldustöö vms)
  • kui teenus on seotud vip aadressiga (ja tavaliselt on), siis teine node istub tühjalt kõrval, st ei paku teenust
  • keepalived ei võimalda active-active lahendust ühs vip aadressi jaoks (erinevalt nt OpenBSD carp süsteemist, https://man.openbsd.org/carp
  • mitme vip aadressi kasutamisel on võimalik active-active lahendus

Tarkvara paigaldamine

Tarkvara paigaldamiseks sobib öelda

# apt-get install keepalived

tulemusena paigaldatakse

  • sõltuvausena ipvsadm pakett
  • seadistusfailide näited, nt /usr/share/doc/keepalived/samples/keepalived.conf.vrrp

Seadistamine

Käesolevas punktis tutvustatakse mõnda seadistamise näidet

  • ühe vip aadressi kasutamine
  • kahe vip aadressi kasutamine (nii saavutatakse mõlema õla mingil määral võrdne käigushoidmine)
  • policy routing

Ühe VIP ip aadressi kasutamine

Toodud seadistus realiseerib Tööpõhimõte skeemil kujutatud olukorra, kaks node'i annavad vip ip aadressi käest kätte.

NginX A

# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   notification_email {
     imre@auul.pri.ee
   }
   notification_email_from keepalived@auul.pri.ee
   smtp_server 192.168.1.250
   smtp_connect_timeout 30
   router_id MORAAL_A
}


vrrp_instance VI_1 {
    state MASTER
    interface ens18
    garp_master_delay 10
    smtp_alert
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass parool
    }
    virtual_ipaddress {
        192.168.10.193/24
    }
}

NginX B

# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     imre@auul.pri.ee
   }
   notification_email_from keepalived@auul.pri.ee
   smtp_server 192.168.1.250
   smtp_connect_timeout 30
   router_id MORAAL_B
}


vrrp_instance VI_1 {
    state BACKUP
    interface ens18
    garp_master_delay 10
    smtp_alert
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass parool
    }
    virtual_ipaddress {
        192.168.10.193/24
    }
}

kus

  • virtual_ipaddress - direktiivi kirjeldatud ip aadress/mask seadistatakse master rolli minekul, ja eemaldatakse backup rolli minekul
  • kõrgema priority väärtusega node osutub master'iks

Kahe VIP ip aadressi kasutamine

Toodud seadisus on ühe VIP ip aadressi kasutamise edasiarendus, klastris on kaks node'i, kummalgi on primaarselt oma vip aadress, st kokku kaks vip aadressi; ja nad üks node teenindab vajadusel mõlemat vip aadressi.

NginX A

# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     imre@auul.pri.ee
   }
   notification_email_from keepalived@auul.pri.ee
   smtp_server 192.168.1.250
   smtp_connect_timeout 30
   router_id MORAAL_A
}


vrrp_instance VI_1 {
    state MASTER
    interface ens18
    garp_master_delay 10
    smtp_alert
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass parool1
    }
    virtual_ipaddress {
        192.168.10.193/24
    }

}

vrrp_instance VI_2 {
    state BACKUP
    interface ens18
    garp_master_delay 10
    smtp_alert
    virtual_router_id 52
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass parool2
    }
    virtual_ipaddress {
        192.168.10.194
    }
}

NginX B

# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen
   }
   notification_email_from keepalived@auul.pri.ee
   smtp_server 192.168.1.250
   smtp_connect_timeout 30
   router_id MORAAL_B
}


vrrp_instance VI_1 {
    state BACKUP
    interface ens18
    garp_master_delay 10
    smtp_alert
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass parool1
    }
    virtual_ipaddress {
        192.168.10.193
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface ens18
    garp_master_delay 10
    smtp_alert
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass parool2
    }
    virtual_ipaddress {
        192.168.10.194
    }
}

Policy routing kasutamine

Ubuntu v. 16.04 paketihalduse Keepalived v. 1.2.19 ei sisalda otseselt policy routing kasutamist. Selle siiski kasutamiseks tuleb policy routing teha tavalisel viisil ning kasutada lisaks vip ip aadresse tavalisel viisil. (Nii kulub ip aadresse küll rohkem tõenäoliselt.) Tundub, et uuemates Ubuntu versioonides uuem Keepalived tarkvara võimaldab paremini töötada alternatiivsete ruutingutabelitega.

Kasutamine

  • Failover toimub automaatselt, nt ühe arvuti poweroff puhul
  • Switchover esilekutsumiseks sobib ühes arvutis keepalived protsessi töö lõpetada
# systemctl stop keepalived
  • Töötamise ajal on võrgus multicast paketid (on näha, et vrid 51 osas on üks arvuti master ja vrid 52 osas teine)
# tcpdump -ni any host 224.0.0.18
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
19:35:35.761184 IP 192.168.10.191 > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 24
19:35:35.761341 IP 192.168.10.192 > 224.0.0.18: VRRPv2, Advertisement, vrid 52, prio 100, authtype simple, intvl 1s, length 20
19:35:36.761721 IP 192.168.10.191 > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 24
19:35:36.761896 IP 192.168.10.192 > 224.0.0.18: VRRPv2, Advertisement, vrid 52, prio 100, authtype simple, intvl 1s, length 20
19:35:37.762857 IP 192.168.10.191 > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 24
...
  • Parasjagu kehtestatud võrguseadistuse küsimiseks sobib öelda nt
# ip addr show

Paketifilter

Kui vrrp liiklus toimub multicast peal, siis sobib kasutada kõigis osalistes nt sellist paketifiltrit

# vrrp
-A INPUT -i eth0 -d 224.0.0.0/8 -p vrrp -j ACCEPT
-A OUTPUT -o eth0 -d 224.0.0.0/8 -p vrrp -j ACCEPT

Märkused

  • Kui arvuti vaikelüüsi jääb arp cache peale vale ip aadress nö kinni võib olla abiks öelda
# arping -i eth0 -c 3 -p -s e5:22:5b:bd:3c:32 -S 10.20.39.45 10.20.39.33

kus

  • -s mac on õige võrguliidese mac (mida soovitakse gw'le õpetada)
  • -S ip - õige võrguliidese ip aadress
  • 10.20.39.33 - vaikelüüsi ip aadress
  • Testimiseks on hea öelda nt
# wget --bind-address=10.20.39.45 http://moraal.ee/

2020 märkused

global_defs {
   notification_email {
     imre@auul.pri.ee
   }
   notification_email_from imre@localhost
   smtp_server localhost
   smtp_connect_timeout 30
   script_user dwalin
   enable_script_security
}

 
# VRRP Instance definition
 
vrrp_script chk_test {
        script "/bin/echo 4 >> /var/tmp/kata/fail"
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
    auth_pass   teretere
    }
    virtual_ipaddress {
        10.100.13.27/24
    }

   track_script {

     chk_test
  }

}
 
# Virtual Server definition

virtual_server 10.100.13.27 5434 {
    delay_loop 5
    lb_algo rr
    lb_kind NAT
    protocol TCP

    real_server 10.100.13.24 5432 {
        weight 1
        TCP_CHECK {
               connect_port 5432
               connect_timeout 5
        }
    }
}

kus

* TODO

2024 märkused

TODO

Kasulikud lisamaterjalid

Kasulikud lisamaterjalid