web-dev-qa-db-ja.com

プリエンプトを尊重しないKeepalived

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"
2
Chris

さて、数分間考えて解決しました。

優先度の高いボックスのVRRP_instanceV1では、次のようになりました。

    state MASTER

現在、優先度の高いボックスがマスターとして開始されていたため、nopreemptは尊重されていませんでした。優先度の低いボックスは、優先度の高いマスターを確認し、スレーブモードに切り替えました。その行をに変更することによって

    state BACKUP

優先度の高いボックスはスレーブとして開始され、優先度の高いマスターを認識し、スレーブのままになります。完了しました。

2
Chris