Привет всем!
Имею проблему со связкой Pacemaker и DRBD. А именно:
1. Ось - CentOS 6.4, со всеми последними патчами.
2. Pacemaker c официального кластерлабского репозитория: pacemaker-1.1.9-1512.el6.x86_64
3. DRBD - тоже наисвежайшее: version: 8.4.3
4. Конфигурируем pacemaker как учат умные книжки:
#pcs resource create drbd ocf:linbit:drbd drbd_resource=drbd op monitor interval=60s
#pcs resource master ms_drbd drbd \
master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" \
notify=true
#pcs constraint location ms_drbd prefers tom=50
#pcs constraint location ms_drbd prefers jerry=INFINITY
#pcs constraint location ms_drbd prefers pluto=-INFINITY
#pcs resource create LVM ocf:heartbeat:LVM volgrpname="vg_drbd" op monitor interval="10s"
#pcs constraint colocation add LVM ms_drbd INFINITY with-rsc-role=Master
#pcs constraint order promote ms_drbd then start LVM
Там все тривиально - на кластере из 3х нод поднимаем drbd (на двух нодах, на третьей - запрет) и зависисый от мастера ресурс LVM, но котором потом всё и будет стоять.
drbd настроено тоже без каких либо изысков:
resource drbd {
protocol C;
# incon-degr-cmd "echo '!DRBD! pri on incon-degr' | wall ; sleep 60 ; halt -f";
startup {
degr-wfc-timeout 120; # 2 minutes.
wfc-timeout 60;
# become-primary-on both;
}
handlers {
split-brain "/usr/lib/drbd/notify-split-brain.sh root";
}
disk {
on-io-error detach;
no-disk-flushes;
no-md-flushes;
}
net {
max-buffers 8000;
max-epoch-size 8000;
sndbuf-size 8M;
data-integrity-alg crc32c;
allow-two-primaries;
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
}
syncer {
rate 110M;
al-extents 3389;
verify-alg crc32c;
}
on tom {
device /dev/drbd0;
disk /dev/mapper/vg_tom-LV_DRBD;
address 192.168.41.102:7788;
meta-disk internal;
}
on jerry {
device /dev/drbd0;
disk /dev/mapper/vg_jerry-LV_DRBD;
address 192.168.41.101:7788;
meta-disk internal;
}
}
Проблема: В такой примитивной конфигурации pacemaker, вместо того, чтобы спокойно поднять на tom'е master-drbd, на jerry - slave, бьется в истерике. То поднимет оба slave, то остановит drbd на одной или на обоих нодах, но никак не может (при наличии двух нод, предназначенных для drbd запустить этот ресурс. Запуск возможен только если остановить jerry (slave по дефолту), тогда мастер запускается на tom'е. Потом включаем jerry. Он становится slave. Если же после этого остановить tom'а, то мастер, как и положено переедет на jerry. Вроде нормально. Но вот обратный переезд... Начинаются опять бескончные конвульсии.
Причем, что мерзко, иногда pacemaker нормально начинает рулить drbd-ресуросом. Нормально его стартует и перекидывает между tom'ом и jerry.
Есть какая-либо рекомендация на эту тему?
===============================================================
Дополнение: когда pacemaker бьется в истерике на предмет, а на каком же хосту запустить drbd в регистрационный журнал /var/log/messages валятся сообщения вида
May 26 21:45:24 tom cib[18635]: notice: cib_process_diff: Diff 0.66.12 -> 0.66.13 from jerry not applied to 0.66.12: Failed application of an update diff
tom cib[18635]: notice: cib_server_process_diff: Not applying diff 0.66.13 -> 0.66.14 (sync in progress)
tom cib[18635]: notice: cib_server_process_diff: Not applying diff 0.66.14 -> 0.66.15 (sync in progress)
tom cib[18635]: notice: cib_server_process_diff: Not applying diff 0.66.15 -> 0.66.16 (sync in progress)
Это в части синхронизации CIB.
А по drbd валятся сообщения вида
tom drbd(drbd_drbd)[8102]: ERROR: drbd: Called drbdadm -c /etc/drbd.conf secondary drbd
tom drbd(drbd_drbd)[8102]: ERROR: drbd: Exit code 11
tom drbd(drbd_drbd)[8102]: ERROR: drbd: Command output:
tom kernel: block drbd0: State change failed: Device is held open by someone
tom kernel: block drbd0: state = { cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate r----- }
tom kernel: block drbd0: wanted = { cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate r----- }
tom drbd(drbd_drbd)[8102]: ERROR: drbd: Called drbdadm -c /etc/drbd.conf secondary drbd
tom drbd(drbd_drbd)[8102]: ERROR: drbd: Exit code 11
tom drbd(drbd_drbd)[8102]: ERROR: drbd: Command output:
tom lrmd[3610]: warning: child_timeout_callback: drbd_drbd_demote_0 process (PID 8102) timed out
tom lrmd[3610]: warning: operation_finished: drbd_drbd_demote_0:8102 - timed out after 240000ms
tom lrmd[3610]: notice: operation_finished: drbd_drbd_demote_0:8102 [ 0: State change failed: (-12) Device is held o
pen by someone ]
tom lrmd[3610]: notice: operation_finished: drbd_drbd_demote_0:8102 [ Command 'drbdsetup secondary 0' terminated wit
h exit code 11 ]
еom lrmd[3610]: notice: operation_finished: drbd_drbd_demote_0:8102 [ 0: State change failed: (-12) Device is held o
pen by someone ]
То есть на хосту tom drbd стоит в режиме Primary/Secondary, и никак их этого режима выйти не может. Говорит, что Primary-том занят. А занят он только ресурсом LVM, который в это время в stopped'е отдыхает, ждет, пока drbd тома переключит. То есть получается, что pacemaker ресурс остановил, как он думает, а drbd об этом счастье совершенно не догадывается.
И что делать?
