Failover

Keepalived 通過 GRE 隧道在 VPS 環境中進行故障轉移

  • August 7, 2013

我正在 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 80www2,所以它似乎正在工作。假設我要共享的公共 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)。

引用自:https://serverfault.com/questions/186987