Keepalived over GRE 隧道,用于 VPS 环境中的故障​​转移

and*_*rew 3 tunneling failover high-availability keepalived

我正在 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
    }
}
Run Code Online (Sandbox Code Playgroud)

www1 和 www2 都在同时抢共享 IP,我猜是因为他们不能互相交谈。知道为什么使用“gretun”不允许他们互相交谈吗?

第二个问题:是否可以建立一个隧道,以便我可以将 3 台以上的机器相互连接并使用多播?换句话说,与其在每个不同的节点组合之间设置不同的隧道,不如让节点“加入”一个隧道,这样他们就可以自动发现彼此?

这些问题可能很愚蠢,但我不是网络专家,这是我第一次在 ssh 之外使用隧道的经验。我也乐于接受可以解决我正在做的事情之外的问题的建议。

谢谢!

Wil*_*eau 9

如果您有兴趣,我有一个keepalived 补丁,它允许它在本地和远程VIP 之间使用单播。我已经成功地在虚拟机之间的 vps.net 上使用它。这比尝试建立隧道要简单得多!我已经上传到那里了:

http://1wt.eu/keepalived/

然后你只需要指定“vrrp_unicast_bind”和“vrrp_unicast_peer”。它仍将使用 VRRP 协议,但仅限于这些 IP 之间。

希望这有帮助!