web-dev-qa-db-ja.com

VPS環境でのフェイルオーバーのためにGREトンネルを介してKeepalived

Linodeでアプリケーションを実行しています。彼らのネットワークはマルチキャストをサポートしていません。フェイルオーバーに使用される多くのツール(keepalived、spread/wackamole、hearbeat)は、(私が知る限り)動作するためにマルチキャストを必要とします。私はそれらすべてのドキュメントを読みましたが、「ユニキャスト」モード(ある場合)でもマルチキャストで送信します。

GREトンネルを使用すると、ルーターが知らなくてもマルチキャストを効果的に送信できることを知っています。これにより、これらのツールの1つを使用できるようになります(今のところ、keepalivedを使用したいと思います)。

次のように、デバイス「gretun」にトンネルを設定しました。
10.0.0.1は、www1へのトンネルインターフェイスポイントです。
10.0.0.2は、www2へのトンネルインターフェイスポイントです。
できます nc 10.0.0.2 80 www1から、およびnc 10.0.0.1 80 www2からなので、機能しているようです。私が共有しようとしているパブリックIPが69.164.69.69であると仮定します。

2つの質問があります:
トンネル(gretun)を監視するようにkeepalivedを構成した後も、2台のマシンはお互いを認識できません。これが私の設定です:

global_defs {
    notification_email {
             [email protected]
    }

    notification_email_from [email protected]
    smtp_server localhost
    smtp_connect_timeout 30
    router_id www1.app.com
}

vrrp_script chk_haproxy {
    script "killall -0 haproxy"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    state MASTER
    interface gretun
    virtual_router_id 51
    priority 100

    advert_int 1
    garp_master_delay 2

    smtp_alert

    authentication {
            auth_type PASS
            auth_pass password
    }

    virtual_ipaddress {
            69.164.69.69/24 dev eth0
    }

    track_script {
            chk_haproxy
    }
}

Www1とwww2の両方が同時に共有IPを取得していますが、相互に通信できないためだと思います。 「gretun」を使用しても、お互いに会話できない理由はありますか?

2番目の質問:3台以上のマシンを相互に接続してマルチキャストを使用できるようにトンネルを設定することは可能ですか?言い換えると、ノードの異なる組み合わせごとに異なるトンネルを設定する代わりに、ノードをいわばトンネルに「参加」させて、ノードが相互に自動検出できるようにすることができますか?

質問はばかげているかもしれませんが、私はネットワーキングの第一人者ではありません。これは、sshの外部でトンネルを使用した初めての経験です。また、自分がしていること以外の問題を解決するためのアドバイスも受け付けています。

ありがとう!

3
andrew

興味があれば、ローカルVIPとリモートVIPの間でユニキャストを使用できるようにするkeepalivedのパッチがあります。仮想マシン間でvps.netで正常に使用しています。トンネルを設定するよりもはるかに簡単です。私はそこにアップロードしました:

http://1wt.eu/keepalived/

次に、「vrrp_unicast_bind」と「vrrp_unicast_peer」を指定する必要があります。引き続きVRRPプロトコルを使用しますが、これらのIP間でのみ使用します。

これがお役に立てば幸いです。

9
Willy Tarreau

AWSでは、VPS環境で機能する可能性がありますが、セキュリティグループで生のプロトコルルール(VRRPの場合は112)を開くことができないため、通常のEC2環境では失敗します。

0
dsheng