Ich laufe drbd83
mit ocfs2
in centos 5
und plane, packemaker
mit ihnen zu verwenden. Nach einiger Zeit stehe ich vor einem drbd
Problem mit gespaltenem Gehirn.
version: 8.3.13 (api:88/proto:86-96)
GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by [email protected], 2012-05-07 11:56:36
1: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown r-----
ns:0 nr:0 dw:112281991 dr:797551 al:99 bm:6401 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:60
Ich kann mein drbd nicht auf sekundär umstellen.
drbdadm secondary r0
1: State change failed: (-12) Device is held open by someone
Command 'drbdsetup 1 secondary' terminated with exit code 11
Meine drbd
Ressourcenkonfiguration:
resource r0 {
syncer {
rate 1000M;
verify-alg sha1;
}
disk {
on-io-error detach;
}
handlers {
pri-lost-after-sb "/usr/lib/drbd/notify-split-brain.sh root";
}
net {
allow-two-primaries;
after-sb-0pri discard-younger-primary;
after-sb-1pri call-pri-lost-after-sb;
after-sb-2pri call-pri-lost-after-sb;
}
startup { become-primary-on both; }
on serving_4130{
device /dev/drbd1;
disk /dev/sdb1;
address 192.168.4.130:7789;
meta-disk internal;
}
on MT305-3182 {
device /dev/drbd1;
disk /dev/xvdb1;
address 192.168.3.182:7789;
meta-disk internal;
}
}
Status des ocfs2-Status:
service ocfs2 status
Configured OCFS2 mountpoints: /data
lsof
zeigen, dass es einen Prozess relativ zu drbd gibt.
lsof | grep drbd
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
drbd1_wor 7782 root cwd DIR 253,0 4096 2 /
drbd1_wor 7782 root rtd DIR 253,0 4096 2 /
drbd1_wor 7782 root txt unknown /proc/7782/exe
Und es ist ein toter Symlink:
# ls -l /proc/7782/exe
ls: cannot read symbolic link /proc/7782/exe: No such file or directory
lrwxrwxrwx 1 root root 0 May 4 09:56 /proc/7782/exe
# ps -ef | awk '$2 == "7782" { print $0 }'
root 7782 1 0 Apr22 ? 00:00:20 [drbd1_worker]
Beachten Sie, dass dieser Vorgang in eckige Klammern gesetzt ist:
man ps
::
args COMMAND command with all its arguments as a string. Modifications to the arguments may be shown. The
output in this column may contain spaces. A process marked <defunct> is partly dead, waiting to
be fully destroyed by its parent. Sometimes the process args will be unavailable; when this
happens, ps will instead print the executable name in brackets.
Die letzte Frage lautet also: Wie können wir DRBD in diesem Fall manuell wiederherstellen, ohne einen Neustart durchzuführen ?
Antwort an @andreask:
Meine Partitionstabelle:
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
35G 6.9G 27G 21% /
/dev/xvda1 99M 20M 74M 22% /boot
tmpfs 1.0G 0 1.0G 0% /dev/shm
/dev/drbd1 100G 902M 100G 1% /data
Die Gerätenamen:
# dmsetup ls --tree -o inverted
(202:2)
├─VolGroup00-LogVol01 (253:1)
└─VolGroup00-LogVol00 (253:0)
Achten Sie auf das Blockgerät ( 253:0
), es ist dasselbe wie aus der Ausgabe von lsof
:
# lvdisplay
--- Logical volume ---
LV Name /dev/VolGroup00/LogVol00
VG Name VolGroup00
LV UUID vCd152-amVZ-GaPo-H9Zs-TIS0-KI6j-ej8kYi
LV Write Access read/write
LV Status available
# open 1
LV Size 35.97 GB
Current LE 1151
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
Antwort an @Doug:
# vgdisplay
--- Volume group ---
VG Name VolGroup00
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 39.88 GB
PE Size 32.00 MB
Total PE 1276
Alloc PE / Size 1276 / 39.88 GB
Free PE / Size 0 / 0
VG UUID OTwzII-AP5H-nIbH-k2UA-H9nw-juBv-wcvmBq
UPDATE Fr 17. Mai 16:08:16 IKT 2013
Hier einige Ideen von Lars Ellenberg :
wenn das Dateisystem noch gemountet ist ... na ja. montieren Sie es. nicht faul, aber wirklich.
Ich bin sicher, OCFS2 wurde bereits nicht gemountet.
Wenn nfs beteiligt war, versuchen Sie es
killall -9 nfsd killall -9 lockd echo 0 > /proc/fs/nfsd/threads
Nein, NFS war nicht beteiligt.
Wenn lvm / dmsetup / kpartx / multipath / udev beteiligt ist, versuchen Sie es
dmsetup ls --tree -o inverted
und prüfen Sie, ob es Abhängigkeiten von drbd gibt.
Wie Sie meiner obigen Ausgabe entnehmen können, hat LVM nichts mit DRBD zu tun:
pvdisplay -m
--- Physical volume ---
PV Name /dev/xvda2
VG Name VolGroup00
PV Size 39.90 GB / not usable 20.79 MB
Allocatable yes (but full)
PE Size (KByte) 32768
Total PE 1276
Free PE 0
Allocated PE 1276
PV UUID 1t4hkB-p43c-ABex-stfQ-XaRt-9H4i-51gSTD
--- Physical Segments ---
Physical extent 0 to 1148:
Logical volume /dev/VolGroup00/LogVol00
Logical extents 0 to 1148
Physical extent 1149 to 1275:
Logical volume /dev/VolGroup00/LogVol01
Logical extents 0 to 126
fdisk -l
Disk /dev/xvda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/xvda1 * 1 13 104391 83 Linux
/dev/xvda2 14 5221 41833260 8e Linux LVM
Disk /dev/xvdb: 107.3 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/xvdb1 1 13054 104856223+ 83 Linux
Wenn loop / cryptoloop / etc beteiligt ist, prüfen Sie, ob einer von ihnen noch auf sie zugreift.
Wenn eine Virtualisierungstechnik verwendet wird, fahren Sie alle Container / VMs herunter / zerstören Sie sie, die während ihrer Lebensdauer möglicherweise auf diese DRBD zugegriffen haben.
Nein, das tut es nicht.
Manchmal ist es nur udev oder gleichwertig, ein Rennen zu fahren.
Ich habe die multipath
Regel deaktiviert und sogar gestoppt udevd
, und nichts ändert sich.
Manchmal ist es ein Unix-Domain-Socket oder ähnliches, der noch offen gehalten wird (wird nicht unbedingt in lsof / fuser angezeigt).
Wenn ja, wie können wir diesen Unix-Socket herausfinden?
UPDATE Mi 22. Mai 22:10:41 ICT 2013
Hier ist die Stapelverfolgung des DRBD-Arbeitsprozesses beim Dumping über den magischen SysRq-Schlüssel :
kernel: drbd1_worker S ffff81007ae21820 0 7782 1 7795 7038 (L-TLB)
kernel: ffff810055d89e00 0000000000000046 000573a8befba2d6 ffffffff8008e82f
kernel: 00078d18577c6114 0000000000000009 ffff81007ae21820 ffff81007fcae040
kernel: 00078d18577ca893 00000000000002b1 ffff81007ae21a08 000000017a590180
kernel: Call Trace:
kernel: [<ffffffff8008e82f>] enqueue_task+0x41/0x56
kernel: [<ffffffff80063002>] thread_return+0x62/0xfe
kernel: [<ffffffff80064905>] __down_interruptible+0xbf/0x112
kernel: [<ffffffff8008ee84>] default_wake_function+0x0/0xe
kernel: [<ffffffff80064713>] __down_failed_interruptible+0x35/0x3a
kernel: [<ffffffff885d461a>] :drbd:.text.lock.drbd_worker+0x2d/0x43
kernel: [<ffffffff885eca37>] :drbd:drbd_thread_setup+0x127/0x1e1
kernel: [<ffffffff800bab82>] audit_syscall_exit+0x329/0x344
kernel: [<ffffffff8005dfb1>] child_rip+0xa/0x11
kernel: [<ffffffff885ec910>] :drbd:drbd_thread_setup+0x0/0x1e1
kernel: [<ffffffff8005dfa7>] child_rip+0x0/0x11
Ich bin nicht sicher, ob diese OCFS2-Heartbeat-Region verhindert, dass DRBD auf sekundär umschaltet:
kernel: o2hb-C3E41CA2 S ffff810002536420 0 9251 31 3690 (L-TLB)
kernel: ffff810004af7d20 0000000000000046 ffff810004af7d30 ffffffff80063002
kernel: 1400000004000000 000000000000000a ffff81007ec307a0 ffffffff80319b60
kernel: 000935c260ad6764 0000000000000fcd ffff81007ec30988 0000000000027e86
kernel: Call Trace:
kernel: [<ffffffff80063002>] thread_return+0x62/0xfe
kernel: [<ffffffff8006389f>] schedule_timeout+0x8a/0xad
kernel: [<ffffffff8009a41d>] process_timeout+0x0/0x5
kernel: [<ffffffff8009a97c>] msleep_interruptible+0x21/0x42
kernel: [<ffffffff884b3b0b>] :ocfs2_nodemanager:o2hb_thread+0xd2c/0x10d6
kernel: [<ffffffff80063002>] thread_return+0x62/0xfe
kernel: [<ffffffff800a329f>] keventd_create_kthread+0x0/0xc4
kernel: [<ffffffff884b2ddf>] :ocfs2_nodemanager:o2hb_thread+0x0/0x10d6
kernel: [<ffffffff800a329f>] keventd_create_kthread+0x0/0xc4
kernel: [<ffffffff80032632>] kthread+0xfe/0x132
kernel: [<ffffffff8005dfb1>] child_rip+0xa/0x11
kernel: [<ffffffff800a329f>] keventd_create_kthread+0x0/0xc4
kernel: [<ffffffff80032534>] kthread+0x0/0x132
kernel: [<ffffffff8005dfa7>] child_rip+0x0/0x11
umount
ocfs
vor dem Versuch, es auf sekundär herabzustufen?Antworten:
Könnte sein. Haben Sie versucht, diese Region zu töten, folgen Sie dieser Anleitung?
OK, zuerst sollten Sie die OCFS2-Volumes zusammen mit ihren Bezeichnungen und Benutzeroberflächen auflisten:
Überprüfen Sie zweitens, ob Sie einen Verweis auf dieses Gerät haben:
Versuche es zu töten:
Stoppen Sie dann den Cluster-Stack:
und bringen Sie das Gerät wieder in die sekundäre Rolle:
Jetzt können Sie das gespaltene Gehirn wie gewohnt wiederherstellen:
Auf dem anderen Knoten (dem Überlebenden des geteilten Gehirns):
Auf dem gespaltenen Gehirn Opfer:
Stellen Sie sicher, dass dieser Einhängepunkt aktiv ist:
quelle
Ein häufiger Grund dafür, dass DRBD eine Ressource nicht herabstufen kann, ist ein aktives Geräte-Mapper-Gerät ... wie eine Datenträgergruppe. Sie können es zB überprüfen mit:
quelle
dmsetup ls --tree -o inverted
(8: 2) ├─VolGroup00-LogVol01 (253: 1) └─VolGroup00-LogVol00 (253: 0) Wie kann ich damit umgehen?dmsetup remove
.