Keepalived 通過 GRE 隧道在 VPS 環境中進行故障轉移
我正在 Linode 上執行一個應用程序。他們的網路不支持多播。許多用於故障轉移的工具(keepalived、spread/wackamole、heartbeat)需要多播才能工作(據我所知)。我已經閱讀了所有文件,即使在“單播”模式下(如果有的話)它仍然通過多播發送。
我知道使用 GRE 隧道,我可以在路由器不知道的情況下有效地發送多播,這將使我能夠使用其中一種工具(現在我想使用 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。我有兩個問題:
配置keepalived監控隧道(gretun)後,兩台機器還是看不到對方。這是我的配置:
global_defs { notification_email { info@app.com } notification_email_from alerts@app.com 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”不允許他們互相交談嗎?
第二個問題:是否可以建立一個隧道,以便我可以讓 3 台以上的機器相互連接並使用多播?換句話說,不是在每個不同的節點組合之間建立不同的隧道,而是可以讓節點“加入”一個隧道,這樣他們就可以自動發現彼此?
這些問題可能很愚蠢,但我不是網路專家,這是我在 ssh 之外使用隧道的第一次體驗。我也願意接受可以解決我正在做的事情之外的問題的建議。
謝謝!
如果你有興趣,我有一個 keepalived 的更新檔,它允許它在本地和遠端 VIP 之間使用單播。我已經成功地在虛擬機之間的 vps.net 上使用它。這比嘗試建立隧道要簡單得多!我已經上傳了它:
<http://1wt.eu/keepalived/>
然後你只需要指定“vrrp_unicast_bind”和“vrrp_unicast_peer”。它仍將使用 VRRP 協議,但僅限於這些 IP 之間。
希望這會有所幫助!
在 AWS 中,它可能在 VPS 環境中工作,但在正常的 EC2 環境中會失敗,因為您無法在安全組中打開原始協議規則(VRRP 為 112)。