LINUX.ORG.RU
ФорумAdmin

HA кластер на Linux

 ,


0

2

Доброго времени суток, встала необходимость поднять HA кластер для веб сервера на апаче. Была выбрана связка DRBD + Heartbeat, все было поднято на виртуалках под управлением Debian 7. Но когда начал тестировать эту самую «отказоустойчивость» столкнулся с одной неприятной ситуацией.

Пока тестировал все так приводилось в гайдах (отключение сервисов праймори ноды, штатное выключение виртуалки праймори ноды), все было отлично, сервис за секунды поднимался на второй ноде, она переводилась из секондари в праймори.

Как только пошли более жесткие методы эмулирующие внезапный выход из строя первой ноды – отключение питания праймори ноды. DRBD на второй ноде отказывался переключаться в праймори, соответственно Heartbeat в такой ситуации не поднимал сервисы.

Из этого вопрос это нормальное поведение DRBD, или я что-то не так настроил? Если необходимо приложу конфиги обеих нод.



Последнее исправление: nostromoSSA (всего исправлений: 1)

Если необходимо приложу конфиги обеих нод.

Лучше приложи логи DRBD + Heartbeat слейва в момент выключения мастер ноды.

iron ★★★★★
()
Ответ на: комментарий от iron

Вот что выводится на второй ноде после нештатного отключения первой

root@node2:/home/node2# cat /proc/drbd
version: 8.3.11 (api:88/proto:86-96)
srcversion: CD5F901843FC48539A34561
 0: cs:WFConnection ro:Secondary/Unknown ds:UpToDate/DUnknown C r-----
    ns:0 nr:4 dw:4 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
/var/log/ha-debug.log
0: State change failed: (-7) Refusing to be Primary while peer is not outdated
Command '/sbin/drbdsetup 0 primary' terminated with exit code 11
0: State change failed: (-7) Refusing to be Primary while peer is not outdated
Command '/sbin/drbdsetup 0 primary' terminated with exit code 11
0: State change failed: (-7) Refusing to be Primary while peer is not outdated
Command '/sbin/drbdsetup 0 primary' terminated with exit code 11
0: State change failed: (-7) Refusing to be Primary while peer is not outdated
Command '/sbin/drbdsetup 0 primary' terminated with exit code 11
0: State change failed: (-7) Refusing to be Primary while peer is not outdated
Command '/sbin/drbdsetup 0 primary' terminated with exit code 11
0: State change failed: (-7) Refusing to be Primary while peer is not outdated
Command '/sbin/drbdsetup 0 primary' terminated with exit code 11
Stopping web server: apache2.
INFO:  Success
INFO:  Success
blockdev: cannot open /dev/drbd0: Wrong medium type
INFO:  Success
Штатное отключение первой ноды
root@node2:/home/node2# cat /proc/drbd
version: 8.3.11 (api:88/proto:86-96)
srcversion: CD5F901843FC48539A34561
 0: cs:WFConnection ro:Primary/Unknown ds:UpToDate/Outdated C r-----
    ns:4 nr:8204 dw:8208 dr:681 al:1 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
/var/log/ha-debug.log
modprobe: FATAL: Module scsi_hostadapter not found.
INFO:  Success
INFO:  Success
INFO:  Success
Starting web server: apache2.

nostromoSSA
() автор топика
Ответ на: комментарий от nostromoSSA

Получается перевести вторую ноду в праймори командой

drbdadm -- --overwrite-data-of-peer primary www
Но как сделать чтобы все поднималось автоматически?

nostromoSSA
() автор топика
Ответ на: комментарий от nostromoSSA

Но как сделать чтобы все поднималось автоматически?

В ha-debug.log не видно чтоб Heartbeat определяет падение мастера. И соответственно не переводит drbd со слейва в мастер. Самый надежный способ - коннект нод через COM порт. Можно и по сети, но тогда задержка определения дохлого мастера становится лишком велика. Смотри настройки Heartbeat и включай дебаг.

iron ★★★★★
()
Ответ на: комментарий от iron

Heartbeat определяет падение мастера, и пытается перевести его из секондари в праймори, но у него это не получается о чем свидетельствует ошибка.

0: State change failed: (-7) Refusing to be Primary while peer is not outdated
Command '/sbin/drbdsetup 0 primary' terminated with exit code 11
Сразу после перевода второй ноды в праймори, командой
drbdadm -- --overwrite-data-of-peer primary www
Heartbeat замечает это и поднимает сервисы, если бы можно было заменить команду выполняемую Heartbeat '/sbin/drbdsetup 0 primary', на приведенную мной выше то думаю проблема была бы решена. Только не знаю какой конфиг крутить где выполнение этой самой команды прописано.

Еще раз повторюсь что такая картина наблюдается если сделать внезапное отключение праймори ноды, судя по всему возникают ошибки которые просто не дают выполниться команде '/sbin/drbdsetup 0 primary'. Если же на праймори ноде завершить работу операционной системы нормально командой halt, или остановить сервис Heartbeat, то все проходит нормально. Увы лог самого DRBD я найти не смог, буду благодарен если подскажите где он расположен.

Еще есть вариант покрутить в сторону DRBD Dual-primary mode.

nostromoSSA
() автор топика
Ответ на: комментарий от iron

Нашел скрипт через который Heartbeat управляет DRBD /etc/ha.d/resource.d/drbddisk (точнее их там целых два, но мне нужен был один). В скрипте в место

$DRBDADM primary $RES && break
прописал
$DRBDADM -- --overwrite-data-of-peer primary $RES && break
После чего уронил праймори ноду, через несколько секунд вторая нода подняла сервис.

nostromoSSA
() автор топика

drbd на двух нодах может тебе обеспечить проблемы. Вообще все такие системы на 2 нодах при могут быть проблематичны. Ведь кроме падения по питанию может порваться линк между нодами, что потенцицально приведет к интересному состоянию.

stave ★★★★★
()
Ответ на: комментарий от nostromoSSA

Это неправильно. У тебя слейв нода всегда должна быть UpToDate, тогда она корректно перейдет в праймари. Если она у тебя не аптудейт, то ищи в чем проблема.

blind_oracle ★★★★★
()
Ответ на: комментарий от blind_oracle

У меня слейв всегда UpToDate, это видно из поста выше.

Вернул старый конфиг, и стал рыть дальше. И думаю понял в чем проблема.

/var/log/messages

10:16:09 node2 kernel: [2734065.898758] block drbd0: peer( Primary -> Unknown ) conn( Connected -> NetworkFailure ) pdsk( UpToDate -> DUnknown )
Nov  4 10:16:09 node2 kernel: [2734065.899461] block drbd0: asender terminated
Nov  4 10:16:09 node2 kernel: [2734065.899467] block drbd0: Terminating drbd0_asender
Nov  4 10:16:09 node2 kernel: [2734065.899634] block drbd0: Connection closed
Nov  4 10:16:09 node2 kernel: [2734065.899640] block drbd0: conn( NetworkFailure -> Unconnected )
Nov  4 10:16:09 node2 kernel: [2734065.899645] block drbd0: receiver terminated
Nov  4 10:16:09 node2 kernel: [2734065.899648] block drbd0: Restarting drbd0_receiver
Nov  4 10:16:09 node2 kernel: [2734065.899651] block drbd0: receiver (re)started
Nov  4 10:16:09 node2 kernel: [2734065.899656] block drbd0: conn( Unconnected -> WFConnection )
Nov  4 10:16:24 node2 kernel: [2734080.965787] block drbd0: helper command: /sbin/drbdadm fence-peer minor-0
Nov  4 10:16:25 node2 crm-fence-peer.sh[3865]: invoked for www
Nov  4 10:16:25 node2 crm-fence-peer.sh[3865]: cibadmin: error while loading shared libraries: libcrmcommon.so.2: cannot open shared object file: No such file or directory
Nov  4 10:16:25 node2 kernel: [2734082.008764] block drbd0: helper command: /sbin/drbdadm fence-peer minor-0 exit code 1 (0x100)
Nov  4 10:16:26 node2 kernel: [2734083.020109] block drbd0: helper command: /sbin/drbdadm fence-peer minor-0
Nov  4 10:16:27 node2 crm-fence-peer.sh[3878]: invoked for www
Nov  4 10:16:27 node2 crm-fence-peer.sh[3878]: cibadmin: error while loading shared libraries: libcrmcommon.so.2: cannot open shared object file: No such file or directory
Nov  4 10:16:27 node2 kernel: [2734084.042575] block drbd0: helper command: /sbin/drbdadm fence-peer minor-0 exit code 1 (0x100)
Nov  4 10:16:28 node2 kernel: [2734085.046532] block drbd0: helper command: /sbin/drbdadm fence-peer minor-0
Nov  4 10:16:29 node2 crm-fence-peer.sh[3891]: invoked for www
Nov  4 10:16:29 node2 crm-fence-peer.sh[3891]: cibadmin: error while loading shared libraries: libcrmcommon.so.2: cannot open shared object file: No such file or directory
Nov  4 10:16:29 node2 kernel: [2734086.063171] block drbd0: helper command: /sbin/drbdadm fence-peer minor-0 exit code 1 (0x100)
Nov  4 10:16:30 node2 kernel: [2734087.067153] block drbd0: helper command: /sbin/drbdadm fence-peer minor-0
Nov  4 10:16:32 node2 crm-fence-peer.sh[3905]: invoked for www
Nov  4 10:16:32 node2 crm-fence-peer.sh[3905]: cibadmin: error while loading shared libraries: libcrmcommon.so.2: cannot open shared object file: No such file or directory
Nov  4 10:16:32 node2 kernel: [2734088.083454] block drbd0: helper command: /sbin/drbdadm fence-peer minor-0 exit code 1 (0x100)
Nov  4 10:16:33 node2 kernel: [2734089.087405] block drbd0: helper command: /sbin/drbdadm fence-peer minor-0
Nov  4 10:16:34 node2 crm-fence-peer.sh[3918]: invoked for www
Nov  4 10:16:34 node2 crm-fence-peer.sh[3918]: cibadmin: error while loading shared libraries: libcrmcommon.so.2: cannot open shared object file: No such file or directory
Nov  4 10:16:34 node2 kernel: [2734090.103573] block drbd0: helper command: /sbin/drbdadm fence-peer minor-0 exit code 1 (0x100)
Nov  4 10:16:35 node2 kernel: [2734091.107937] block drbd0: helper command: /sbin/drbdadm fence-peer minor-0
Nov  4 10:16:36 node2 crm-fence-peer.sh[3931]: invoked for www
Nov  4 10:16:36 node2 crm-fence-peer.sh[3931]: cibadmin: error while loading shared libraries: libcrmcommon.so.2: cannot open shared object file: No such file or directory
Nov  4 10:16:36 node2 kernel: [2734092.123821] block drbd0: helper command: /sbin/drbdadm fence-peer minor-0 exit code 1 (0x100)
Как видно DRBD ругается на отсутствующую библиотеку pacemaker, зависимости которого у меня ломают heartbeat. Остается наверно либо отказаться от heartbeat в пользу pacemaker, либо использовать костыль в виде $DRBDADM — --overwrite-data-of-peer primary $RES && break.

nostromoSSA
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.