Я использую keepalived для настройки виртуального IP-адреса, указывающего на главный сервер. Когда происходит аварийное переключение, он должен указывать виртуальный IP-адрес на резервную копию, и IP-адрес должен оставаться там, пока я вручную не включу (исправлю) мастер.
Причина, по которой это важно, заключается в том, что я запускаю репликацию mysql на серверах, и записи должны выполняться только на главном сервере. При переключении на отказ я повышаю подчиненное устройство до уровня главного.
Главный сервер:
global_defs {
! this is who emails will go to on alerts
notification_email {
xx@gmail.com
! add a few more email addresses here if you would like
}
notification_email_from root@xx.se
! I use the local machine to relay mail
smtp_server 127.0.0.1
smtp_connect_timeout 30
! each load balancer should have a different ID
! this will be used in SMTP alerts, so you should make
! each router easily identifiable
lvs_id APP1
}
vrrp_instance APP1 {
interface eth0
state EQUAL
virtual_router_id 61
priority 999
nopreempt
virtual_ipaddress {
217.x.x.129
}
smtp_alert
}
Сервер резервного копирования:
global_defs {
! this is who emails will go to on alerts
notification_email {
xx@gmail.com
! add a few more email addresses here if you would like
}
notification_email_from root@xx.se
! I use the local machine to relay mail
smtp_server 127.0.0.1
smtp_connect_timeout 30
! each load balancer should have a different ID
! this will be used in SMTP alerts, so you should make
! each router easily identifiable
lvs_id APP2
}
vrrp_instance APP2 {
interface eth0
state EQUAL
virtual_router_id 61
priority 100
virtual_ipaddress {
217.xx.xx.129
}
notify_master "/etc/keepalived/notify.sh del app2"
notify_backup "/etc/keepalived/notify.sh add app2"
notify_fault "/etc/keepalived/notify.sh add app2”
smtp_alert
}
У меня была такая же проблема, как и у вас. Решил, установив nopreempt на обоих поддерживающих серверах, а также (что очень важно в соответствии с http://article.gmane.org/gmane.linux.keepalived.devel/1537) установка обоих серверов в состояние РЕЗЕРВНОЕ КОПИРОВАНИЕ (с разными приоритетами).
Прекрасно работает! :-)
Возможно, это не самое элегантное решение, но не могли бы вы перестать поддерживать активность в notify_backup
и notify_fault
скрипты на мастере? Таким образом, вам придется перезапустить его, чтобы снова получить контроль.
Что-то такое:
notify_backup "/etc/init.d/keepalived stop"
notify_fault "/etc/init.d/keepalived stop"