Потеря данных из-за сценария аварийного переключения MySQL DRBD Heartbeat

Использование версии DRBD: 8.2.6 (api:88/proto:86-88)

Вот содержимое /etc/ha.d/haresources

 db1 192.168.100.200/24/eth0 drbddisk:: mysql Файловая система::/dev/drbd0::/drbd::ext3:: значения по умолчанию mysql

и /etc/ha.d/ha.cf

 файл журнала /var/log/ha-log
    logfacility     local0
    keepalive 1
    Deadtime 30
    время предупреждения 10
    initdead 120
    Udpport        694
    bcast  eth0, eth4  
    auto_failback off
    узел db1
    узел db2
    респакун hacluster /usr/lib64/heartbeat/ipfail
    apiauth ipfail gid=haclient uid=hacluster
    Смерть 5

При тестировании отработки отказа между машинами я выполнил следующие команды на db2:

 остановка пульса службы
    служба MySQL остановка
    drbdadm вниз mysql
    сервис drbd stop

/ proc / drbd на db1 сообщил

 0: cs: подключен st: первичный / неизвестный ds: UpToDate / DUnknown C r ---

Что случилось потом, после:

  • Перевод сервисов в онлайн на db2
  • Передача первичного файла в db2 с использованием скрипта hb_primary
  • Принимая db1 вниз, как указано выше
  • Перевод сервисов в онлайн на db1
  • Перенос первичного обратно в db1 с использованием скрипта hb_primary

был db1 перемонтирован диск DRBD, принял правильный IP и запустил MySQL. Было большое повреждение таблицы MySQL; все это можно было исправить (используя режим восстановления InnoDB 6, mysqlcheck и случайное резервное копирование), но как это случилось?

Я размышляю:

  1. DRBD отключил диск от файловой системы, когда он использовался MySQL, так как чистое завершение работы MySQL не привело бы к повреждению данных
  2. DRBD контролируется сердцебиение, и остановка службы сердцебиения "выдернула пробку" на DRBD
  3. это может произойти снова в случае фактического аварийного переключения (из-за таймаута проверки связи)

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

Настройки конфигурации верны?

Повреждение было результатом моего ручного тестирования?

Есть ли лучший способ проверить отказоустойчивость, чем остановить службу heartbeat и позволить ей запускать команды haresources?

3 ответа

Решение

Возможно, это не очень помогает, но в последнее время это широко обсуждается в списках рассылки Pacemaker и Linux-HA.

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

Из всего, что я прочитал, и моего ограниченного опыта с heartbeat, все, что вам нужно сделать, чтобы вручную переключиться с одного сервера на другой, это выпустить

service heartbeat stop

команда. Все, что находится в вашем файле haresources, будет контролироваться сердцебиением. В данном случае у меня есть кластер, который я настраиваю и который должен запускать следующие сервисы:

snmpd
mysql

Вот конфиг haresources

localhost00 \
drbddisk::home \
Filesystem::/dev/drbd0::/opt/local::ext3::defaults \
drbddisk::perf \
Filesystem::/dev/drbd1::/opt/local/perf::ext3::noatime,data=writeback \
IPaddr::1.1.1.1/24 \
mysqld \
snmpd 

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

[root@localhost00 ~]# service snmpd status
snmpd (pid 18558) is running...
[root@localhost00 ~]# service mysqld status
mysqld (pid 18509) is running...
[root@localhost00 ~]# service drbd status
drbd driver loaded OK; device status:
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-build, 2008-10-03 11:30:17
m:res      cs         st                 ds                 p  mounted           fstype
0:home  Connected  Primary/Secondary  UpToDate/UpToDate  C  /opt/local       ext3
1:perf  Connected  Primary/Secondary  UpToDate/UpToDate  C  /opt/local/perf  ext3
[root@localhost00 ~]# service heartbeat stop
Stopping High-Availability services:
                                                           [  OK  ]
[root@localhost00 ~]# service snmpd status
snmpd is stopped
[root@localhost00 ~]# service mysqld status
mysqld is stopped
[root@localhost00 ~]# service drbd status
drbd driver loaded OK; device status:
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-build, 2008-10-03 11:30:17
m:res      cs         st                   ds                 p  mounted  fstype
0:home  Connected  Secondary/Secondary  UpToDate/UpToDate  C
1:perf  Connected  Secondary/Secondary  UpToDate/UpToDate  C
[root@localhost00 ~]#
[root@zenoss00 ~]# service heartbeat start
Starting High-Availability services:
                                                           [  OK  ]
[root@zenoss00 ~]# service snmpd status
snmpd is stopped
[root@zenoss00 ~]# service mysqld status
mysqld is stopped
[root@zenoss00 ~]# service drbd status
drbd driver loaded OK; device status:
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-bu
m:res      cs         st                   ds                 p  mounted  fstype
0:zenhome  Connected  Secondary/Secondary  UpToDate/UpToDate  C
1:zenperf  Connected  Secondary/Secondary  UpToDate/UpToDate  C
[root@zenoss00 ~]# service snmpd status
snmpd (pid 23055) is running...
[root@zenoss00 ~]# service mysqld status
mysqld (pid 23006) is running...
[root@zenoss00 ~]# service drbd status
drbd driver loaded OK; device status:
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-build, 2008-10-03 11:30:17
m:res      cs         st                 ds                 p  mounted           fstype
0:zenhome  Connected  Primary/Secondary  UpToDate/UpToDate  C  /opt/zenoss       ext3
1:zenperf  Connected  Primary/Secondary  UpToDate/UpToDate  C  /opt/zenoss/perf  ext3
[root@zenoss00 ~]#

обратите внимание, что остановка сердцебиения остановила все службы, которые назначены сердцебиению (mysqld, snmpd); также обратите внимание, что drbd все еще работает, и сердцебиение НЕ останавливало его. DRBD должен работать все время, чтобы аварийное переключение работало.

Попробуйте снова перейти на другой ресурс, но не запускайте команды drbd, и я думаю, что вы избежите повреждения данных.

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

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

Другие вопросы по тегам