私は実行していますdrbd83
とocfs2
centos 5
と一緒にpackemaker
を使用する予定です。しばらくして、drbd
スプリットブレインの問題に直面しています。
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
Drbdをセカンダリに切り替えることができません。
drbdadm secondary r0
1: State change failed: (-12) Device is held open by someone
Command 'drbdsetup 1 secondary' terminated with exit code 11
私のdrbd
リソース構成:
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;
}
}
Ocfs2ステータスのステータス:
service ocfs2 status
Configured OCFS2 mountpoints: /data
lsof
は、drbdに関連するプロセスが1つあることを示しています。
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
そしてそれは死んだシンボリックリンクです:
# 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]
このプロセスは角括弧で囲まれていることに注意してください。
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.
したがって、最後の質問は、この場合再起動せずに手動でDRBDを回復するにはどうすればよいですか?
@ andreask:への返信
私のパーティションテーブル:
# 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
デバイス名:
# dmsetup ls --tree -o inverted
(202:2)
├─VolGroup00-LogVol01 (253:1)
└─VolGroup00-LogVol00 (253:0)
ブロックデバイス(253:0
)、それは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
@ 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 5月17日金曜日16:08:16 ICT 2013
こちらが someideas from Lars Ellenberg です。
ファイルシステムがまだマウントされている場合...まあ。アンマウントします。怠惰ではありませんが、本当に。
きっと、OCFS2はすでにマウント解除されています。
NFSが関係していた場合は、
killall -9 nfsd killall -9 lockd echo 0 > /proc/fs/nfsd/threads
いいえ、NFSは関与していませんでした。
lvm/dmsetup/kpartx/multipath/udevが関係している場合は、
dmsetup ls --tree -o inverted
drbdからの依存関係があるかどうかを確認します。
上記の出力からわかるように、LVMは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
loop/cryptoloop/etcが関係している場合は、それらの1つがまだそれらにアクセスしているかどうかを確認してください。
一部の仮想化テクニクが使用されている場合は、存続期間中にそのdrbdにアクセスしていた可能性のあるすべてのコンテナー/ VMをシャットダウン/破棄します。
いいえ、ありません。
時々、それは単にレースをしているudevまたは同等物です。
multipath
ルールを無効にし、udevd
を停止しても、何も変わりません。
場合によっては、UNIXドメインソケットまたは同様のものを開いたままにしておくことがあります(lsof/fuserに表示する必要はありません)。
もしそうなら、どうすればこのUNIXソケットを見つけることができますか?
UPDATE水5月22日22:10:41 ICT 2013
magic SysRq key でダンプしたときのDRBDワーカープロセスのスタックトレースは次のとおりです。
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
このOCFS2ハートビート領域がDRBDのセカンダリへの切り替えを妨げているかどうかはわかりません。
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
このOCFS2ハートビート領域がDRBDのセカンダリへの切り替えを妨げているかどうかはわかりません。
多分。 this ガイドに従ってその地域を殺そうとしましたか?
# /etc/init.d/o2cb offline serving
Stopping O2CB cluster serving: Failed
Unable to stop cluster as heartbeat region still active
まず、OCFS2ボリュームとそのラベルおよびuuidをリストする必要があります。
# mounted.ocfs2 -d
Device FS Stack UUID Label
/dev/sdb1 ocfs2 o2cb C3E41CA2BDE8477CA7FF2C796098633C data_ocfs2
/dev/drbd1 ocfs2 o2cb C3E41CA2BDE8477CA7FF2C796098633C data_ocfs2
次に、このデバイスへの参照があるかどうかを確認します。
# ocfs2_hb_ctl -I -d /dev/sdb1
C3E41CA2BDE8477CA7FF2C796098633C: 1 refs
それを殺そうとします:
# ocfs2_hb_ctl -K -d /dev/sdb1 ocfs2
次に、クラスタースタックを停止します。
# /etc/init.d/o2cb stop
Stopping O2CB cluster serving: OK
Unmounting ocfs2_dlmfs filesystem: OK
Unloading module "ocfs2_dlmfs": OK
Unmounting configfs filesystem: OK
Unloading module "configfs": OK
デバイスをセカンダリの役割に戻します。
# drbdadm secondary r0
# drbd-overview
1:r0 StandAlone Secondary/Unknown UpToDate/DUnknown r-----
これで、通常どおりスプリットブレインを回復できます。
# drbdadm -- --discard-my-data connect r0
# drbd-overview
1:r0 WFConnection Secondary/Unknown UpToDate/DUnknown C r-----
もう一方のノード(スプリットブレインサバイバー):
# drbdadm connect r0
# drbd-overview
1:r0 SyncSource Primary/Secondary UpToDate/Inconsistent C r---- /data ocfs2 100G 1.9G 99G 2%
[>....................] sync'ed: 3.2% (753892/775004)K delay_probe: 28
スプリットブレインの犠牲者について:
# /etc/init.d/o2cb start
Loading filesystem "configfs": OK
Mounting configfs filesystem at /sys/kernel/config: OK
Loading filesystem "ocfs2_dlmfs": OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK
Starting O2CB cluster serving: OK
# /etc/init.d/ocfs2 start
Starting Oracle Cluster File System (OCFS2) [ OK ]
このマウントポイントが稼働中であることを確認します。
# df -h /data/
Filesystem Size Used Avail Use% Mounted on
/dev/drbd1 100G 1.9G 99G 2% /data
DRBDがリソースを降格できない一般的な理由は、ボリュームグループのようなアクティブなデバイスマッパーデバイスです。確認できます。と:
dmsetup ls --tree -o inverted