Ucarp
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 server1 on üleval, siis sellele on määratud virtuaalne IP aadress. 2.) Kui server1 on maas ja server2 on primaarne (inglise k. primary), siis on määratud Server2-le virtuaalne IP aadress, eeldades, et server2 on üleval.
Ucarpi Nõrkus
* Ainult IP põhine kluster * Seadeid, teenuseid üle ei kanta, kui server2 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
Kui olite sama laisk nagu mina, siis lasite alguses IP anda endale DHCP-ga, milleks oli 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
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:
Server1
root@ubuntu:~# 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)
Server2
root@ubuntu:~# ifconfig 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 # 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. advskew ja advbase on asjad millega kontrollitakse kui tihedalt brodcastitakse.
/etc/init.d/networking restart
Peaks avanema midagi sellist:
root@ubuntu:~# 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: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:
root@ubuntu:~# ifconfig 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) root@ubuntu:~#
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
- http://valeriytroshin.blogspot.com/2011/08/carp-failover-redundancy-in-ubuntu-1104.html
- http://laurentbel.com/2012/04/12/simple-apache-failover-cluster-on-ubuntu-with-config-synchronization/
- http://www.auul.pri.ee/wiki/Operatsioonis%C3%BCsteemi_Debian_GNU/Linux_kasutamine#ucarp_kasutamine
- http://www.freebsd.org/doc/handbook/carp.html
- http://laurentbel.com/2012/04/04/simple-failover-cluster-on-ubuntu-using-carp/
- http://en.wikipedia.org/wiki/Common_Address_Redundancy_Protocol
- http://blog.ijun.org/2009/11/high-availability-with-freebsd-and-carp.html
- http://www.howtoforge.com/how-to-configure-a-pfsense-2.0-cluster-using-carp
- http://kuutorvaja.eenet.ee/wiki/K%C3%B5rgk%C3%A4ideldavus_UCARP_abil#Paigaldamine_ja_seadistamine_RHEL.2C_CentOS_ja_Fedora_kasutajatele
- http://www.pureftpd.org/project/ucarp