Linux-HA Debianiga

Allikas: Kuutõrvaja

Sissejuhatus

Üldiselt nimetatakse kõrgkäideldavaks (ingl. k. High Availability, HA) sellist süsteemi, mis vaatlusalusel ajal suudab järjepidevalt nõuetele vastavat teenust pakkuda. Linux-HA (High-Availability Linux) http://www.linux-ha.org/ projekt oli ajalooliselt esimene, mis tegeles kõrgkäideldava lahenduse tekitamisega kasutades Linux operatsioonisüsteemi.

Kõrgkäideldava arvutisüsteemi puhul ei tohiks põhimõtteliselt olla süsteemis ühtegi nn SPOF (ingl. k. Single Point of Failure) kohta. Kui arvutisüsteemi kujutleda kihiliselt, siis peavad olema dubleeritud või ümberlülitamise võimalusega nt sellised komponendid

  • võrk - interface bonding/trunking, OSPF, BGP
  • arvutid - Heartbeat, Relayd
  • salvestusseadmed - RAID, DRBD

Sõltuvalt asjaoludest võib olla praktiline asendada võimalikult täpselt rikenenud kompoent, nt riistvaralise RAID skeemi üks ketas või siis kogu riknenud sõlm, nt üks arvuti. Linux-HA puhul on iseloomulik, et süsteemi sees toimuvad ümberlülitused automaatselt, kuigi ümberlülituse saab teha ka käsitsi

  • switchover - käsitsi ümberlülitus
  • failover - automaatne ümberlülitus
  • failback - peale riknenud sõlme taastumist toimub kõnealuse sõlme tagasi lülitamine teenindavasse režiimi

Kõrgkäideldava klustri tööpõhimõte

Nimetus kõrgkäideldav kluster rõhutab asjaolu, et tegu on tervikliku süsteemiga, mille erinevad komponendid on dubleeritud ja usaldavad üksteist ning ühe komponenendi riknemisel on valmis teine komponent töö üle võtma säilitades nii süsteemi poolt pakutava teenuse järjepidevuse. Tavaliselt on klustriga seotud üks teenuse ip aadress ning igal komponendil on nö isiklik ip aadress.

 TODO skeem

Teenuse ip aadress on igal ajahetkel omistatud ühele klustri komponendile, mis pakub kasutajatele teenust. Kõrgkäideldavust tagav tarkvara hoolitseb selle eest, et teha kindlaks kui seni teenust pakkuv komponent on riknenud ja seadistab teenuse ip aadressi valmis olnud klustri mõnele muule komponendile.

Heartbeat

Linux-HA projekt tegeleb klustri tarkvaraga Heartbeat, millest on levinud kaks versiooni

  • R1 ehk legacy versioon - seadistamine on lihtne, toetab kahe komponendilist klustrit, ei võimalda monitoorinda teenuseid, vaid komponendi võrgus olekut ja mitte-olekut
  • CRM ehk versioon 2 - seadistamine on keeruline, toetab kuni 255 komponendilist klustrit, võimaldab monitoorida teenuseid

2009 aasta keskpaigaks on Linux-HA projekt arendenud sellisesse seisu, et on eraldatud kaks kihti

  • klustri infrastruktuur - vastutab osaliste 'communication and membership' eest, kaks prominentsemat projekti on Heartbeati viimase aja versioonid ise ning OpenAIS
  • klustri ressursside haldus (ingl. k. cluster resource managament, CRM) - vastutab teenuste jälgimise ja käivitamise ning seiskamise eest

Praktiliselt on oluline tähele panna, et Heartbeat v. 2 on kasutatav nii R1 kui CRM režiimis sõltuvalt sellest, kuidas seadistusfailis on öeldud.

Heartbeat R1 kasutamine

Klassikaline ehk Heartbeat R1 lahendus tegeleb klustri kasutajate lülitamise ühe või teise teenust pakkuva arvuti vahel seadistades parasjagu teenust pakkuvale arvutile teenuse ip aadressi.

Eesmärk

Olgu eesmärgiks seadistada käima veebikoha teenust pakkuv kluster, mis koosneb kahest Apache veebiserverist

                  brauser
                     |
                     .
                    ...
                     | 
                  ruuter              
                     |
                     |
                     |
    --|--------------|-----------------|--
      |                                |         
      |   eth0:0 - 192.168.10.53       | 
      |                                |
      |   primaarne                    |   sekundaarne
      |   www-1                        |   www-2
     _|_  eth0 - 192.168.10.51        _|_  eth0 - 192.168.10.52
    |   | mac - 70:01:68:01:00:51    |   | mac - 70:01:68:01:00:52
    |___|                            |___|       
      |                                |
      |________________________________|

          heartbeat andmevahetus             
 
          eth1 - 192.168.11.51             eth1 - 192.168.11.52

kus

  • eth0 võrguseadmeid kasutatakse teenusega seotud andmevahetuseks
  • eth1 võrguseadmeid kasutatakse klustri komponentide nö elusolekuga seotud anmdmevahetuseks
  • www-1 on üks veebiserver, ip aadressiga 192.168.10.51
  • www-2 on teine veebiserver, ip aadressiga 192.168.10.52
  • veebikoha teenuse ip aadress on 192.168.10.53

Klustri töö tulemusena

  • igal ajahetkel teenindab kasutajaid ainult üks veebiserveri, kas www-1 või www-2
  • mõlema veebiserveri korrasolekul teenindab kasutajaid www-1
  • kui www-1 ei tööta, siis teenindab kasutajaid www-2

Korrasolek ja mitte töötamine käivad antud juhul operatsioonisüsteemi kohta, mitte kasutajale pakutava teenuse enda kohta, see on tegelikult üks R1 lahenduse oluline puudus. Antud lahenduse puhul toimub teenuse töös sisuliselt katkestus, nt katkevad tcp sessioonid, kuid sõltuvalt teenuse iseloomust ja rakendusest ei pruugi see olla oluline ning ei pruugi teenuse kasutajale paista katkestusena.

Tarkvara paigaldamine

Debian v. 5.0 (Lenny) sisaldab paketihalduses Heartbeat versiooni 2.1.3, paigaldamiseks tuleb öelda

 # apt-get install heartbeat

Kuigi see tarkvara versioon on iseenesest CRM-võimeline, selgitatakse järgnevates alapunktides Heartbeati kasutamist nn legacy või R1 režiimis.

Klustri komponentide ettevalmistamine

Klustri moodustavatel arvutitel peab olema

  • ülaltoodud skeemile vastalt on seadistatud arvuti endi ip aadressid (ja mitte teenuse ip aadress)
  • arvutites on käivitatud kõik teenused peale veebiserveri
  • arvutid peavad käsu 'uname -n' vastuseks ütlema oma hostname'i esimese osa, www-1 või www-2
  • mõlemad arvutid peavad suutma lahendada teise arvuti hostname'i vastavaks ip aadressiks
  • kõik Heartbeat seadistusfailid peavad olema mõlemas arvutis samasuguse sisuga

Klustri komponentide seadistamine

Heartbeati tööd juhib kolm seadistusfaili

  • /etc/ha.d/ha.cf - klustri peamine seadistusfail, mis kirjeldab klustri komponenid ja klustri üldised omaduses
  • /etc/ha.d/authkeys - osaliste autentimine
  • /etc/ha.d/haresources - klustri ressursside juhtimine
ha.cf
 debugfile /var/log/ha-debug
 logfile /var/log/ha-log
 logfacility     local0
 keepalive 2
 deadtime 30
 warntime 10
 initdead 120
 udpport 694
 bcast   eth1
 auto_failback on
 node    www-1 www-2

kus

  • debugfile - salvestatakse üksikasjalisemalt info Heartbeat töö kohta
  • logfile - salvestatakse logi
  • logfacility - ?
  • keepalive - iga kahe sekundi järel saadavad osalised välja heartbeat pakette
  • deadtime -
  • wartime -
  • initdead -
  • udpport - millist udp porti kasutatakse heartbeat pakettide jaoks
  • bcast eth1 - kuidas heartbeat pakette saadetekse, bcast tähendab, et saadetakse broadcast pakette, antud juhul broadcast aadressile 192.168.11.255, mille Heartbeat ise arvutab eth1 seadme omaduste põhjal
  • auto_failback
  • node - loetletakse klustri komponentide hostname'id
authkeys
 auth 3
 3 md5 salasona
haresources
 # cat /etc/ha.cf/haresources
 www-1      192.168.10.53

Fail näitab millist klustri komponenti eelistatakse teenuse pakkumiseks ning millised teenuseid klustri komponentidel peetakse. Kõige lihtsamal juhul on nö teenuseks see, millisele klustri komponendile on teenuse ip aadress seadistatud.

Klustri käivitamine

Klustri käivitamiseks tuleb esmalt öelda eelistatud komponendil

 # /etc/init.d/heartbeat start

ning seejärel teisel komponendil

 # /etc/init.d/heartbeat start

Tulemusena peab tekkima eelistatud komponendile juurde uus võrguseade

 # ifconfig eth0:0
 eth0:0    Link encap:Ethernet  HWaddr 70:01:68:01:00:51
           inet addr:192.168.10.53  Bcast:192.168.10.255  Mask:255.255.255.0
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

Klustri kasutamine

Selleks, et veenduda klustri töötamises tuleks esmalt kontrollida, kas võrgus liiguvad heartbeat paketid

 # tcpdump -nei eth1 port 694
 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
 listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
 12:57:28.587268 70:01:68:03:00:51 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 245: 192.168.30.51.46916 > 192.168.30.255.694: UDP, length 203
 12:57:30.015371 70:01:68:03:00:52 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 250: 192.168.30.52.54680 > 192.168.30.255.694: UDP, length 208
 12:57:30.015398 70:01:68:03:00:52 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 247: 192.168.30.52.54680 > 192.168.30.255.694: UDP, length 205
 12:57:30.595228 70:01:68:03:00:51 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 245: 192.168.30.51.46916 > 192.168.30.255.694: UDP, length 203

Kui primaarsel komponendil heartbeat protsess seisata, siis peab süsteem seadistama sekundaarsele komponendile teenuse ip aadressi

 primaarne # /etc/init.d/heartbeat stop
 primaarne # ifconfig eth0:0
             eth0:0    Link encap:Ethernet  HWaddr 70:01:68:01:00:51
                       UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
 sekundaarne # ifconfig eth0:0
               eth0:0    Link encap:Ethernet  HWaddr 70:01:68:01:00:52
                         inet addr:192.168.10.53   Bcast:192.168.10.255  Mask:255.255.255.0
                         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

Lisaks on teenusepakkumise poolses võrgus peale ümberlülitust märgata sellist arp liiklust, kus uus teenuse aadressi kasutama asunud arvuti räägib kümmekond korda selliselt

 15:22:18.978141 70:01:68:01:00:52 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: arp reply 192.168.10.52 is-at 70:01:68:01:00:52
 15:22:18.986983 70:01:68:01:00:52 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: arp who-has 192.168.10.53 tell 192.168.10.53
 15:22:19.240223 70:01:68:01:00:52 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: arp reply 192.168.10.53 is-at 70:01:68:01:00:52
 15:22:19.492206 70:01:68:01:00:52 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: arp who-has 192.168.10.53 tell 192.168.10.53
 ..

Veebiserveri teenuse lisamine heartbeat kontrolli alla

Veebiserveri Heartbeati kontrolli alla andmiseks, st et Heartbeat hoolitseb veebiserveri käivitamise ja seiskamise eest, peab veebiserver

  • kuulama mingit teenust http://localhost:80/ soketil, tundub, et peale ümberlülitust Heartbeat kontrollib selle soketi abil, kas lülitus õnnestus
  • failis /etc/apache2/apache2.conf peab sisalduma Listen direktiiv (mitte ports.conf failis)
  • veebiserveri käivitumist ei tohi juhtida /etc/rc* kataloogidest

Heartbeat /etc/ha.d/haresources failis tuleb kasutada rida

 www-1 192.168.10.53 apache2

Tulemusena Heartbeat hoolitseb ise veebiserveri käivitamise ja seiskamise eest, haresources faili täidetakse selliselt, et

  • käivitamisel läbitakse teenused vasakult paremale, st et enne seadistatakse arvutile teenuse ip aadress ja seejärel käivitatakse apache2
  • seiskamisel läbitakse teenused paremalt vasakule, st et enne lõpetatakse apache2 töö ja seejärel eemaldatakse arvutilt teenuse ip aadress

Tulemuse kontrollimiseks piisab samuti seisata primaarses arvutis heartbeat ja veenduda, et seejärel apache käivitatatakse teises arvutis.

Logi kasutamine

Väga suur abi on probleemide tekkimisel seadistusfailis kirjeldatud logi failide sisu kasutamisest.

Märkused

  • Lisaks ethernetile on võimalik heartbeat signaale edastada üle serial ühenduse.

Heartbeat CRM kasutamine

TODO

Kasulikud lisamaterjalid