web-dev-qa-db-ja.com

マシンが過負荷になったときの仮想IPフェイルオーバー

キープアライブを仮想IPアドレスと組み合わせて使用​​して2年になります。まれに、マシンがクラッシュする場合、これは非常にうまく機能します。

しかし、ボックス自体に問題がある場合、フェイルオーバーが発生しなかったケースがいくつか見られます。たとえば、システムが常にスワップしているという問題が発生した場合です。負荷は通常の5ではなく25であり、マシンにSSH接続する方法はありませんでした。 pingは機能していました。 Keepalivedは実行を継続し、仮想IPアドレスは他のスレーブに引き継がれませんでした。

また、MySql HAセットアップで、誰かがスレーブではなくマスターでバックアップを実行することにより、データベース全体を誤ってロックするという状況がありました。それも取り上げられませんでした。

ここでの問題は、マスターが正常に機能しているかどうかをマシン自体でチェックするために間違ったスクリプトを使用しているだけですか、それとも仮想IPセットアップで一般的ですか?

マスターが利用可能かどうかを判断するために3番目のシステムを使用していないのは不思議です。もちろん、私はその理由を理解しています。keepalivdは、マスターによってマスター自体のスイッチをオンにする必要があります。

最近、Redis HAセットアップで、人々がZookeeperを使用していることに気付きました(例: https://github.com/ryanlecompte/redis_failover )。それは私が遭遇した制限のためですか?

3
Marco

ここでの問題は、マスターが正常に機能しているかどうかをマシン自体でチェックするために間違ったスクリプトを使用していることです。

はい。

たとえば、システムが常にスワップしているという問題が発生した場合です。負荷は通常の5ではなく25であり、マシンにSSH接続する方法はありませんでした。 pingは機能していました。 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が頻繁に切り替えられるとどうなりますか?

1
quanta