- Вопрос или проблема
- A: Основной, B: Вторичный
- Ответ или решение
- Ответ на вопрос о ситуации с разделением мозга в кластере DRBD и Pacemaker
- Описание проблемы
- Вопрос 1: Верно ли, что при событии 3 возвращающийся узел может автоматически присоединиться к кластеру?
- Вопрос 2: Как это можно реализовать?
- Заключение
Вопрос или проблема
Я хотел бы представить вашему вниманию следующую ситуацию, которая в настоящее время происходит на нашем активном-пассивном кластере (DRBD, Pacemaker, Corosync, PostgreSQL).
ОС: Ubuntu server 14.04 x64
DRBD: 8.4
Pacemaker: 1.1.10
Corosync: 2.3.3
PostgreSQL: 9.3
Вот в чем проблема:
Когда основной узел выходит из строя, вторичный выбирается в качестве основного. Проблема возникает в момент повторного подключения предыдущего основного узла, который сразу попадает в ситуацию “разделенного разума” (split-brain), когда ему следует стать вторичным. Вот подробная последовательность событий и соответствующие логи:
A: Основной, B: Вторичный
1- A выходит из строя
2- B становится ОСНОВНЫМ
3- A снова запускается –> РАЗДЕЛЕННЫЙ РАЗУМ (Мы предположили, что в этом случае переключение должно происходить автоматически)
ЛОГИ из A:
Jan 28 16:15:11 node1 kernel: [ 538.025422] block drbd0: helper command: /sbin/drbdadm initial-split-brain minor-0
Jan 28 16:15:11 node1 kernel: [ 538.026185] block drbd0: helper command: /sbin/drbdadm initial-split-brain minor-0 exit code 0 (0x0)
Jan 28 16:15:11 node1 kernel: [ 538.026194] block drbd0: Split-Brain detected but unresolved, dropping connection!
Статус DRBD:
service drbd status
drbd driver loaded OK; device status:
version: 8.4.3 (api:1/proto:86-101)
srcversion: F97798065516C94BE0F27DC
m:res cs ro ds p mounted fstype
0:pg StandAlone Secondary/Unknown Consistent/DUnknown r-----
Насколько я вижу, кажется, что DRBD нарушил состояние этого узла.
Мои вопросы:
1- Правильно ли я предполагаю, что в событии 3 возвращающийся узел может быть автоматически подключен к кластеру?
2- Если это возможно, пожалуйста, скажите, как.
1- Правильно ли я предполагаю, что в событии 3 возвращающийся узел может быть автоматически подключен к кластеру?
Да, это возможно. DRBD не должен самостоятельно становиться основным, если в конфигурации ресурса этого не указано; проверьте, чтобы определение ‘startup { become-primary-on }’ не было установлено в конфигурациях ресурсов.
2- Если это возможно, пожалуйста, скажите, как.
Убедитесь, что следующее верно:
a. ‘drbd’ не настроен на автоматический запуск при загрузке (‘chkconfig drbd off’ в RHEL, ‘update-rc.d drbd disable’ в Debian).
b. DRBD не должен быть настроен на самостоятельное становление основным (как упоминалось выше).
В руководстве пользователя DRBD есть раздел о конфигурировании DRBD для использования с Pacemaker, который может помочь, если мой ответ выше не решит проблему: https://drbd.linbit.com/users-guide/ch-pacemaker.html
Ответ или решение
Ответ на вопрос о ситуации с разделением мозга в кластере DRBD и Pacemaker
Вы описали ситуацию, в которой ваша кластерная система на базе DRBD, Pacemaker и Corosync сталкивается с проблемой разделения мозга (split-brain) после перезагрузки первичного узла. Давайте рассмотрим вашу ситуацию более подробно.
Описание проблемы
При работе с активным-пассивным кластером, когда первичный узел (A) выходит из строя, вторичный узел (B) становится первичным. Если узел A затем снова запускается, он вызывает ситуацию разделения мозга, что может привести к повреждению данных и необходимости вмешательства администратора для разрешения конфликта.
Вопрос 1: Верно ли, что при событии 3 возвращающийся узел может автоматически присоединиться к кластеру?
Да, ваше предположение верно. В идеале, после восстановления первичного узла, он должен автоматически присоединиться к кластеру в качестве вторичного, а не вызывать конфликт. Однако для этого требуется правильная конфигурация DRBD и Pacemaker, чтобы избежать автоматической установки узла A в статус первичного после его восстановления.
Вопрос 2: Как это можно реализовать?
Чтобы обеспечить автоматическое присоединение узла A к кластеру в качестве вторичного, выполните следующие шаги:
-
Проверьте конфигурацию DRBD:
- Убедитесь, что в конфигурации ресурса DRBD отсутствует директива
startup { become-primary-on }
, которая разрешает автоматическую активацию узла в статусе первичного. Это может привести к возникновению разделения мозга.
- Убедитесь, что в конфигурации ресурса DRBD отсутствует директива
-
Настройка и проверка служб:
- Убедитесь, что служба DRBD не настроена на автоматический запуск при загрузке системы. Это можно сделать с помощью следующих команд:
- Для RHEL:
chkconfig drbd off
- Для Debian:
update-rc.d drbd disable
- Для RHEL:
- Убедитесь, что служба DRBD не настроена на автоматический запуск при загрузке системы. Это можно сделать с помощью следующих команд:
-
Использование Pacemaker для управления DRBD:
- Убедитесь, что Pacemaker полностью управляет состояниями узлов и ресурсами. Pacemaker должен обрабатывать переход между первичным и вторичным состояниями узлов по возможности автоматически.
- Проверьте настройки работы Pacemaker с DRBD, чтобы гарантировать возрастаение устойчивости к разделению мозга. В документации DRBD есть раздел, посвященный интеграции с Pacemaker, который может оказать значительное влияние на ваше решение. Ссылка на него: Документация DRBD о Pacemaker
-
Тестирование конфигурации:
- После внесения изменений протестируйте сценарий, когда узел A выходит из строя и восстанавливается. Убедитесь, что он корректно присоединяется как вторичный узел.
-
Мониторинг состояния:
- Обеспечьте постоянный мониторинг состояния вашего кластера, чтобы оперативно реагировать на возникающие события и избегать ситуации разделения мозга.
Заключение
Правильная настройка конфигураций DRBD и Pacemaker при работе в рамках активного-пассивного кластера имеет критическое значение для надежности и устойчивости вашей системы. Следуя предложенным шагам, вы сможете избежать проблем с автоматическим включением узла в статус первичного и, как следствие, сохранить целостность данных в вашем кластерном окружении.