• DRBD w CentOS 6

    dodany przez Przemysław Sikora

    W środowiskach biznesowych ciągłość pracy systemów komputerowych odgrywa bardzo dużą rolę. Każdy, nawet najmniejszy przestój może być niezwykle kosztowny. W takich przypadkach dobrze jest stosować rozwiązania klastrowe, które zapewniają wysoką niezawodność i wydajność. W dzisiejszym artykule omówię DRBD, które jest często stosowane w klastrach wysoko-dostępnych (HA). DRBD (Distributed Replicated Block Device) jest to programowa replikacja urządzeń blokowych (takich jak dyski twarde, partycje, woluminy logiczne) z wykorzystaniem sieci. Wszystkie zmiany są replikowane na bierząco w sposób ciągły. Proces ten przebiega blokowo, co zmniejsza ilość danych koniecznych do przeniesienia na inny nośnik (nie dokonywane są modyfikacje całego systemu plików, tylko pojedyńczych bloków). Dzięki temu, rozwiązanie to zapewnia dobry poziom wydajności. Dosyć teorii, czas na instalację. Potrzebujemy pakiet drbd oraz kmod-drbd. Występują one w różnych wersjach. Najnowsza to 8.4. Osobiście skorzystałem z repozytorium “elrepo” oraz wersji nieco starszej, bowiem 8.3.

    yum install drbd83-utils kmod-drbd83

    dla nowszej wersji tj. 8.4

    yum install drbd84-utils kmod-drbd84

    Po instalacji przystępujemy do konfiguracji. Najlepierw edytujemy plik “/etc/drbd.d/global_common.conf” i dodajemy do niego następujące wpisy.
    global { usage-count no; }
    resource repdata2 {
    protocol C;
    startup { wfc-timeout 0; degr-wfc-timeout 120; }
    disk { on-io-error detach; } # or panic, ...
    net { cram-hmac-alg "sha1"; shared-secret "versecretnaszehaslo"; } # don't forget to choose a secret for auth !
    syncer { rate 10M; }
    on node1 {
    device /dev/drbd1;
    disk /dev/VG-node1/drbd-main2;
    address 10.0.2.235:7788;
    meta-disk internal;
    }
    on node2 {
    device /dev/drbd1;
    disk /dev/VG-node2/drbd-main2;
    address 10.0.2.155:7788;
    meta-disk internal;
    }
    }

    resource- nazwa naszego replikowanego zasobu
    device- określamy nazwę dla urzędzenia blokowego drbd
    disk- nasz fizyczny dysk (zalecany lvm)
    address- adres ip i port dla danego “noda”
    shared-secret- hasło, które musi być takie same w konfiguracji wszystkich “nodów” (elementów klastra)

    Po zapisaniu kopiujemy plik “/etc/drbd.d/global_common.conf” na drugą maszynę w klastrze.

    scp /etc/drbd.d/global_common.conf root@node2:/etc/drbd.d

    Następnie tworzymy sumy kontrolne i właściwe urządzenie drbd. Wpierw na pierwszej maszynie:

    drbdadm create-md repdata2

    [root@node1 ~]# drbdadm create-md repdata2
    md_offset 10737414144
    al_offset 10737381376
    bm_offset 10737053696

    Found some data

    ==> This might destroy existing data! <==

    Do you want to proceed?
    [need to type 'yes' to confirm]
    Writing meta data...
    initializing activity log
    NOT initialized bitmap
    New drbd meta data block successfully created.

    To samo na drugiej:

    drbdadm create-md repdata2

    Oto efekt:
    [root@node2 drbd.d]# drbdadm create-md repdata2
    Writing meta data...
    initializing activity log
    NOT initialized bitmap
    New drbd meta data block successfully created.

    Następnie startujemy demona drbd na obydwu serwerach.

    service drbd start

    Wydając polecenie “cat /proc/drbd” na obydwu nodach dostaniemy wyniki podobne do tych poniżej:
    [root@node1 drbd.d]# cat /proc/drbd
    version: 8.3.15 (api:88/proto:86-97)
    GIT-hash: 0ce4d235fc02b5c53c1c52c53433d11a694eab8c build by phil@Build64R6, 2012-12-20 20:09:51

    1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:1048508

    [root@node2 drbd.d]# cat /proc/drbd
    version: 8.3.15 (api:88/proto:86-97)
    GIT-hash: 0ce4d235fc02b5c53c1c52c53433d11a694eab8c build by phil@Build64R6, 2012-12-20 20:09:51

    1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:1048508

    Widzimy, że w tej chwili obydwie maszyny oznaczone są jako slave. Należy na serwerze głównym wydać następujące polecenie:

    drbdadm -- --overwrite-data-of-peer primary repdata2

    Teraz ponownie sprawdzamy “noda1” poleceniem “cat /proc/drbd”
    [root@node1 drbd.d]# cat /proc/drbd
    version: 8.3.15 (api:88/proto:86-97)
    GIT-hash: 0ce4d235fc02b5c53c1c52c53433d11a694eab8c build by phil@Build64R6, 2012-12-20 20:09:51

    1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
    ns:45056 nr:0 dw:0 dr:45720 al:0 bm:2 lo:0 pe:2 ua:0 ap:0 ep:1 wo:f oos:1003708
    [>....................] sync'ed: 4.3% (1003708/1048508)K
    finish: 0:01:28 speed: 11,200 (11,200) K/sec

    i widzimy, że jest ustawiony jako “primary” i że trwa odbuda/synchronizacja drbd. Możemy na serwerze głównym podmontować nowy zasób. Zakładam, że posiadamy wolny katalog “/mnt/drbd” i nie formatowaliśmy wcześniej “partycji” drbd.

    mkfs.ext4 /dev/drbd1 ; mount /dev/drbd1 /mnt/drbd

    W tym samym momencie nie możemy podmontować naszego zasobu do serwera slave. Aby to wykonać na serwerze primary należy wydać następujące polecenie:

    drbdadm secondary repdata2 ; umount /mnt/drbd

    Następnie na secondary:

    drbdadm primary repdata2 ; mount /dev/drbd1 /mnt/drbd

    Aby ponownie wrócić do pierwotnego układu, na serwerze secondary wydajemy polecenie:

    drbdadm secondary repdata2 ; umount /mnt/drbd

    a na primary:

    drbdadm primary repdata2 ; mount /dev/drbd1 /mnt/drbd

    W razie niejasności lub problemów, proszę o kontakt. Życzę wysokiej dostępności 🙂

2 komentarze do “DRBD w CentOS 6”

  1. Andrzej pisze:

    Witam, ciekawy artykuł, dziękuje, mam jednak pytanie, rozumiem że mała zmiana w dużym pliku np ISO, AVI, nie będzie wymagała przesłania całego pliku, nie będzie też problemów w przypadku serwerów WWW, ale ciekawi mnie jak wygląda replikacja bazy danych. Fizycznie też mamy pliki, można skonfigurować 2 serwery które komunikują się ze sobą, można cyklicznie wykonywać zrzut bazy i przenosić, ale czy przy DRBD możliwe będzie (w przypadku potrzeby) wystartowanie serwera bazodanowego z drugiego nośnika i czy wszystkie dane bez problemów będą dostępne?

  2. centos pisze:

    Witam

    W momencie gdy pierwszy node (primary) będzie aktywny, nie będzie możliwości podmontowania zasobu drbd na drugim nodzie (secondary). Dopiero po odmontowaniu i zmianie go na secondary, będzie można podmontować zasób na drugiej maszynie.

Dodaj komentarz

Warto odwiedzić
Valid XHTML 1.0 Transitional centos.com.pl- mapa strony