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