Назад | Перейти на главную страницу

Потеря данных из-за отказоустойчивого сценария 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 Filesystem::/dev/drbd0::/drbd::ext3::defaults mysql

и /etc/ha.d/ha.cf

    logfile        /var/log/ha-log
    logfacility     local0
    keepalive 1
    deadtime 30
    warntime 10
    initdead 120
    udpport        694
    bcast  eth0, eth4  
    auto_failback off
    node    db1
    node    db2
    respawn hacluster /usr/lib64/heartbeat/ipfail
    apiauth ipfail gid=haclient uid=hacluster
    deadping 5

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

    service heartbeat stop
    service mysqld stop
    drbdadm down mysql
    service drbd stop

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

     0: cs:Connected st:Primary/Unknown ds:UpToDate/DUnknown C r---

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

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

Я предполагаю:

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

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

Правильны ли настройки конфигурации?

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

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

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

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, и я думаю, вы избежите повреждения данных.

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

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

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

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