This shows you the differences between two versions of the page.
saisp:labs:05:contents:04 [2014/03/23 19:11] alexandru.carp |
saisp:labs:05:contents:04 [2014/03/24 16:40] (current) alexandru.carp [04. [20p] DRBD] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 04. Linux-HA ==== | + | ==== 04. [20p] DRBD ==== |
- | **Linux-HA** este o solutie de clustering. Vom configura un cluster simplu, format din două noduri. | + | Dorim sa asiguram replicarea continutului pentru clusterul configurat la punctul anterior. Vom folosi DRBD. |
- | Topologia conceptuala este cea din figura de mai sus. Observatii: | + | {{:saisp:labs:05:contents:lab05-drbd.jpg|}} |
- | * Cele două realservere din topologia LVS vor fi configurate ca un cluster. | + | |
- | * Directorul din topologia LVS nu mai are nici un rol aici. Inchideti masina virtuala respectiva, pentru a nu consuma resurse inutil. | + | |
- | * Adresa IP prin care va fi accesibil serviciul HTTP este 10.0.0.50. | + | |
- | Pachetul ''heartbeat'' este deja instalat pe **saisp-vm-2** si **saisp-vm-3**. | + | Vom folosi o legatura directa intre intefetele ''eth1'' ale nodurilor. Aceasta legatura va fi folosita pentru traficul de sincronizare si replicare al DRBD. |
- | 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: | + | Configurati adresele IP pe legatura dedicata: |
+ | <code> | ||
+ | saisp-vm-2# ip addr add 10.0.23.2/24 dev eth1 | ||
+ | saisp-vm-2# ip link set eth1 up | ||
+ | </code> | ||
+ | <code> | ||
+ | saisp-vm-3# ip addr add 10.0.23.3/24 dev eth1 | ||
+ | saisp-vm-3# ip link set eth1 up | ||
+ | </code> | ||
+ | |||
+ | 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: | ||
+ | * numele resursei: **r0**; | ||
+ | * device-ul DRBD: **/dev/drbd0**; | ||
+ | * partitia de pe disc: **/dev/sdb1**; | ||
+ | * metadate stocate **intern**. | ||
+ | |||
+ | **ATENTIE!** Urmatoarele task-uri trebuie efectuate pe **ambele noduri**. | ||
+ | Creati fisierul **/etc/drbd.d/r0.res**, cu urmatorul continut: | ||
<code> | <code> | ||
- | saisp-vm-2# echo "10.0.0.30 saisp-vm-3" >> /etc/hosts | + | 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; | ||
+ | } | ||
+ | } | ||
</code> | </code> | ||
+ | |||
+ | Restartati serviciul **drbd**: | ||
<code> | <code> | ||
- | saisp-vm-3# echo "10.0.0.20 saisp-vm-2" >> /etc/hosts | + | /etc/init.d/drbd restart |
</code> | </code> | ||
- | Fișierele de configurare pentru heartbeat se găsesc în directorul ''/etc/ha.d/''. Creați, **pe ambele stații**, fișierul {{{ha.cf}}}. | + | Initializati cu zero partitia **/dev/sdb1**: |
- | * Dezactivați **auto-discovery** (Nodurile vor fi specificate manual)<code>autojoin none</code> | + | <code> |
- | * Specificați modul de comunicare (unicast), interfața pe care se comunică (eth1) și **adresa celuilalt nod** (Linux-HA poate folosi, de asemenea, broadcast sau multicast)<code>ucast eth1 10.0.0.20</code> | + | dd if=/dev/zero of=/dev/sdb1 bs=64K |
- | * Specificați nodurile care participă la cluster. Va trebui să specificați **inclusiv nodul local** - numele unui nod trebuie întotdeauna să coincidă cu hostname-ul masinii:<code>node saisp-vm-2 saisp-vm-3</code> | + | </code> |
- | Linux-HA oferă suport pentru autentificarea conexiunii. Să configurăm folosirea SHA1: | + | Creati metadatele DRBD pentru resursa **r0**: |
- | * Fișierul de configurare corespunzător este {{{authkeys}}}: | + | |
<code> | <code> | ||
- | auth 1 | + | drbdadm create-md r0 |
- | 1 sha1 42ade27dad9045964fab10a395ffe4e0f726a80b | + | |
</code> | </code> | ||
- | * Puteți genera un digest SHA1 folosind {{{echo "my secret" | openssl sha1}}}. | ||
- | * Fișierul {{{authkeys}}} trebuie să poată fi citit numai de root: {{{chmod 600 /etc/ha.d/authkeys}}}. | ||
+ | Atasati resursa la block-device: | ||
+ | <code> | ||
+ | drbdadm attach r0 | ||
+ | </code> | ||
- | Nu în ultimul rând, trebuie să configurăm serviciile oferite de cluster. În acest exemplu, vom configura HTTP. | + | Verificati starea DRBD: |
- | * Creați fișierul de configurare {{{/etc/ha.d/haresources}}}: | + | |
<code> | <code> | ||
- | saisp-vm-2 10.0.0.50 apache2 | + | cat /proc/drbd |
+ | drbd-overview | ||
</code> | </code> | ||
- | * Linia de mai sus configurează serviciile apache2 să ruleze inițial pe nodul {{{saisp-vm-2}}}. Dacă acest nod pică, serviciile vor fi oferite de {{{saisp-vm-3}}}. | ||
- | * Folositi **aceeasi linie** si pe saisp-vm-3 (resursa trebuie detinuta de un singur owner). | ||
- | * Este important de observat că, în acest exemplu, serviciile rulează pe ambele noduri tot timpul. Ceea ce se schimbă este nodul cu care este asociată adresa IP. | ||
- | Reporniți serviciul pe ambele mașini și observați adresele lor IP. | + | **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: | ||
+ | <code> | ||
+ | drbdadm -- --overwrite-data-of-peer primary r0 | ||
+ | </code> | ||
- | Experimentați oprind interfața eth1 de pe {{{saisp-vm-2}}}. După un timeout, {{{saisp-vm-3}}} va avea configurată adresa serviciului pe interfața sa eth1. | + | Verificati ca sincronizarea a inceput: |
+ | <code> | ||
+ | drbd-overview | ||
+ | </code> | ||
- | **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. | + | 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: | ||
+ | <code> | ||
+ | mkfs.ext4 /dev/drbd0 | ||
+ | </code> |