Узлы кластера DRBD не сконфигурированы (Одинока)

Вопрос или проблема

У меня есть кластер высокой доступности с двумя узлами, узел один является основным, а узел 2 – его зеркалом. У меня проблема с ресурсом mysql, так как мои узлы не синхронизированы.

обзор drbd

Главный узел:
0:home Подключен Основной/Вторичный Актуально/Актуально C r—–
1:storage Подключен Вторичный/Основной Актуально/Актуально C r—–
2:mysql Автономный Вторичный/Неизвестно Актуально/Устаревший r—–

Вторичный узел:
0:home Подключен Вторичный/Основной Актуально/Актуально C r—–
1:storage Подключен Основной/Вторичный Актуально/Актуально C r—–
2:mysql Автономный Основной/Неизвестно Актуально/Устаревший r—–

Просматривая файл сообщений, я нашел следующее:

Apr-19 18:20:36 clsstd2 kernel: block drbd2:self C1480E287A8CAFAB:C7B94724E2658B94:5CAE57DEB3EDC4EE:F5887A918B55FB1A bits:114390101 flags:0
Apr-19 18:20:36 clsstd2 kernel: block drbd2:peer 719D326BDE8272E2:0000000000000000:C7BA4724E2658B94:C7B94724E2658B95 bits:0 flags:1 
                                                         
Apr-19 18:20:36 clsstd2 kernel: block drbd2:uuid_compare()=-1000 by rule 100                           
Apr-19 18:20:37 clsstd2 kernel: block drbd2:Не связанные данные, прерывание!
Apr-19 18:20:37 clsstd2 kernel: block drbd2:conn (WFReportParams -> Отключение)
Apr-19 18:20:37 clsstd2 kernel: block drbd2:ошибка при получении ReportState, l: 4!
Apr-19 18:20:38 clsstd2 kernel: block drbd2:асендер завершен
Apr-19 18:20:38 clsstd2 kernel: block drbd2:Завершение потока асендера
Apr-19 18:20:38 clsstd2 kernel: block drbd2:Соединение закрыто
Apr-19 18:20:38 clsstd2 kernel: block drbd2:conn (Отключение -> Автономный)
Apr-19 18:20:39 clsstd2 kernel: block drbd2:приемник завершен
Apr-19 18:20:39 clsstd2 kernel: block drbd2:Завершение потока приемника
Apr-19 18:20:39 clsstd2 auditd[3960]: Дебетовый демон вращает журналы

Я не понимаю, в чем проблема и как я могу ее решить, так как проверив оба узла, я понял, что в директории var/lib/mysql у меня нет файла ibdata1 на узле 2, но он существует на узле 1.

Проблема в том, что вы столкнулись с “знаменитым” состоянием разделенного мозга DRBD, в результате чего оба узла DRBD перешли в состояние “Автономный”. Трудно сказать, есть ли у вас действительная или поврежденная база данных на вашем основном узле, но у вас сейчас есть два пути на выбор:

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

Вот что вы запускаете на втором узле:

#drbdadm secondary resource 
#drbdadm disconnect resource
#drbdadm -- --discard-my-data connect resource

Вот что вы запускаете на активном узле, который, как вы думаете, имеет самую свежую версию данных:

#drbdadm connect resource

Если это не поможет, вы можете уничтожить второй узел и имитировать автоматическое восстановление, выполнив эту команду:

#drbdadm invalidate resource
  1. Очистите данные обоих узлов с помощью последней команды из (1) и восстановите свою базу данных из резервных копий.

Надеюсь, это помогло!

П.С. Я действительно рекомендую избегать использования DRBD в производственной среде. То, что вы видите, довольно распространенная проблема, к сожалению.

Проблема здесь в Не связанные данные, прерывание!, которое вы видите в журналах. Вероятно, что узлы меняли роли достаточно раз, когда были отключены, и историческая генерация, указанная в метаданных, больше не совпадает. Смотрите Руководство пользователя DRBD здесь для получения дополнительной информации: https://linbit.com/drbd-user-guide/drbd-guide-9_0-en/#s-gi

На этом этапе вам нужно выбрать узел для перезаписи данных другого и выполнить новую полную синхронизацию. Для этого вы должны восстановить метаданные на узле, который будет SyncTarget. Вы можете сделать это с помощью drbdadm create-md <resource>

Решением было восстановление метаданных путем выполнения следующих команд на узле, где я хотел их вновь сгенерировать. Теперь все снова синхронизировано.

drbdadm down resource    
drbdadm wipe-md resource    
drbdadm create-md resource    
drbdadm up resource    
drbdadm disconnect resource    
drbdadm connect resource

Последняя команда выполняется сначала на узле, где восстанавливаются метаданные, а затем на другом узле.

Ответ или решение

Решение проблемы с узлами DRBD, находящимися в состоянии StandAlone

Введение

Ваша ситуация с кластером высокой доступности (HA) и DRBD (Distributed Replicated Block Device) знаменует собой распространенную проблему, называемую "разделённый мозг" (split brain). Эта проблема возникает, когда оба узла кластера теряют связь друг с другом и независимо изменяют свое состояние, что приводит к несоответствию данных.

Описание проблемы

Исходя из вашего описания, можно легко заметить, что один из ресурсов, связанный с MySQL, оказался в состоянии StandAlone на обоих узлах. Это состояние указывает на то, что узлы не могут синхронизировать свои данные, что, в свою очередь, вызывает проблему с потерей целостности базы данных.

  • Ваша конфигурация показывает, что на узле node 1 присутствует файл ibdata1, а на узле node 2 он отсутствует. Это сигнализирует о том, что база данных на узле 1 может быть более актуальной, тогда как на узле 2 может отсутствовать значительная часть данных.

Анализ логов

Логи показывают следующее сообщение: Unrelated data, aborting!. Это означает, что на узлах присутствуют данные, которые больше не синхронизированы, и система DRBD решила прервать соединение, чтобы предотвратить возможную потерю данных.

Решение проблемы

Для исправления проблемы вам необходимо выбрать, какой узел будет "директировать" процесс синхронизации, а какой будет его "целевым" узлом. Ниже приведены шаги, которые вам необходимо предпринять:

1. Регенерация метаданных на узле с более актуальными данными.

Следуйте этим шагам на узле, который, по вашему мнению, содержит более свежие данные (в данном случае, предположительно, node 1):

# drbdadm down ресурс
# drbdadm wipe-md ресурс
# drbdadm create-md ресурс
# drbdadm up ресурс

2. Подключение и синхронизация узлов.

Выполните команду connect на каждом узле. Сначала запустите её на узле, где вы создавали метаданные, а затем на втором узле:

# drbdadm disconnect ресурс     # выполните на обоих узлах
# drbdadm connect ресурс        # сначала на узле с активными метаданными

Альтернативные пути решения

Если предыдущий метод не сработал, у вас есть ещё несколько вариантов:

  • Полная перезагрузка данных: Можно полностью стереть данные на одном из узлов и восстановить базу данных из резервной копии. Этот вариант подходит, если данные на первичном узле не являются актуальными.

  • Использование опции --discard-my-data: Если вы уверены в актуальности данных на одном узле, вы можете выполнить последовательность команд на узле, который вы воспринимаете как жертву:

# drbdadm secondary ресурс
# drbdadm disconnect ресурс
# drbdadm -- --discard-my-data connect ресурс

Заключение

Проблема с состоянием StandAlone в DRBD может быть предупреждением об отключении сетевых подключений и разногласиях в данных. Важно помнить о регулярном резервировании для большинства критических систем. Убедитесь также в правильной конфигурации класса и мониторинга сети, чтобы такие ситуации возникали как можно реже.

Обратите внимание на документацию и рекомендации разработчиков, чтобы усовершенствовать вашу систему DRBD и избежать подобных инцидентов в будущем.

Оцените материал
Добавить комментарий

Капча загружается...