Keepalivedを使用して、マスターサーバーを指す仮想IPをセットアップしています。フェイルオーバーが発生すると、仮想IPがバックアップを指すようになり、マスターを手動で有効化(修正)するまでIPはそこにとどまるはずです。
これが重要な理由は、サーバーでmysqlレプリケーションを実行しており、書き込みはマスターでのみ行う必要があるためです。フェイルオーバーすると、スレーブをマスターに昇格させます。
マスターサーバー:
global_defs {
! this is who emails will go to on alerts
notification_email {
[email protected]
! add a few more email addresses here if you would like
}
notification_email_from [email protected]
! 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 {
[email protected]
! add a few more email addresses here if you would like
}
notification_email_from [email protected]
! 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
}
私はあなたと同じ問題を抱えていました。両方のkeepalivedサーバーでnopreemptを設定することで解決しました。また、( http://article.gmane.orgによると非常に重要です) /gmane.linux.keepalived.devel/1537 )両方のサーバーを状態[〜#〜] backup [〜#〜]に設定します(異なる優先順位)。
よく働く! :-)
これは最も洗練された解決策ではないかもしれませんが、マスターのnotify_backup
およびnotify_fault
スクリプトでkeepalivedを停止できませんでしたか?そうすれば、再び制御を取得するために再起動する必要があります。
そんな感じ:
notify_backup "/etc/init.d/keepalived stop"
notify_fault "/etc/init.d/keepalived stop"