Oprava rozpadleho DRBD
Tady je popsan zpusob nejjednodussi a nejsetrnejsi k zakaznikum.
Zakladnim cilem je dosahnout stavu, kdy na jednom z poli muzeme dat dotycny drbd device do stavu "Secondary". Pak mame v podstate vyhrano, protoze potom ho muzeme zpet pripojit k peeru. To vsak znamena, ze to drbdcko musime nejak vyradit z provozu, cili nesmi byt nijak pouzito.
- Zjistujeme, ktere VGcko je na rozpadlem drbd. Prikazem #pvs na poli.
- Zjistujeme, jak jsou nody aktualne pripojene k polim. "multipath -l" nam zjisti, ktery scsi host je zrovna aktivni (stav "active") ve vypisu a script /root/find_arr <cislo hostu>, ke kteremu poli patri.
- Zjistujeme, co vlastne na tom drbdcku je, na kterych polich/nodech jsou ty LVcka otevreny (stav ao v lvs).
- Rozhodujeme o tom, na kterem poli budeme provadet presun. To by melo byt to, ktere ma aktualne pouzivano min dat z rozpadleho drbd (vcetne nodu, aktualne toto polich pouzivajicih). Pokud jedno z poli se na nodech nepouziva vubec (mel by byt ted aktualni stav na vsech clusterech), vyhrava.
- vgchange -cn <VG> --config 'global {locking_type=0}'
- pvscan, vgscan, lvscan na vsech nodech!
- lvchange -aln /dev/<VG>/* (Presne tak! ne vgchange -an <VG>) na celem clusteru. Ocekavame hlasky, ze nektere lvcka nemohou byt deaktivovane. to je v poradku.
-Predpokladame, ze mame "volne" pole, tzn., takove, ktere neni pouzivano na nodech-
- Rozsirujeme <VG> o volny svazek: #vgextend <VG> <nove_PV> — od tohoto okamziku nesmi byt provadene zadne prace s LVS na jinych clusterovych nodech
- Postupne (po jednom) presouvame otevrena lvcka na <nove_PV>: #pvmove -n <LV> /dev/<rozpadle_drbd> - pozor! parametrem je PVS, _ze_ktereho_ chceme dat data pryc, ne na ktere. Tato operace smi byt provadena pochopitelne je na stroji, kde jsou ta LVcka otevrena. Je to zrejme z bodu 7 :)
- Prikazem pvdisplay --maps <rozpadle_drbd> se ujistujeme, ze skutecne vsechna dotycna lvcka uz jsou pryc.
- service scst stop
- drbdadm secondary <rozpadle_drbd>. Uff. Jsme v pulce.
- drbdadm --discard-my-data connect <rozpadle_r>; na druhem poli drbdadm connect <rozpadle_r>. Mela by zacit resynchronizace.
- drbdadm --primary <rozpadle_r>
- Po dokonceni resynchronizace odsouvame data zpet na drbd: #pvmove <nove_PV> - tady nemusime uvadet jednotliva LV, odsune to vsechna data z <nove_PV>
- Odpojujeme servisni svazek od <VG>: vgreduce <VG> <nove_PV>
- service scst start a cekame asi 20s, az se pripoji nody
- na celem clusteru: vgscan; lvscan; vgchange -aly <VG>
- vgchange -cy <VG>
Pri operacich s LV muze se obcas ukazat chyba o neconsistentnim stavu, ignorujeme, my vime, ze stav <VG> je inconsistentni.
Muze se stat, ze v bode 4 zjistime, ze nejaky nod pouziva data z rozpadleho drbd z pole, na kterem provadime presuny (cili, stav, kdy treba node21 je pripojeny k array01 a node22 je pripojen k array02 a na obou nodech jsou spustene sluzby, pouzivajici <VG>). Nejjednodussi je presunout sluzby z tohoto nodu na pole, na kterym pracujeme (davame ale pozor, aby se to nahodou neodsunulo na pole jine nebo na jiny nod. Je lepsi presun udelat pomoci clusvcadm -d <sluzba> na nodu a clusvcadm -e na poli, ne clusvcadm -r).
POZN:
V casablance neni volny prostor na opravu, udelal jsem tedy na piklio clusteru (10.111.0.41) iscsi oddil 600GB, ktery je mozno pripojit po siti 10.111.0.0/24 do jakehokoliv pole.
spusteni targetu na pikliu:
/etc/init.d/scst start
napr:
/etc/init.d/iscsid start
iscsiadm -m discovery -t st -p 10.111.0.41
iscsiadm -m node -T iqn.2012-10.casa.helper:tgt -p 10.111.0.41 -l
tim se pripoji dany disk do systemu, najdeme jeho nazev a povolime ho v /etc/lvm/lvm.conf ve filtru, aby se s nim dalo pracovat. Toto nezapomene vratit po operaci zpet.
nakonec se po skonceni disk odloguje:
iscsiadm -m node -T iqn.2012-10.casa.helper:tgt -p 10.111.0.41 -u
POZN k POZN:
V casablance je volny prostor na polich array03/array04, ktery lze kdykoliv pripojit k polim array01/array02 (/root/start_storage_consumer nebo rucne). Pro tento prostor (ktery bude v budoucnu pripojeny natrvalo) jiz jsou nastavene filtry v lvm.conf apod.