Ucarp

From EIK wiki

UCARP/CARP

Autor: Marek Must
07.12.2012 Rühm: AK21 Esitamise kuupäev:

Sissejuhatus

Carp (inglise k. "Common Address Redundancy Protocol") on protokoll, mis lubab samadel serveritel samas subnetis jagada ühte IP aadressi.

Ucarp on tarkvara, mis võimaldab sul vähemalt 2 serveri olemasolul jagada neile 1 virtuaalne IP aadress, mille tulemusega saadakse kluster. Ucarp ei ole väga peen lahendus ja sellega tuleb alati arvestada.

Ucarpi tugevus

  * Lihtsus (ülesse seadmine käib lihtsalt)
  * Väike serveri ressursside kasutamine
  * Pole vaja lisa võrgu otsasid (alati on kena, kuid see on täiesti teine teema)
  * Krüptograafiliselt signeeritud teated. (Ucarpil on seadistatud parool, öeldes lihtsalt)
  * Suudab töödata koos mitme operatsiooni süsteemiga (inglise k. interoperability )

Tööpühimõte

Ucrap töötab lihtsalt:

1.) Kui "Server 1" on üleval, siis sellele on määratud virtuaalne IP aadress.
2.) Kui "Server 1" on maas ja "Server 2" on primaarne (inglise k. primary), siis on määratud "Server2"-le virtuaalne IP aadress, eeldades, et "Server 2" töötab.

Ucarpi Nõrkus

  * Ainult IP põhine kluster
  * Seadeid, teenuseid üle ei kanta, kui "Server 2" saab peamiseks serveriks.


Tsiteerides targemaid: ucarp on võrreldes keepalived või heartbeat tarkvaraga tagasihoidlikemate omadustega, kuid mõnel juhul võib just see ollagi eeliseks

UCARP install

Install käib lihtsalt:

 
apt-get install ucarp 

Selle pannakse programmid peale. mitte unustada, et tarkvara tuleb installida mõlemale serverile!!

Eel Seadistamine

  • 1.) Teil on installeeritud 2 serverit, kas siis virtuaalsed või mitte.
  • 2.) Ubuntu tavaline install on täiesti piisav.
  • 3.) Vmware või Virtualboxi installi kasutades on elu natukene lihtsam (seda kasutan ka siin hetkel)


Kasutates Ubuntu kiir installi ja lasite alguses IP anda endale DHCP-l, milleks minu juhul on: 192.168.101.138

Seda saab vaadata:

ifconfig

Tulemüüri(inglise k. Gateway) saamine on natuke keerulisem, sest DHCP-ga seda ei ole võimalik päris "tavaliselt" ( ifconfig) näha. Tulemüüri nägemiseks on olemas mitu võimalust, kuid mulle meeldib kasutada traceroutei. Tava installis seda paketti peal ei ole ja seega tuleks see paigaldada

apt-get install traceroute

Kasutades traceroutei saame:

traceroute www.neti.ee

ja esimene tulemus annab meile juba teada, meie DHCP aadressi:

root@ubuntu:~# traceroute www.neti.ee
traceroute to www.neti.ee (195.50.209.245), 30 hops max, 60 byte packets
 1  192.168.101.2 (192.168.101.2)  0.139 ms  0.103 ms  0.076 ms^C

Pärast esimest rida võib traceroutei programmist CTRL-C välja minna, pole põhjust edasi oodata. Info olemas.

Meie IP ja tulemüür peaksid nägema välja hetkel sellised:

IP: 192.168.101.138
GW: 192.168.110.2


Teie praegune olukord peaks olema midagi sellist:

Server 1

Kasutame käsku ifconfig

 ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:0c:29:6f:d7:c4
          inet addr:192.168.101.138  Bcast:192.168.101.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe6f:d7c4/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8377 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5937 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:9556394 (9.5 MB)  TX bytes:426352 (426.3 KB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)




Server 2

Kas siin kasutame sama käsku, mis eelmise server juures:


eth0      Link encap:Ethernet  HWaddr 00:0c:29:99:51:66
          inet addr:192.168.101.140  Bcast:192.168.101.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe99:5166/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7586 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4140 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:9481944 (9.4 MB)  TX bytes:253201 (253.2 KB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:112 (112.0 B)  TX bytes:112 (112.0 B)

Ucarp Seadistammine

Server 1

 vim /etc/network/interfaces 

Peaks avanema selline pilt:


# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

Nüüd siis muudame selle ümber:


root@ubuntu:~# vim /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback


# The primary network interface
auto eth0
iface eth0 inet static
        ################################
        # standard network configuration
        ################################
        address 192.168.101.138  # meie IP, mis panime alguses
        netmask 255.255.255.0    # netmask, selle saab ifconfig käsuga
        gateway 192.168.101.2    # traceroute aitas siin
        network 192.168.101.0    # natuke tuletamist..
        broadcast 192.168.101.255 #samuti ifconfig aitab

        ################################
        # ucarp configuration  #########
        ################################
        # vid : The ID of the virtual server [1-255]
        ucarp-vid 1
        # vip : Virtuaalne IP aadress
        ucarp-vip 192.168.101.139
        # password : Mõlemal pool sama!!!!
        ucarp-password secret
        # advskew : Advertisement skew [1-255] # tähendab maakeels seda, et me ei reklaamime ennast koguaeg.

        ucarp-advskew 1
        # advbase 
        ucarp-advbase 1
        
        #advskew ja advbase on asjad millega kontrollitakse kui tihedalt brodcastitakse.
        
        # Kontroll, kas oleme peamine server?
        ucarp-master yes



# CARP võrgu addressi kirjutame siia lihtsalt
iface eth0:ucarp inet static
        address 192.168.101.139
        netmask 255.255.255.0

Kindlasti tuleb teha võrgule restart, et kõik seaded võetakse kasutusse.

/etc/init.d/networking restart 

Nüüd on võrgu seaded serveri poolt omaks võetud (juhul kui ei tekkkinud vigu).

Nüüd kasutame meile juba tuttavat käsku ifconfig, et vaadata, kas kõik on hästi.

ifconfig

Peaks nägema välja midagi sellist:

eth0      Link encap:Ethernet  HWaddr 00:0c:29:6f:d7:c4
          inet addr:192.168.101.138  Bcast:192.168.101.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe6f:d7c4/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1195 errors:0 dropped:0 overruns:0 frame:0
          TX packets:287 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:88166 (88.1 KB)  TX bytes:29985 (29.9 KB)

eth0:ucarp Link encap:Ethernet  HWaddr 00:0c:29:6f:d7:c4
          inet addr:192.168.101.139  Bcast:192.168.101.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:36 errors:0 dropped:0 overruns:0 frame:0
          TX packets:36 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:2712 (2.7 KB)  TX bytes:2712 (2.7 KB)

See annab meile selguse, et Server1s on Ucarp kasutuses!

Server 2

Nüüd tuleks teha samasugune muutus ka server 2s. Olles laisad, siis saame nüüd kopeerida selle ka teise serverisse, pärast teeme muudatused: Paar asja on siin väga tähtsad:

1.) ucarp-advskew 100 # tähendab maakeeles seda, et me ei reklaami ennast nii tihedalt.
2.) ucarp-master no # Server ka ei ole master!
3.) IP address peab olema ikka selle serveri oma (192.168.101.140). Muud asjad samad
4.) virtuaalsed IP-d peaksid olema need, mis eelmisel serveril.
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        ################################
        # standard network configuration
        ################################
        address 192.168.101.140
        netmask 255.255.255.0
        gateway 192.168.101.2
        network 192.168.101.0
        broadcast 192.168.101.255

        ################################
        # ucarp configuration
        ################################
        # vid : The ID of the virtual server [1-255]
        ucarp-vid 1
        # vip : Virtuaalne IP aadress
        ucarp-vip 192.168.101.139
        # password : A password used to encrypt Carp communications
        ucarp-password secret
        # advskew : Advertisement skew [1-255] 
        ucarp-advskew 100
        # advbase : Interval in seconds that advertisements will occur
        ucarp-advbase 1
        # master : nüüd me enam ei ole master. Seega määrame ära "no"
        ucarp-master no

# The carp network interface, on top of eth1
iface eth0:ucarp inet static
        address 192.168.101.139
        netmask 255.255.255.0

Nüüd kui vastavad muudatused on sees, siis teeme ka võrgule restarti

/etc/init.d/networking restart


Kui märkasid, siis tegelikult midagi ei juhtunud, kuna oleme mitte masterid! Kõik peaks nägema välja nagu endine:

eth0      Link encap:Ethernet  HWaddr 00:0c:29:99:51:66
          inet addr:192.168.101.140  Bcast:192.168.101.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe99:5166/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:213 errors:0 dropped:0 overruns:0 frame:0
          TX packets:99 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:17498 (17.4 KB)  TX bytes:12669 (12.6 KB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:18 errors:0 dropped:0 overruns:0 frame:0
          TX packets:18 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1380 (1.3 KB)  TX bytes:1380 (1.3 KB)


UCARP testimine

Nüüd on mõlemad serverid paigas ja töötavad Ucarp on mõlemale installitud, kuid hetkel me ikka ei tea, kas Ucarp tegelikult ka töötab.

Kerge test võiks olla selline, et paneme serveri kinni, millel hetkel on ucarp aktiveeritud, minu puhul


shutdown -h now

Nüüd peaksid nägema Server2s (minu puhul) ucarpi aktiveeritult.

ifconfig

Vastus:

eth0      Link encap:Ethernet  HWaddr 00:0c:29:99:51:66
          inet addr:192.168.101.140  Bcast:192.168.101.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe99:5166/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1270 errors:0 dropped:0 overruns:0 frame:0
          TX packets:929 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:94480 (94.4 KB)  TX bytes:113861 (113.8 KB)

eth0:ucarp Link encap:Ethernet  HWaddr 00:0c:29:99:51:66
          inet addr:192.168.101.139  Bcast:192.168.101.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:482 errors:0 dropped:0 overruns:0 frame:0
          TX packets:482 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:38580 (38.5 KB)  TX bytes:38580 (38.5 KB)



Annab meile jällegi kindlustunde, et tõesti server1 annab oma asjad üle server2le, kui server1-ga peaks midagi juhtuma.

UCARP ja Apache koos

Idee on lihtne. Installime mõlemale serverile apache serveri ja hoiame neid süngis linuxi vahenditega. Selleks võib olla rsync või ka tavaline copy cronis :) Hetkel kasutame rsynci.

Installime apachei ja rsynci:

Server1:

apt-get install apache2 rsync

Server2:

apt-get install apache2 rsync

Nüüd on meil 2 serverit, millel on Rsync ja apache2 installitud Apache2 hoiab oma asju:

/etc/apache2

Siis tuleks meil kindlasti sünkida seda kataloogi ja samuti ei tohi ära unustada ka kataloogi, kus meie apache asub Näiteks:

/var/www/

Nüüd paneme oma rsynci tööle, soovitavalt Crontabi. Meil tekkib probleem, et oleks vaja pärast apache2 konfiguratsioonide muutmist ka apache2 uuesti "reloadida". Selleks kasutame skripti. Hetkel siin kasutamiseks kirjutasin lihtsa skripti, mida saab endale vastavalt kergelt parandada.

touch /root/apache_rsync.sh

Anname käivitamise õigused, et pärast ei unustaks:

chmod 755 apache_rsync.sh

Nüüd, skript ise. Eeldus on see, et mõlemal pool on SSH lubatud!

vim /root/apache_rsync.sh

#!/bin/sh
#rsync ise
rsync -avz -e ssh root@192.168.101.138:/home/apache2 /home/apache2/
rsync -avz -e ssh root@192.168.101.138:/var/www/html /var/www/html

#p2rast asjade yle kopeerimist tuleb teha reaload et teisel pool ikka asjad t66taks.
/etc/init.d/apache2 reload

See nüüd croni server2-le

vim /etc/crontab

Lisage selline rida. Sellega hakatakse rsyncika hoidma servereid sünkroonis. Tehakse iga 15 minuti järgi. Number 15 võib muuta oma äranägemise järgi.

*/15 * * * * root /root/apache_rsync.sh

Kokkuvõtteks

Võiks öelda, et viimane skript on väga väike ja võiks kõvasti paremaks teha. Näiteks: email saatmise sisse panna, sest hetkel me ei tea, millal server1 on põhiline ja millal server2 on põhiline. Hetkel teeme eelduse , et server1 sai fataalse errori ja on katki ja pärast selle korda tegemist on see jälle põhiline.

Kasutatud kirjandus