Отказ виртуального IP-адреса при перегрузке машины
Уже два года мы используем keepalived в сочетании с виртуальным IP-адресом. В редких случаях, когда машина выходит из строя, это работает очень хорошо.
Но когда на самой коробке возникают проблемы, мы видели пару случаев, когда отказоустойчивость не происходила. Например, когда у нас возникла проблема, когда система постоянно менялась. Нагрузка была 25 вместо нормальных 5, и ssh не было в машине. Пинг работал. Keepalived продолжал работать, а другой виртуальный IP-адрес не был перехвачен.
Также у нас была ситуация, когда в настройке MySql HA кто-то по ошибке блокировал всю базу данных, делая резервную копию на главном сервере вместо ведомого. Это также не было подхвачено.
Проблема в том, что я просто использую неправильные сценарии для проверки на самой машине, работает ли мастер нормально, или это типично для настройки виртуального IP?
Мне странно, что вы не используете третью систему, чтобы определить, доступен ли мастер. Конечно, я понимаю, почему: keepalivd должен быть включен самим мастером.
Недавно я заметил, что для установок Redis HA люди используют Zookeeper (например, https://github.com/ryanlecompte/redis_failover). Это из-за ограничений, с которыми я столкнулся?
1 ответ
Проблема в том, что я просто использую неправильные сценарии, чтобы проверить на самой машине, работает ли мастер нормально,
Да.
Например, когда у нас возникла проблема, когда система постоянно менялась. Нагрузка была 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-адрес переключается слишком часто?