Proxmox Split-Brain ausfall beheben

From Bitbull Wiki
Jump to navigation Jump to search

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.

1.4 links