Proxmox Split-Brain ausfall beheben
1 split-brain im drbd beheben
1.1 allgemein
wenn der derbd sync in die brüche geht, ist die disk synchronisation zwichen den beiden cluster noden verloren.
da in den meissten fällen VMs auf beiden maschinen laufen, sind die disks der VMs auf eine node zu migrieren.
danach wird die "VM freie" node verworfen und drbd startet eine synchronisation.
unter /proc/drbd lässt sich der status des drbd clusters auslesen.
ein funktionierender cluster hat auf beiden noden folgenden status:
srcversion: EE47D8BF18AC166BE219757 0: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r---- ns:26364143 nr:346140 dw:161237151 dr:924795929 al:80921 bm:51640 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
ein defekter hat zB folgenden status (auf beiden noden):
srcversion: EE47D8BF18AC166BE219757 0: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown C r---- ns:26364143 nr:346140 dw:161237151 dr:924795929 al:80921 bm:51640 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
1.2 ablauf
- alle VM auf der zu löschenden node stoppen
qm list | grep running | awk '\{print $1}'\ | while read VM do echo qm stop done
- alle aktiven virtuellen disks der zu löschenden node migrieren
REMOTE="fatboy2-drbd" VG=drbdvg qm list 2>/dev/null | grep -v BOOTDISK | awk '{print $1}' | while read MACHINE do cat /etc/qemu-server/$MACHINE.conf | grep $MACHINE-disk- | cut -d: -f3 done | while read DISK do log info "uebertrage disk /dev/$VG/$DISK nach $REMOTE" dd if=/dev/$VG/$DISK | buffer -s 64k -S 10m | ssh root@$REMOTE "cat > /dev/$VG/$DISK" done
- die VM config files migrieren und die VMs auf der aleinigen node starten
VG=drbdvg DRBD_RES=mirror0 tar cvfz /etc/qemu-server.$(date +%Y%m%d%H%M).tar.gz /etc/qemu-server qm list 2>/dev/null | grep -v BOOTDISK | awk '{print $1}' | while read MACHINE do echo "info: kopiere /etc/qemu-server/$MACHINE.conf nach $REMOTE" scp /etc/qemu-server/$MACHINE.conf $REMOTE:/etc/qemu-server/$MACHINE.conf rm -f /etc/qemu-server/$MACHINE.conf echo "info: starte $MACHINE auf $REMOTE" ssh -n $REMOTE "qm start $MACHINE" done
- drbd cluster neu synchronisieren
- auf beiden noden nebenher ein "watch cat /proc/drbd" laufen lassen
# lokal: (alle daten werden gelöscht) # remote: (enthält die aktuellen daten)
# die verbindung des drbd clusters trennen local: drbdadm disconnect mirror0 remote: drbdadm disconnect mirror0
# lokalen node zum secondary herabstufen (fuer späteres überschreiben) local: qm list # ---> alle VMs muessen gestoppt sein local: vgchange -a n drbdvg # ---> die VG freigeben local: drbdadm secondary mirror0
# synchronisation anstossen (lokale daten werden nun gelöscht) local: drbdadm -- --discard-my-data connect mirror0 remote: drbdadm connect mirror0
# lokale node wieder zum primary hochstufen local: drbdadm primary mirror0
1.3 fazit
wenn mans einmal raus hat, ist das keine grosse sache.
ein voll backup kann nicht schaden, raubt aber enorm viel zeit.
es ist empfehlenswert alle wichtigen maschinen auf der gleichen node laufen zu lassen.
dann kann das split-brain ohne grosses wartungsfenster ueber nacht aufgelösst werden.