Мы используем keepalived в сочетании с виртуальным IP-адресом уже два года. В редких случаях, когда машина выходит из строя, это работает очень хорошо.
Но когда возникают проблемы с самим устройством, мы видели пару случаев, когда отказоустойчивость не происходила. Например, когда у нас возникла проблема, когда система постоянно меняла местами. Нагрузка была 25 вместо обычных 5, и не было возможности по ssh в машину. Пинг работал. Keepalived продолжал работать, и виртуальный IP-адрес не был занят другим подчиненным устройством.
Также у нас была ситуация, когда в настройке MySql HA кто-то по ошибке заблокировал всю базу данных, сделав резервную копию на главном устройстве, а не на подчиненном. Это тоже не было принято.
Проблема здесь в том, что я просто использую неправильные сценарии для проверки на самой машине, нормально ли работает мастер, или это типично для настройки виртуального IP?
Мне кажется странным, что вы не используете третью систему, чтобы определить, доступен ли мастер. Я конечно понимаю почему: keepalivd должен быть включен самим мастером на мастере.
Недавно я заметил, что для установок Redis HA люди используют Zookeeper (например, https://github.com/ryanlecompte/redis_failover). Это из-за ограничений, с которыми я столкнулся?
Проблема в том, что я просто использую неправильные сценарии, чтобы проверить на самой машине, нормально ли работает мастер,
Да.
Например, когда у нас возникла проблема, когда система постоянно меняла местами. Нагрузка была 25 вместо обычных 5, и не было возможности ssh в машину. Пинг работал. Keepalived продолжал работать, и виртуальный IP-адрес не был занят другим подчиненным устройством.
Вы пытались написать свой собственный скрипт для проверки средней нагрузки, примерно так:
#!/bin/bash
LOAD=$(/command/to/get/the/load/average)
if [ $LOAD -ge 25 ]; then
exit 1
else
exit 0
fi
затем используйте его как track_script
:
vrrp_script check_load {
script "/path/to/check_load.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
nopreempt
...
authentication {
auth_type PASS
auth_pass Neifeaw7
}
virtual_ipaddress {
192.168.6.8
}
track_script {
check_load
}
}
Но подождите, что произойдет, если виртуальный IP-адрес будет переключаться слишком часто?