Je suis en cours d' exécution drbd83
avec ocfs2
dans centos 5
et de la planification à utiliser packemaker
avec eux. Après un certain temps, je fais face à drbd
un problème de cerveau divisé.
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
Je ne peux pas passer mon drbd en secondaire.
drbdadm secondary r0
1: State change failed: (-12) Device is held open by someone
Command 'drbdsetup 1 secondary' terminated with exit code 11
Ma drbd
configuration de ressources:
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;
}
}
Statut du statut ocfs2:
service ocfs2 status
Configured OCFS2 mountpoints: /data
lsof
montrer que, il y a un processus relatif à drbd.
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
Et c'est un lien symbolique mort:
# 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]
Notez que ce processus est placé entre crochets:
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.
Donc, la dernière question est: comment pouvons-nous récupérer manuellement DRBD dans ce cas sans redémarrer ?
Répondre à @andreask:
Ma table de partition:
# 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
Les noms des appareils:
# dmsetup ls --tree -o inverted
(202:2)
├─VolGroup00-LogVol01 (253:1)
└─VolGroup00-LogVol00 (253:0)
Faites attention au périphérique bloc ( 253:0
), c'est la même chose qu'à la sortie de 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
Répondre à @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
MISE À JOUR ven 17 mai 16:08:16 ICT 2013
Voici quelques idées de Lars Ellenberg :
si le système de fichiers est toujours monté ... eh bien. démontez-le. pas paresseux, mais vraiment.
Je suis sûr, OCFS2 était déjà démonté.
Si nfs était impliqué, essayez
killall -9 nfsd killall -9 lockd echo 0 > /proc/fs/nfsd/threads
Non, NFS n'était pas impliqué.
si lvm / dmsetup / kpartx / multipath / udev est impliqué, essayez
dmsetup ls --tree -o inverted
et vérifiez s'il existe des dépendances de drbd.
Comme vous pouvez le voir sur ma sortie ci-dessus, LVM n'est pas lié à DRBD:
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
si loop / cryptoloop / etc est impliqué, vérifiez si l'un d'eux y accède toujours.
si une tecknique de virtualisation est utilisée, arrêtez / détruisez tous les conteneurs / machines virtuelles qui ont pu accéder à ce drbd pendant leur durée de vie.
Non, non.
Parfois, c'est juste udev ou équivalent qui fait une course.
J'ai désactivé la multipath
règle et même arrêter le udevd
, et rien ne change.
Parfois, il s'agit d'un socket de domaine Unix ou similaire toujours maintenu ouvert (ne s'affiche pas nécessairement dans lsof / fuser).
Si oui, comment pouvons-nous trouver cette socket Unix?
MISE À JOUR mer 22 mai 22:10:41 ICT 2013
Voici le stacktrace du processus de travail DRBD lors du vidage via la clé magique SysRq :
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
Je ne sais pas si cette région de battement de coeur OCFS2 empêche DRBD de passer au secondaire:
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
avant d'essayer de le rétrograder au secondaire?Réponses:
Peut être. Avez-vous essayé de tuer cette région, suivez ce guide?
OK, vous devez d'abord lister les volumes OCFS2 avec leurs étiquettes et uuids:
Deuxièmement, vérifiez si vous avez une référence à cet appareil:
Essayez de le tuer:
puis arrêtez la pile de cluster:
et ramener l'appareil à un rôle secondaire:
Maintenant, vous pouvez récupérer le cerveau divisé comme d'habitude:
Sur l'autre nœud (le survivant du cerveau divisé):
Sur la victime du cerveau fendu:
Vérifiez que ce point de montage est opérationnel:
la source
Une raison courante pour laquelle DRBD n'est pas en mesure de rétrograder une ressource est un périphérique de mappage de périphérique actif ... comme un groupe de volumes. Vous pouvez le vérifier par exemple avec:
la source
dmsetup ls --tree -o inverted
(8: 2) ├─VolGroup00-LogVol01 (253: 1) └─VolGroup00-LogVol00 (253: 0) Alors, comment puis-je gérer cela?dmsetup remove
.