DRBD kasutamine operatsioonisüsteemiga Debian

Allikas: Imre kasutab arvutit
Mine navigeerimisribaleMine otsikasti

Sissejuhatus

DRBD (Distributed Replicated Block Device) http://www.drbd.org/ tarkvara võimaldab seadistada kahe arvuti lokaalsed plokkseadmed tööle nii, et taustal sünkroniseeritakse ühe arvuti plokkseadmele tehtud muudatusi teise arvuti plokkseadmele.

DRBD saab kasutada kahes režiimis

  • single-primary - nn DRBD legacy režiim, kus DRBD süsteemi kontrolli all olevatest plokkseadmetest on samaegselt kasutatav (st praktiliselt monteeritav) vaid üks; sobib nn cold-standby lahenduse seadistamiseks, kus üks süsteem ei teeninda seni kuni teine pakub teenust
  • dual-primay - režiim, kus saab kasutada mõlemat DRBD süsteemi kontrolli all olevat plokkseadet, aga eeldusel, et failisüsteem või plokkseadet kasutav rakendus oskavad arvestada asjaolu, et tegu on nö sama loogilise plokkseadmega (nt OCFS2 failisüsteem või Xen'i migration)

Lihtsal juhtumil saavutatakse rakenduskihi suurem redundantsus sellega, et lülitatakse käima mitu rakendusserverit sarnase konfiguratsiooniga ühendades nt NFS abil kõigile külge sama dokumendijuurika, aga seejuures jääb lahendamata NFS serveri enda redundantsus - isegi kui NFS serveri sees on plokkseade moodustatud nt RAID skeemile, on NFS serverina kasutusel üks füüsiline arvuti. DRBD abil on võimalik sünkroniseerida plokkseadme kihis andmeid kahe NFS serveri vahel ja seetõttu öeldakse vahel DRBD kohta network RAID1.

DRBD ei ole selles mõttes skaleeruv, et süsteem koosneb üldiselt täpselt kahest osalisest.

Mõisted

  • replikeerimine - tavalise DRBD töötamise käigus andmete jõudmine üle võrgu teisele DRBD komponendile
  • sünkroniseerimine - toimub esmaselt DRBD initsialiseerimisel; samuti kui kaks komponenti pole mingi aja jooksul olnud üksteisele nähtavad (nt Secondary Primarile)
  • activity log

Tööpõhimõte

Olgu kasutada kaks arvutit, mis on lülitatud käima single-primary režiimis

             teenuse kliendid
 
                   |
                   |
  primaarne        |           sekundaarne
    --|------------|-------------|--
      |                          | 
     _|_  www -1                _|_  www-2
    |   |                      |   |    
    |___|                      |___|    
      |     /srv/www             |     /srv/www
      | --> /dev/drbd0           | ..> /dev/drbd0
      | --> /dev/sdb             | --> /dev/sdb       
      |                          |
    --|--------------------------|-------------------
              DRBD andmevahetuse võrk

kus

  • /dev/sdb - kummaski arvuti olev lokaalne plokkseade, mis on seadistatud käima DRBD nö backendina
  • /dev/drbd0 - loogiline seade, millele on moodustatud failisüsteem (see loogiline seade on moodustatud ühest lokaalselt ja ühest teise arvuti plokkseadmest)
  • /srv/www - failisüsteemi ühenduspunkt
  • ..> tähistab, et failisüsteem ei ole külgeühendatud olekus
  • lugemiseks kasutatakse ainult /dev/drbd0 seadme lokaalset komponenti (kiiruse määravad lokaalse seadme omadused)
  • kirjutatakse /dev/drbd0 seadme lokaalsele ja teises arvuti paiknevale komponendile (kiiruse piirab tõenäoliselt võrk)

Tarkvara paigaldamine

DRBD skeemis osalevatele arvutitele tuleb paigaldada DRBD tarkvara, mis esineb kahes paketis, kusjuures tähelepanelikult kontrollida, et paigaldatakse õigele tuuma versioonile vastav moodul

# apt-get install drbd8-modules-2.6-xen-amd64 drbd8-utils

Alates Linux tuuma v. 2.6.33 sisaldub DRBD tuuma koosseisus kusjuures Debian Squeeze tuum 2.6.32 sisaldab DRBD mooduleid samuti. Debian v. 9 Stretch sisaldab DRBD v. 8.4 tarkvara, täpsemalt

  • drbd-utils v. 8.9.10 haldusutiliit
  • drbd v. 8.4.7 tuuma moodul

Tundub, et haldusutiliit võib olla oluliselt uuem kui tuuma moodul. Seadistamine toimub nö tavalisel v. 8 viisil /etc/drbd.conf failist ning juhtimine drbdadm jt utiliitidega. Ei kasutata v. 9 iseloomulikke drbdmanage jt vahendeid, ilmselt seetõttu, et tarkvara ei ole v. 9.

DRDB osaliste seadistamine

DRBD tööd juhib juhib seadistusfail /etc/drbd.conf, mis peab olema kõigis osalistes samasugune.

Nt võiks kasutada sellist seadistusfaili

# egrep -v "^$|^ +#|^#" /etc/drbd.conf
global {
  usage-count no;
}

common {
syncer { rate 10M; }
}

resource r0 {
  protocol C;
  handlers {
    pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
    pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
    local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
  }

  startup {
    degr-wfc-timeout 120;    # 2 minutes.
  }

  disk {
    on-io-error   detach;
  }
 
  net {
    after-sb-0pri disconnect;
    after-sb-1pri disconnect;
    after-sb-2pri disconnect;
    rr-conflict disconnect;

    cram-hmac-alg "sha256";
    shared-secret "saladus123";
  }

  syncer {
    rate 10M;
    al-extents 257;
  }

  on www-1 {
    device     /dev/drbd0;
    disk       /dev/sdb;
    address    192.168.10.51:7788;
    meta-disk  internal;
  }

  on www-2 {
    device    /dev/drbd0;
    disk      /dev/sdb;
    address   192.168.10.52:7788;
    meta-disk internal;
  }
}

kus

  • usage-count yes - kasutus registreeritakse aadressil http://usage.drbd.org/cgi-bin/show_usage.pl
  • cram-hmac-alg, shared-secret - osaliste autentimine
  • syncer { rate 10M; } - drbd komponentide andmevahetuse kiirus, teoreetiliselt võiks see olla drbd süsteemile kirjutamise piirkiirus
  • ilus oleks kui /etc/hosts failidest osalise nimed laheneksid
  • handlers - nö tõsiste vigade puhul pannakse DRBD osalise arvuti operatsioonisüsteem seisma
  • address - kui kasutatakse mitut DRBD ressurssi, siis tuleb kasutada ressursside juures erinevaid porte

DRBD osaliste initsialiseerimine

Vajadusel laadida drbd tuuma moodul

 # modprobe drbd

Kõigil osalistel tuleb üks kord

  • initsialiseerida meta data
 # drbdadm create-md r0
 md_offset 8589930496
 al_offset 8589897728
 bm_offset 8589635584
 
 Found some data 
  ==> This might destroy existing data! <==
 
 Do you want to proceed?
 [need to type 'yes' to confirm] yes
 ...
 Writing meta data...
 initialising activity log
 NOT initialized bitmap
 New drbd meta data block sucessfully created.
  • Ühendada lokaalne plokkseade süsteemile külge DRBD ressursina
 # drbdadm attach r0
  • Laadida sünkroniseerimise parameetrid
 # drbdadm syncer r0
  • Ühendada DRBD seade võrku
 # drbdadm connect r0

Süsteemi esmakordseks käivitamiseks tuleb ainult primaarsel komponendil öelda

 primary# drbdadm -- --overwrite-data-of-peer primary r0

Seejärel toimub sünkroniseerimine, primaareselt paistab see nii, pöörata tähelepanu kumb osaline on SyncSource ja SyncTarget

 primary# /etc/init.d/drbd status
 drbd driver loaded OK; device status:
 version: 8.0.14 (api:86/proto:86)
 GIT-hash: bb447522fc9a87d0069b7e14f0234911ebdab0f7 build by phil@fat-tyre, 2008-11-12 16:40:33
 m:res  cs          st                 ds                     p  mounted  fstype
 0:r0   SyncSource  Primary/Secondary  UpToDate/Inconsistent  C
 ...    sync'ed:    28.8%              (2990860/4194140)K

Või vaadates /proc/drbd sisu

 primary# cat /proc/drbd 
 version: 8.0.14 (api:86/proto:86)
 GIT-hash: bb447522fc9a87d0069b7e14f0234911ebdab0f7 build by phil@fat-tyre, 2008-11-12 16:40:33
  0: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r---
     ns:1829280 nr:0 dw:0 dr:1829280 al:0 bm:111 lo:0 pe:0 ua:0 ap:0
         [==>.................] sync'ed: 18.4% (7987/9773)M
         finish: 0:12:03 speed: 11,260 (10,104) K/sec
         resync: used:0/61 hits:114218 misses:112 starving:0 dirty:0 changed:112
         act_log: used:0/257 hits:0 misses:0 starving:0 dirty:0 changed:0

DRBD töötamisel ei tööta deemonprotsess, vaid nn tuuma lõimed

 # ps aux | grep drbd
 root      2453  0.0  0.0      0     0 ?        S    Jun28   0:08 [drbd0_worker]
 root      2461  0.0  0.0      0     0 ?        S    Jun28   0:15 [drbd0_receiver]
 root      5128  0.0  0.0      0     0 ?        S    18:59   0:00 [drbd0_asender]

Tulemusena on tekkinud töötav st käivitatud olekus DRBD süsteem.

Single-primary DRBD süsteemi kasutamine

Single-primary DRBD süsteemis tohib otseselt kasutada DRBD ressurssi ainult primaarsel arvutil, nt moodustada failisüsteem, külge ühendada ja seda kasutada. Süsteem propageerib taustal sekundaarsesse arvutisse muudatusi, kuid need pole kasutatavad enne kui sekundaarne osaline on DRBD vahenditega viidud primaarsesse rolli.

Kusjuures sekundaarsel komponendil ei saa töötada, nt disk ütleb

 # fdisk /dev/drbd0 
 Unable to open /dev/drbd0

Süsteemi käivitamine

Kui DRBD süsteem on initsiliseeritud, siis sobib nt r0 ressursi käivitamiseks öelda mõlemas komponendis

 # drbdadm up r0

kusjuures 'up' sisaldab endas järgnevust

 # drbdadm attach r0
 # drbdadm syncer r0
 # drbdadm connect r0

DRBD süsteemi seiskamiseks sobib öelda

 # drbdadm down r0

kusjuures 'down' sisaldab endas järgnevust

 # drbdadm secondary r0
 # drbdadm disconnect r0
 # drbdadm detatch r0

Süsteemi töö jälgimine

Primaarses arvutis paistab DRBD olukord selline

 # cat /proc/drbd 
 version: 8.0.14 (api:86/proto:86)
 GIT-hash: bb447522fc9a87d0069b7e14f0234911ebdab0f7 build by phil@fat-tyre, 2008-11-12 16:40:33
  0: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r---
    ns:4 nr:2517044 dw:2517048 dr:2025 al:1 bm:128 lo:0 pe:0 ua:0 ap:0
        resync: used:0/61 hits:1048398 misses:128 starving:0 dirty:0 changed:128
        act_log: used:0/257 hits:0 misses:1 starving:0 dirty:0 changed:1

kus

  • cs: Connected - normaalne süsteemi olek
  • st:Primary/Secondary - käsu antud arvuti roll on parasjagu primaarne
  • ds:UpToDate/UpToDate - normaalne süsteemi olek

DRBD komponendi olekut saab küsida selliselt, r0 ressursi jaoks

 # drbdadm state r0
 Primary/Secondary

mis tähendab, et käesolev aruti on primaarne ja teine sekundaarne. Teisel arvutil samamoodi küsides saab vastupidise vastuse. Sarnaselt saab küsida cstate ja dstate konta, vastavalt ühenduses olemise ja uptodate olemise kohta

 # drbdadm cstate r0
 Connected
 # drbdadm dstate r0
 UpToDate/UpToDate

Koondit neist olekutest näeb küsides

 # /etc/init.d/drbd status
 drbd driver loaded OK; device status:
 version: 8.0.14 (api:86/proto:86)
 GIT-hash: bb447522fc9a87d0069b7e14f0234911ebdab0f7 build by phil@fat-tyre, 2008-11-12 16:40:33
 m:res                cs         st                 ds                 p  mounted  fstype
 0:r0                 Connected  Secondary/Primary  UpToDate/UpToDate  C
 1:r1                 Connected  Secondary/Primary  UpToDate/UpToDate  C
 2:r2                 Connected  Secondary/Primary  UpToDate/UpToDate  C

kus

  • res - ressursi nimi
  • cs - connection state
  • st - state
  • ds - data state
  • p - DRBD protokoll
  • mounted - ühenduspunkt
  • fstype - failisüsteemi nimi

DRBD rollide vahetamine

Single-primary DRBD süsteemis toimub komponentide vahel rollide vahetamine selliselt, esmalt lõpetada DRBD seadme kasutamine, st ühendada failisüsteem primaarses lahti ning viia LVM voluumid nn NOT available olekusse, nt

 #  vgchange -a n

seejärel viia primaarne sekundaarseks

 # drbdadm secondary r0

tulemusena on mõlemad DRBD osalised sekundaarsed

 # drbdadm state r0
 Secondary/Secondary

Algse sekundaarse viimine priaarsesse rolli

 # drbdadm primary r0

Kui toimub LVM kasutamine, siis uue primaarses öelda

 # vgchange -a y

Failisüsteem

Kui süsteem töötab normaalselt, st üks osaline on primaarses ja teine sekundaarses rollis, siis sobib primaarsel esmalt võtta DRBD plokkseade kasutusse, nt moodustades sellele failisüsteem

 # mke2fs -j /dev/drbd0

ning kasutamiseks ühendada külge

 # mount /dev/drbd0 /srv/www

Re-sünkroniseerimine

DRBD komponendi re-sünkroniseerimiseks tuleb kõnealuses arvutis öelda

 # drbdadm invalidate r0

LVM

Kuna DRBD seadmele /dev/drbd0 vastab sisuliselt mõne füüsiline plokkseade, siis suure tõenäosusega ilma LVM seadistusfailis /etc/lvm/lvm.conf filtri osa kohendamata saab PV initsialiseerimisel sarnase teate

 # pvcreate /dev/drbd0 
   Found duplicate PV OUZZv8VAX7hQIUDvz0oa42rvgJl6oinK: using /dev/sdb1 not /dev/drbd0
   Volume group "drbd" successfully created

Aitab nt sellise (kuigi kontreetne näide ei tööta millegipärast) filtri kasutamine, kui DRBD seadmele vastav plokkseade on /dev/sdb1

 filter = [ "r|/dev/sdb1|", "r|/dev/disk|", "a/.*/" ]

Peale filtri muutmist maksab öelda, mis moodustab värske LVM cache'i

 # vgscan

Dual-primary DRBD süsteemi kasutamine

Debiani paketihalduse DRBD versioon 8.0.x ei ole dual-primary funktsioonide osas nii arenenud kui 2009 aasta suvel drbd.org viimane stabiilne versioon, aga kasutada tundub, et saab. Dual-primary sobib kasutada nt sellistel juhtumitel

  • Xen live-migration
  • nn klustri-failisüsteem, nt OCFS2
  • Proxmox

Seadistamine

Selleks tuleb alustuseks käivitada DRBD nö tavalises Primary-Secondary režiimis ning seejärel lisada seadistusfaili net sektsiooni juurde rida

 net {
   ...
   allow-two-primaries;
 }

ning mõlemas arvutis öelda

 # drbdadm adjust r0

ning promoteerida Secondary arvuti primaarsesse olekusse

 # drbdadm primary r0

Edust annab tunnistust olek

 # drbdadm state r0
 Primary/Primary

ning fakt, et mõlemas osalises saab samaaegselt pöörduda DRBD seadme poole fdisk'iga.

Selleks, et primary-primary kehtestuks automaatselt süsteemi käivitamisel sobib kasutada rida

resource .. {
  become-primary-on both;
..

Xen

Xen ja DRBD koos kasutamine võimaldab kahest lokaalse plokkseadmega füüsilisest arvutist moodustada salvestusressursi mõttes kõrgendatud redundantsusega süsteemi, seejuures saab kasutada Xen live migration protseduuri. Selline süsteem erineb nö klassikalisest juhtumist kus Xen live migration eeldab, et osalevatesse dom0 arvutitesse on ühendatud külge mingist kolmandast kohast, nt FC või iSCSI salvestusressurss. DRBD juhtumil kasutatakse kahte sõltumatut salvestusressurssi ja süsteem on kaitstud nt ühe arvuti täieliku füüsilise riknemise eest, kusjuures kui FC või iSCSI iseenesest ei ole kõrgendatud redundantsusega, siis on FC või iSCSI teenus põhimõtteliselt ikkagi SPOF (Single Point of Failure).

Süsteemi ettevalmistamiseks tuleb sooritada sellised sammud

  • kummalgi arvutil on plokkseadmed, mis moodustavad DRBD seadme, nt /dev/drbd0 DRBD ressursinimega r0
  • DRBD on seadistatud Primary/Primary režiimi
  • ühes arvutis on sellele seadmele ettevalmistatud domU

Nö tavalise domU seadistusfailist erineb kõneksolevale asjakorraldusele vastav seadistusfail selle võrra, et plokkseadme kirjeldamiselt kasutatakse nt phy asemel drbd seadet, selliselt

name    = 'drbd.loomaaed.tartu.ee'
kernel  = '/boot/vmlinuz-2.6.26-2-xen-amd64'
ramdisk = '/boot/initrd.img-2.6.26-2-xen-amd64'
root    = '/dev/xvda1 ro'
memory  = '1024'
disk    = [ 'drbd:r0,xvda1,w']
vif  = [ 'mac=70:01:68:00:20:13' ]
vcpus="2"
extra='xencons=tty'

Süsteemi kasutamiseks tuleb tavapäraselt öelda seal arvutis kus domU parasjagu töötab

 xm migrate --live drbd.loomaaed.tartu.ee teine-dom0

Oluline on tähele panna, et Xen hoolitseb ise DRBD ressursi primaarseks ja sekundaarseks lülituste eest paketis drbd8-utils sisalduva skripti /etc/xen/scripts/block-drbd abil. domU käivitamisel võib olla DRBD Secondary/Secondary olekus. Süsteemi kasutamisel töötab DRBD siiski Secondary/Primary olekus, ainult live migrationi ajal toimub lülitus Primary/Primary'sse.

Kuigi sellisele lahendusele kulub suhteliselt väha riistvara, siis ette võiks heita, et salvestusressursi kiht ei ole nö infrastruktuurselt eraldatud. St ei ole eraldi kettakasti millest on salvestusressurss ühendatud külge muidu diskless arvutitele.

OCFS2

DRBD ja OCFS2 koos kasutamise tulemuseks on kahes eksemplaris esinev failisüsteem, eksemplarid esinevad erinevatel arvutite lokaalsetel plokkseadmetel ning on mõlemast arvutist samaaegselt kasutatavad

TODO PILT

Süsteemi seadistamine toimub sellises järjekorras

  • Seadistatakse ja initsialiseeritakse tavalisel viisil kummaski arvutis DRBD ressurss, primary-secondary režiimis
  • Lisatakse DRBD seadistusfaili /etc/drbd.conf read
startup {
  ...
  become-primary-on both;
}

..
net {
  ... 
  after-sb-0pri discard-zero-changes;
  after-sb-1pri discard-secondary;
  after-sb-2pri disconnect;
  allow-two-primaries;
}
  • Seadistatakse käima OCFS2 nö tavalisel moel, kusjuures kasutama /dev/drbd0 seadet.
  • Ühes arvutis moodustatakse OCFS2 failisüsteem, nt
# mkfs -t ocfs2 -N 2 -L ocfs2_drbd0 /dev/drbd0
mkfs.ocfs2 1.4.4
Cluster stack: classic o2cb
Label: ocfs2_drbd0
Features: sparse backup-super unwritten inline-data strict-journal-super
Block size: 4096 (12 bits)
Cluster size: 4096 (12 bits)
Volume size: 51784744960 (12642760 clusters) (12642760 blocks)
Cluster groups: 392 (tail covers 30664 clusters, rest cover 32256 clusters)
Extent allocator size: 29360128 (7 groups)
Journal size: 268435456
Node slots: 2
Creating bitmaps: done
Initializing superblock: done
Writing system files: done
Writing superblock: done
Writing backup superblock:  3 block(s)
Formatting Journals: done
Growing extent allocator: done
Formatting slot map: done
Writing lost+found: done
mkfs.ocfs2 successful
  • Ühendatakse OCFS2 failisüsteem mõlemas arvutis külge
# mount /dev/drbd0 /srv/ocfs2

Kasulikud lisamaterjalid

GFS2

TODO

Kasulikud lisamaterjalid

Split brain

Kui kord sünkroonis töötanud Primary/Secondary DRBD lahenduses kaob komponentide vahelt võrguühendus ning nt klustrihaldustarkvara automaatselt või administraator käsitsi on lülitanud mõlemad komponendid käima Primary režiimis ja mõlemas arvutis on seadmed monteeritud ja vastavad failisüsteemid kasutusel, siis ilmselt andmed lähevad sünkroonist välja ning võrguühenduse tekkimisel vajab DRBD täiendavat juhendamist, kuidas edasi käituda. Sellist nähtus nimetatakse split brain (ingl. k. lõhestatud aju) olukorraks.

Kui aga kord sünkroonis töötanud Primary/Secondary DRBD lahenduses kaob komponentide vahelt võrguühendus ning osaliste rollid jäävad samaks, st Primay jääb Primariks Secondary ei omanda Primary rolli, siis võrguühenduse taastumisel sünkroniseeritakse vahepeal toimunud muudatused ja DRBD süsteemi töö jätkub. Oluline on tähele panna, et iseenesest DRBD ei muuda ressursside rolle, reeglina on see klustrihalduse tarkvara ülesanne või tehakse seda käsitsi.

Split brainist väljumiseks on mitu võimalust, üks lihtsamaid on otsustada kumma komponendi andmetega süsteem jätkab, teisel toimunud muudatused hüljatakse. Selline järgnevus toimuks käsitsi selliselt, mitu järgnevat punkti tegelevad split brain olukorra tekitamisega ja seejärel tegeledakse selle lahendamisega

  • lähtepunkt, Primary/Secondary seisund, andmed on sünkroonis, esimeses arvutis, mis on primaarne on failisüsteem külgeühendatud; teises arvutis mis on sekundaarne ei ole failisüsteem külge ühendatud (ja ei saagi olla)
 drbd1# mount /dev/drbd0 /mnt
 drbd1# /etc/init.d/drbd status
 drbd driver loaded OK; device status:
 version: 8.0.14 (api:86/proto:86)
 GIT-hash: bb447522fc9a87d0069b7e14f0234911ebdab0f7 build by phil@fat-tyre, 2008-11-12 16:40:33
 m:res  cs         st                 ds                 p  mounted  fstype
 0:r0   Connected  Primary/Secondary  UpToDate/UpToDate  C  /mnt     ext3
  • teine arvuti kaotab võrguühenduse
 drbd2 # ifconfig eth0 down
 
 drbd1 # /etc/init.d/drbd status
 ..
 m:res  cs            st               ds                 p  mounted  fstype
 0:r0   WFConnection  Primary/Unknown  UpToDate/DUnknown  C  /mnt     ext3
  • teises arvutis muudetakse DRBD roll primaarseks ning failisüsteem ühendatakse külge, ning kasutatakse
 drbd2 # drbdadm primary r0
 drbd2 # mount /dev/drbd0 /mnt
 drbd2 # /etc/init.d/drbd status
 ..
 m:res  cs            st               ds                 p  mounted  fstype
 0:r0   WFConnection  Primary/Unknown  UpToDate/DUnknown  C  /mnt     ext3
  • võrguühendus taastub, osalised avastavad split brain olukorra ja lähevad StandAlone režiimi
 drbd2 # ifconfig eth0 up
 ...
 tuuma logi
 drbd0: Split-Brain detected, dropping connection!
 drbd2 # /etc/init.d/drbd status
 ...
 m:res  cs          st               ds                 p  mounted  fstype
 0:r0   StandAlone  Primary/Unknown  UpToDate/DUnknown  -  /mnt     ext3
  • järgneb split brain lahendamine käsitsi, kuna otsustakse hüljata teises arvutis vahepeal toimunud muudatused ja sünkroniseerida teisesse arvutisse sisu esimesest, öeldakse
 drbd2# umount /mnt
 drbd2# drbdadm secondary r0
 drbd2# drbdadm -- --discard-my-data connect r0
 drbd1# drbdadm connect r0
  • Progress paistab sellisena (tundub, et ei toimu sünkimine otsast peale, vaid ainult muudatused)
# /etc/init.d/drbd status
..
m:res      cs          ro                 ds                     p  mounted  fstype
...        sync'ed:    14.5%              (17636/20616)M
0:r0  SyncTarget  Secondary/Primary  Inconsistent/UpToDate  C
  • Tulemusena on taastunud esialgne olukord, kusjuures vahepeal teises arvutis toimunud muudatused on läinud kaotsi
 drbd1# /etc/init.d/drbd status
 m:res  cs         st                 ds                 p  mounted  fstype
 0:r0   Connected  Primary/Secondary  UpToDate/UpToDate  C  /mnt     ext3

Selliste /etc/drbd.conf seadistusfaili sektsiooni net parameetriga kontrollitakse, kuidas süsteem käitub peale osaliste vahelise ühenduse taastumist, tundub, et disconnect on kindlasti ohutu kasutada kuigi see eeldab seejärel käsitsi sekkumist.

 after-sb-0pri disconnect;
 after-sb-1pri disconnect;
 after-sb-2pri disconnect;
 rr-conflict disconnect;

Olemasoleva andmetega plokkseadme kasutamine

TODO

Klustrihaldustarkvara

Klustrihalduseks sobib kasutada nt Pacemaker tarkvara, mis sisaldab DRBD tuge

# crm ra list ocf linbit
drbd      

TODO

Kasulikud lisamaterjalid

DRBD Proxy

TODO

Stacked DRBD

TODO

iSCSI + mdadm peegli kasutamine

DRBD asemel iSCSI ja mdadm vahenditest moodustatud nö üle võrgu peegli ehitamine võib tunduda küllaltki ahvatleva alternatiivina DRBD kasutamisele

                                                      teenuse kliendid
         
 /dev/sdb                                                     |
 iqn.2009-06.ee.tla:storage.www-a                             | 
                                                              |
                 /dev/sdb                                     |
                 iqn.2009-06.ee.tla:storage.www-b             |
     ___                        ___                          _|_
    |   | iscsi-a              |   | iscsi-b                |   | teenuse server
    |___|                      |___|                        |___|
      |                          |                            |     /dev/md0, RAID1
      |                          |                            | --> iqn.2009-06.ee.tla:storage.www-a
      |                          |                            | --> iqn.2009-06.ee.tla:storage.www-b
    --|--------------------------|----------------------------|--
                     iSCSI andmevahetuse subnet

kus

  • iqn.2009-06.ee.tla:storage.www-a,b on iSCSI serverid serveerides oma lokaalset plokkseadet /dev/sdb
  • /dev/md0 on teenuse serveril töötav mdadm loogiline RAID1 seade, mis on moodustatud õle iSCSI külge ühendatud ressurssidest

Selline lahendus tõenäoliselt isegi töötab, aga seda pole soovitav eelistada DRBD'le järgmisetel põhjustel

  • RAID1 komponendi riknemisel, nt võrgukatkestus toimub kogu peegli uuesti ehitamine, DRBD kasutab nn activity log süsteemi ja sünkroniseeritakse ainult vahepeal muutunud plokid

Ühe-õlalise DRBD käivitamine

DRBD primary saab juurutada ka siis, kui mingil põhjusel ei ole parasjagu kasutada secondary jaoks teist arvutit. Selleks sobib teha kõik tavalised sammud, sh öelda

# drbdadm -- --overwrite-data-of-peer primary r0

Kui millalgi õnnestub secondary jaoks arvuti tekitada, saab selle reaalselt kasutusele võtta.

v. 8.4 puhul

# drbdadm create-md drbd_datapart_1
# drbdadm up drbd_datapart_1
# drbdadm primary --force drbd_datapart_1

tulemusena on

# cat /proc/drbd
0: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r----s
   ns:0 nr:0 dw:0 dr:664 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:1424578056

DRBD kompileerimine

Tundub, et Proxmox keskkonnas DRBD kasutamiseks tuleb user-space programmid kompileerida

  • 2012 aasta kevadel on Proxmox v. 2 tuumas DRBD 8.3.10, kuid userspace'is on drbd8-utils pakett 8.3.7
  • 2012 sügisel on Proxmox v. 2 tuumas 8.3.13
  • 2015 aasta kevadel on Proxmox v. 3.4 v. 3.10 tuumas DRBD 8.4.3, kuid userspace'is on drbd8-utils pakette 8.3.x

Uuema versiooni utils tekitamiseks sobib kasutada juhiseid aadressidelt

Kui DRBD käivitamisel või utiliitide kasutamisel öeldakse nt nii, siis on aeg kompileerida

# drbdadm secondary openvz
DRBD module version: 8.3.13
   userland version: 8.3.10
you should upgrade your drbd tools!

Kompileerimiseks tuleb esmalt paigaldada vajalikud riistad

# apt-get build-dep drbd8-utils
# apt-get install git-core git-buildpackage fakeroot debconf-utils docbook-xml docbook-xsl dpatch xsltproc autoconf flex

seejärel kopeerida lähtetekst

$ git clone http://git.drbd.org/drbd-8.3.git
$ cd drbd-8.3

liikuda sobivasse git harru, nt 8.3.13

$ git checkout drbd-8.3.13

ja kompileerida

$ dpkg-buildpackage -rfakeroot -b -uc

Lõpuks tekkinud paketid paigaldada nt nii nagu kirjeldatud punktis http://www.auul.pri.ee/wiki/Operatsioonis%C3%BCsteemi_Debian_GNU/Linux_kasutamine#Privaatse_failis.C3.BCsteemi_repositooriumi_kasutamine

Töötava DRBD seadistuste muutmine

DRBD ressursi lisamine

Juba töötavale DRBD lahendusele ressursi lisamiseks tuleb

  • teha vajalikud muudatused /etc/drbd.conf seadistufailides
  • initsialiseerida ressurss
# drbdadm create-md ressursinimi
  • öelda mõlemas osalises
# drbdadm -d adjust ressursinimi
# drbdadm adjust ressursinimi
  • öelda primaarses
# drbdadm -- --overwrite-data-of-peer primary ressursinimi

Märkused

  • Andmebaaside andmeklustri juures kasutamisel tuleb kasutajal hästi läbi mõelda, mis toimub DRBD süsteemi riknemisel ja kuidas mõjub DRBD kasutamine jõudlusele.
  • Tundub, et DRBD süsteem töötab ka juhtumil, kui üks komponent on 32 bit ja teine 64 bit operatsioonisüsteem.
  • DRBD ressursi andmete kooskõlalisuse kontrollimiseks sobib öelda ühel komponendil
# drbdadm verify r0

Tulemus paistab

# /etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.4.3 (api:1/proto:86-101)
srcversion: 19422058F8A2D4AC0C8EF09 
m:res              cs            ro                     ds                     p       mounted   fstype
verified:          46.1%         (11044/20476)Mfinish:  0:02:57                speed:  (59,264)  want:   62,360  K/sec
0:r0               VerifyS       Primary/Primary        UpToDate/UpToDate      C
2:drbd_datapart_2  WFConnection  Secondary/Unknown      UpToDate/Inconsistent  C

Sobib koht on crontab

42 0 * * 0    root    /sbin/drbdadm verify all
  • Kui primary komponendi DRBD backend plokkseade on Diskless režiimis, kasutatakse üle võrgu teise komponendi backend plokkseadet; see juhtub nt vasta kõvaketta riknemisel, aga saab ka käsitsi esile kutsuda detach/attach käsuga
# drbdadm detach r0
# # /etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.4.3 (api:1/proto:86-101)
srcversion: 19422058F8A2D4AC0C8EF09 
m:res              cs            ro                 ds                     p  mounted  fstype
0:r0               Connected     Primary/Primary    Diskless/UpToDate

Kui tavaliselt lugemised toimuvad kohalikult kettalt, siis Diskless juhtumil ka loetakse üle võrgu; Nii on mõnus hinnata süsteemi toimivust.

  • drbd-overview programm annab ülevaate DRBD olukorrast
  • data-integrity-alg abil saab replikeerimisel andmeid kontrollsummatada, toodangus mitte kasutada
  • tundub, et juhendites julgustatakse patareiga raid kontrollerite puhul lülitama väga DRBD andmete ja metaandmete flushimist
disk-flushes no;
md-flushes no;
  • Kui on vaja mingit spetsiifilist versiooni (nt Proxmox puhul), siis tingimata ei pea ise kompileerima, http://www.linbit.com/support/
  • v. 8.4 puhul võiks kasutada nt sellist seadistust dual-primary juhtumil

Peamine DRBD seadistusfail, mis ühendab kokku muud seadistusfailid

# cat /etc/drbd.conf
include "drbd.d/global_common.conf";
include "drbd.d/*.res";

Üldised seadistused asuvad koos ühes failis

# cat /etc/drbd.d/global_common.conf
global {
  usage-count no;
}

common {
  handlers {
    split-brain "/usr/lib/drbd/notify-split-brain.sh priit@imool.org";
  }

  startup {
    wfc-timeout 0;
    degr-wfc-timeout 60;
    become-primary-on both;
  }

  disk {
    resync-rate 60M;
  }

  net {
    protocol C;
    allow-two-primaries;
    after-sb-0pri discard-zero-changes;
    after-sb-1pri disconnect;
    after-sb-2pri disconnect;
    cram-hmac-alg "sha256";
    shared-secret "saladus123";
    verify-alg md5;
    csums-alg md5;
   }
}

DRBD ressursse seadistatakse nt selliselt (sarnaseid seadistusfaile on tavaliselt enam kui üks)

# cat /etc/drbd.d/r0.res 

resource r0 {
  on proxmox-node1 {
    device      /dev/drbd0;
    disk       /dev/pve/r0;
    address    10.1.222.1:7789;
    meta-disk  internal;
  }

  on proxmox-node2 {
    device /dev/drbd0;
    disk       /dev/pve/r0;
    address    10.1.222.2:7789;
    meta-disk  internal;
  }
}

DRBD v. 8.3 -> 8.4 uuendamine

Käesolev tekst tegeleb sisuliselt üldise drbd tarkvara uuendamisega v. 8.3 -> v. 8.4, kuid konkreetselt on aluseks võetud Proxmox v. 3 -> v. 5 uuendamine.

Tööpõhimõte

  • Uuendada sekundaardne õlg
  • Uuendada primaarne õlg

Lähtepunktis on kaks drbd primary/primary režiimis töötavad arvutit, milles asuvad vastavad drdb kontrolli all olevad plokkseadmed. Esimene arvuti jääb teenust pakkuma, teises uuendatakse tarkvara. Peale teise arvuti operatsioonisüsteemi (sh drbd) uuendamist on drbd lahtiühendatud või isegi split brain olekus.

Ettevalmistused

  • kohendada /etc/lvm/lvm.conf sisu

Uuendamine

  • TODO

Tulemusena paistab selline pilt

root@pm-imool-1-v32:~# /etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.3.13 (api:88/proto:86-96)
GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by root@sighted, 2012-10-09 12:47:51
m:res      cs         ro                 ds                 p  mounted  fstype
0:data_p4  Connected  Primary/Secondary  UpToDate/UpToDate  C
1:data_p5  Connected  Primary/Primary    UpToDate/UpToDate  C

ja uues arvutis

root@pm-imool-2-v32:~# drbd-overview 
 0:data_p4/0  Connected Secondary/Primary UpToDate/UpToDate 
 1:data_p5/0  Connected Primary/Primary   UpToDate/UpToDate lvm-pv: openvzvg 831.36g 816.00g 

kusjuures uues arvutis status näitab üldist olukorda

root@pm-imool-2-v32:~# /etc/init.d/drbd status
● drbd.service - LSB: Control DRBD resources.
   Loaded: loaded (/etc/init.d/drbd; generated; vendor preset: enabled)
   Active: active (exited) since Sun 2017-08-13 11:21:13 EEST; 41min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 2311 ExecStart=/etc/init.d/drbd start (code=exited, status=0/SUCCESS)
    Tasks: 0 (limit: 4915)
   CGroup: /system.slice/drbd.service

Aug 13 11:20:36 pm-imool-2-v32 drbd[2311]:    prepare disk: data_p4 data_p5
Aug 13 11:20:37 pm-imool-2-v32 drbd[2311]:     adjust disk: data_p4 data_p5
Aug 13 11:20:37 pm-imool-2-v32 drbd[2311]:      adjust net: data_p4 data_p5
Aug 13 11:20:37 pm-imool-2-v32 drbd[2311]: ]
Aug 13 11:20:37 pm-imool-2-v32 drbd[2311]: WARN: stdin/stdout is not a TTY; using /dev/consoleoutdated-wfc-timeout has to be shorter than degr-wfc-timeout
Aug 13 11:20:37 pm-imool-2-v32 drbd[2311]: outdated-wfc-timeout implicitly set to degr-wfc-timeout (30s)
Aug 13 11:20:37 pm-imool-2-v32 drbd[2311]: outdated-wfc-timeout has to be shorter than degr-wfc-timeout
Aug 13 11:20:37 pm-imool-2-v32 drbd[2311]: outdated-wfc-timeout implicitly set to degr-wfc-timeout (30s)
Aug 13 11:21:13 pm-imool-2-v32 drbd[2311]: .
Aug 13 11:21:13 pm-imool-2-v32 systemd[1]: Started LSB: Control DRBD resources..

Kasulikud lisamaterjalid

Debian v. 9 drbd v. 8.x.y kasutamine

  • valmistadada mõlemas arvutis /etc/drbd/drbd.conf fail ette
  • peatada drbd teenus ühes ja teises arvutis
arvuti-1# systemctl stop drbd
arvuti-2# systemctl stop drbd
  • lähtestada drbd plokkseade ühes ja teises arvutis
arvuti-1# drbdadm create-md data_450_a
arvuti-2# drbdadm create-md data_450_a
  • käivitada drbd teenust ühes ja teises arvutis
arvuti-1# systemctl start drbd
arvuti-2# systemctl start drbd
  • tulemusena on mõlemas arvutis
# drbd-overview 
0:data_450_a/0  Connected Secondary/Secondary Inconsistent/Inconsistent
  • lülitada andmed sünkrooni
TODO

2022 proxmox v. 7 keskkond

Kui virtuaalsete arvutite juures kasutatakse lvm, siis see tekitab probleem proxmox host bootimise järel drbd ressursi kasutamisel, /dev/vdb1 ja /dev/vdb2 on drdb alusseadmed

# cat /proc/drbd
version: 8.4.11 (api:1/proto:86-101)
srcversion: 78636C7E8D25CE9BA641329 
 0: cs:Connected ro:Secondary/Secondary ds:Diskless/Diskless 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:0
 1: cs:Connected ro:Secondary/Secondary ds:Diskless/Diskless 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:0

kus

  • Diskless - drbd seadistused on, võrgus komponendid üksteist näevad jne, aga plokkseadmeid ei ole

Põhjuseks on, et initramfs etapil võetakse /dev/vdb1 ja /dev/vdb2 kasutusele kui lvm ressursid ja kui operatsioonisüsteem ise käivitub siis drbd jaoks on seadmed hõivatud

# drbdadm up drbd_datapart_1
open(/dev/vdb1) failed: Device or resource busy
Operation canceled.
Command 'drbdmeta 0 v08 /dev/vdb1 internal apply-al' terminated with exit code 20

Mitte et see oleks tark toodangus proovida, aga isege wipefs ei saa ligi, et plokkseadmelt signatuure kustutada

# wipefs /dev/vdb2
DEVICE OFFSET      TYPE        UUID                                   LABEL
vdb2   0x27ffff03c drbd        e7722c90cfe267a9                       
vdb2   0x218       LVM2_member 5cn2vK-feRW-VMdW-0uVw-TUDz-gGfI-FLvHAP 

# wipefs -a /dev/vdb2
wipefs: error: /dev/vdb2: probing initialization failed: Device or resource busy
# wipefs -a /dev/vdb2
wipefs: error: /dev/vdb2: probing initialization failed: Device or resource busy

Lahenduseks on /etc/lvm/lvm.conf muudatus ja see peab olema ka initramfs tõmmises, nt

# cat /etc/lvm/lvm.conf
...

devices {
     # added by pve-manager to avoid scanning ZFS zvols
#     global_filter=["r|/dev/zd.*|"]
	global_filter = [ "a|/dev/vda3|" "a|/dev/sdi|" "a|/dev/sdj|" "a|/dev/drbd0|" "a|/dev/drbd1|" "a|/dev/mapper/mp_sasdata.*|" "r|.*|" ]
 }

ning öelda

# initramfs-update -u

Kontrolliks on mõnus initramfs sisse vaadata

# mkdkir /var/tmp/irfs
# cd /var/tmp/irfs
# unmkinitramfs /boot/initrd.img-5.15.53-1-pve .
# cat etc/lvm/lvm.conf

Tulemusena järgmisel arvutite käivitamisel drbd ressurss toimib.

Seda hüpoteesi, et probleem on initramfs juures saab kontrollida tehes /dev/vdb ressursid kättesaadavaks arvutitele peale rebooti, st käigult lisades plokkseadme /dev/vdb. Tõsi, seda on reaalselt mõledav teha opereerides kettakasti või katsetades virtuaalsete arvutitena töötavate proxmox node'idega.

Kasulikud lisamaterjalid