Keepalivedを使用して、マスター/スレーブ構成で2つのRedisインスタンスを管理しています。マスターボックス(優先度の高いボックス)でKeepalivedが終了すると、バックアップサーバーがマスターを引き継ぐという状況が発生しています。ただし、Keepalivedを優先度の高いボックスで再起動すると、バックアップサーバーはすぐにマスターステータスを優先度の高いボックスに渡します。これにより、Redisキャッシュが効果的にフラッシュされます。
Keepalived.confにnopreemptディレクティブを追加しようとしましたが、この動作はまだ発生しています。
以下は、バックアップ(優先度の低い)サーバーからのkeepalived.confです。
global_defs{
router_id redis_server_2
}
vrrp_script chk_redis {
script "killall -0 redis-server"
interval 5
}
vrrp_instance VI_1{
interface eth0
virtual_router_id 100
priority 200
advert_int 1
state BACKUP
nopreempt
track_script {
chk_redis
}
virtual_ipaddress {
10.19.105.229
}
notify_master "/usr/bin/Sudo /var/lib/redis/redis.sh -m"
notify_backup "/usr/bin/Sudo /var/lib/redis/redis.sh -s"
notify_fault "/usr/bin/Sudo /var/lib/redis/redis.sh -k"
さて、数分間考えて解決しました。
優先度の高いボックスのVRRP_instanceV1では、次のようになりました。
state MASTER
現在、優先度の高いボックスがマスターとして開始されていたため、nopreemptは尊重されていませんでした。優先度の低いボックスは、優先度の高いマスターを確認し、スレーブモードに切り替えました。その行をに変更することによって
state BACKUP
優先度の高いボックスはスレーブとして開始され、優先度の高いマスターを認識し、スレーブのままになります。完了しました。