This is an old revision of the document!
Serviciul pentru care vom face load-balancing este HTTP. Serverul de web Apache2 este deja instalat pe realservere. Directorul va imparti cererile venite din partea clientului catre cele 2 realservere.
Pe director este deja instalat pachetul ipvsadm
necesar configurării load balancing-ului.
Mai intai vom configura adresa virtuala pe director. Adaugam adresa 10.0.0.1/24 pe subinterfata eth0:1 de pe saisp-vm-1:
root@saisp-vm-1:~# ip addr add dev eth0 10.0.0.1/24 label eth0:1
Vom configura HTTP ca serviciu virtual. Trebuie să specificăm adresa si portul serverului virtual și protocolul de nivel transport (TCP, în cazul nostru).
root@saisp-vm-1:~# ipvsadm -A -t 10.0.0.1:80
Serviciul virtual a fost configurat, dar trebuie să adăugăm și servere reale:
root@saisp-vm-1:~# ipvsadm -a -t 10.0.0.1:80 -r 10.0.0.20:80 -g root@saisp-vm-1:~# ipvsadm -a -t 10.0.0.1:80 -r 10.0.0.30:80 -g
Parametrul -g semnifică folosirea LVS-DR.
Trebuie, de asemenea, să “convingem” RS-urile să răspundă la cereri pe adresa VS-ului. Există cel puțin două posibilități pentru acest lucru:
root@saisp-vm-2:~# iptables -t nat -A PREROUTING -d 10.0.0.1 -j REDIRECT
root@saisp-vm-3:~# iptables -t nat -A PREROUTING -d 10.0.0.1 -j REDIRECT
Acum puteți utiliza serviciul configurat.
Verificati functionarea deschizand in browser adresa http://10.0.0.1 Folosind CTRL+F5, faceti refresh de cateva ori si observati cum apar, pe rand, paginile de pe cele 2 realservere.
Folosind Wireshark, porniti o captura pe interfata br0 de pe masina fizica. Observati adresele IP si MAC din:
Pentru a vizualiza starea VS-ului, folositi parametrul -l:
root@saisp-vm-1:~# ipvsadm -l
Pentru a afisa detalii despre conexiunile gestionate de VS, adaugati si parametrul -c:
root@saisp-vm-1:~# ipvsadm -l -c
Pe langa configuratia de baza pe care am realizat-o, putem seta parametri aditionali.
De exemplu, vom activa scheduler-ul de tip round-robin, apoi vom configura un maxim de 4 conexiuni simultane pentru fiecare RS:
root@saisp-vm-1:~# ipvsadm -E -t 10.0.0.1:80 -s rr root@saisp-vm-1:~# ipvsadm -e -t 10.0.0.1:80 -r 10.0.0.20:80 -x 4 root@saisp-vm-1:~# ipvsadm -e -t 10.0.0.1:80 -r 10.0.0.30:80 -x 4
Parametrul -E desemneaza editarea serviciului (in cazul nostru, s-a modificat scheduler-ul).
Parametrul -e desemneaza editarea realserverului (in cazul nostru, s-a modificat limita maxima de conexiuni).
In browser, faceti refresh de cateva ori si observati cum dupa 8 refresh-uri, directorul nu va mai trimite cererile catre realservere.
Pentru RS-uri cu configurație hardware diferită, se pot folosi valori diferite ale numărului maxim de conexiuni. Alternativ, se poate defini o pondere (weight) diferită pentru fiecare server și se poate folosi un scheduler ponderat (de exemplu, wrr) pe VS.
Pentru a sterge serviciul definit, folosim parametrul -D:
root@saisp-vm-1:~# ipvsadm -D -t 10.0.0.1:80
In plus, pe realservere vom sterge regulile iptables definite:
root@saisp-vm-2:~# iptables -t nat -F
root@saisp-vm-3:~# iptables -t nat -F
In continuare, vom configura directorul pentru a folosi modul LVS-TUN. Apoi, vom observa diferentele fata de LVS-DR.
Analog punctului anterior, definiti serviciul HTTP pe director, apoi cele doua realservere in modul tunneling (folositi parametrul -i
).
Pentru ca realserverele sa poata interpreta corect pachetele primite de la director, trebuie sa configuram cate o interfata tunel, de tip ipip, pe fiecare dintre acestea.
Interfata tunel trebuie sa aiba aceeasi adresa IP cu adresa virtuala a directorului.
root@saisp-vm-2:~# ip tunnel add tun0 mode ipip local 10.0.0.20 root@saisp-vm-2:~# ip addr add 10.0.0.1/24 dev tun0 root@saisp-vm-2:~# ip link set tun0 up
root@saisp-vm-3:~# ip tunnel add tun0 mode ipip local 10.0.0.30 root@saisp-vm-3:~# ip addr add 10.0.0.1/24 dev tun0 root@saisp-vm-3:~# ip link set tun0 up
Porniti, din nou, Wireshark si realizati o captura pe interfata br0 a masinii fizice. Observati pachetele incapsulate si diferentele fata de LVS-DR.
Stergeti resursa HTTP definita anterior pe director.
Stergeti interfetele tunel create pe realservere:
root@saisp-vm-2:~# ip tunnel del tun0
root@saisp-vm-3:~# ip tunnel del tun0
Linux-HA este o solutie de clustering. Vom configura un cluster simplu, format din două noduri.
Topologia conceptuala este cea din figura de mai sus. Observatii:
Pachetul heartbeat
este deja instalat pe saisp-vm-2 si saisp-vm-3.
Este necesar ca stațiile să se poată adresa una pe cealaltă folosind doar hostname-ul. Adăugați liniile corespunzătoare în /etc/hosts:
saisp-vm-2# echo "10.0.0.30 saisp-vm-3" >> /etc/hosts
saisp-vm-3# echo "10.0.0.20 saisp-vm-2" >> /etc/hosts
Fișierele de configurare pentru heartbeat se găsesc în directorul /etc/ha.d/
. Creați, pe ambele stații, fișierul ha.cf
.
autojoin none
ucast eth0 10.0.0.30
node saisp-vm-2 saisp-vm-3
Linux-HA oferă suport pentru autentificarea conexiunii. Să configurăm folosirea SHA1:
authkeys
:auth 1 1 sha1 42ade27dad9045964fab10a395ffe4e0f726a80b
echo “my secret” | openssl sha1
.authkeys
trebuie să poată fi citit numai de root: chmod 600 /etc/ha.d/authkeys
.Nu în ultimul rând, trebuie să configurăm serviciile oferite de cluster. În acest exemplu, vom configura HTTP.
/etc/ha.d/haresources
:saisp-vm-2 10.0.0.50 apache2
saisp-vm-2
. Dacă acest nod pică, serviciile vor fi oferite de saisp-vm-3
.
Reporniți serviciul heartbeat
pe ambele mașini și observați adresele lor IP.
Folosind un browser, accesati adresa http://10.0.0.50/
Experimentați oprind serviciul heartbeat de pe saisp-vm-2
. După un timeout, saisp-vm-3
va avea configurată adresa serviciului pe interfața sa eth0.
Accesati din nou adresa http://10.0.0.50/ dar observati ca de aceasta data va raspunde statia saisp-vm-3
.
Atenție: acest setup oferă redundanță la nivelul serviciilor, dar nu asigură și replicare. Într-o situație concretă, trebuie să ne asigurăm că ambele servere oferă aceleași informații.
Dorim sa asiguram replicarea continutului pentru clusterul configurat la punctul anterior. Vom folosi DRBD.
Vom folosi o legatura directa intre intefetele eth1
ale nodurilor. Aceasta legatura va fi folosita pentru traficul de sincronizare si replicare al DRBD.
Configurati adresele IP pe legatura dedicata:
saisp-vm-2# ip addr add 10.0.23.2/24 dev eth1 saisp-vm-2# ip link set eth1 up
saisp-vm-3# ip addr add 10.0.23.3/24 dev eth1 saisp-vm-3# ip link set eth1 up
Pachetul drbd8-utils
este deja instalat.
Observati faptul ca fisierele /etc/drbd.conf si /etc/drbd.d/global_common.conf sunt deja create. Noi vom defini o noua resursa, in fisierul /etc/drbd.d/r0.res. Resursa va avea urmatoarele caracteristici:
ATENTIE! Urmatoarele task-uri trebuie efectuate pe ambele noduri.
Creati fisierul /etc/drbd.d/r0.res, cu urmatorul continut:
resource r0 { on saisp-vm-2 { device /dev/drbd0; disk /dev/sdb1; address 10.0.23.2:7788; meta-disk internal; } on saisp-vm-3 { device /dev/drbd0; disk /dev/sdb1; address 10.0.23.3:7788; meta-disk internal; } }
Restartati serviciul drbd:
/etc/init.d/drbd restart
Initializati cu zero partitia /dev/sdb1:
dd if=/dev/zero of=/dev/sdb1 bs=64K
Creati metadatele DRBD pentru resursa r0:
drbdadm create-md r0
Atasati resursa la block-device:
drbdadm attach r0
Verificati starea DRBD:
cat /proc/drbd drbd-overview
ATENTIE! Sincronizarea initiala trebuie pornita doar pe unul dintre noduri! Pe nodul care este activ in cluster (are adresa 10.0.0.50 pe interfata eth0:0), porniti sincronizarea initiala:
drbdadm -- --overwrite-data-of-peer primary r0
Verificati ca sincronizarea a inceput:
drbd-overview
In timp ce sincronizarea se efectueaza:
Creati un sistem de fisiere ext4 pe device-ul /dev/drbd0. Acest lucru poate fi efectuat doar pe nodul de pe care ati pornit sincronizarea:
mkfs.ext4 /dev/drbd0
Modificati fisierul /etc/ha.d/haresources pe ambele noduri astfel incat daemon-ul Linux-HA sa monteze device-ul /dev/drbd0 in /var/www atunci cand nodul devine activ:
saisp-vm-2 drbddisk::r0 Filesystem::/dev/drbd0::/var/www::ext4 10.0.0.50 apache2
Restartati serviciul heartbeat pe ambele noduri.
Verificati ca sistemul de fisiere a fost montat corect.
Dupa ce s-a incheiat sincronizarea, creati un fisier index.html in /var/www/html/ pe nodul activ si verificati functionalitatea din browser, la adresa http://10.0.0.50/
mkdir /var/www/html/ echo "DRBD Storage" > /var/www/html/index.html
Inchideti serviciul heartbeat pe masina virtuala care este nod primar si asteptati ca celalalt nod sa devina activ. Verificati ca storage-ul functioneaza in continuare corect.
In configuratia actuala, DRBD nu permite verificare consistentei block-device-urilor fara ca acestea sa fie demontate.
Consultati documentatia de aici: https://docs.linbit.com/doc/users-guide-84/s-use-online-verify/ Activati verificarea online pentru resursa definita, apoi porniti o verificare online.