Потеря данных из-за сценария аварийного переключения 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 и случайное резервное копирование), но как это случилось?
Я размышляю:
- DRBD отключил диск от файловой системы, когда он использовался MySQL, так как чистое завершение работы MySQL не привело бы к повреждению данных
- DRBD контролируется сердцебиение, и остановка службы сердцебиения "выдернула пробку" на DRBD
- это может произойти снова в случае фактического аварийного переключения (из-за таймаута проверки связи)
У меня нет доступа к этой настройке в течение некоторого времени, и я хотел бы повторить тест.
Настройки конфигурации верны?
Повреждение было результатом моего ручного тестирования?
Есть ли лучший способ проверить отказоустойчивость, чем остановить службу 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.
Другой способ проверить это выполнить полную перезагрузку на одной машине.