通过 GRE 隧道 Keepalived 实现 VPS 环境上的故障转移

通过 GRE 隧道 Keepalived 实现 VPS 环境上的故障转移

我在 Linode 上运行一个应用程序。他们的网络不支持多播。许多用于故障转移的工具(keepalived、spread/wackamole、hearbeat)都需要多播才能工作(据我所知)。我已阅读了所有这些工具的文档,即使在“单播”模式下(如果他们有),它仍然通过多播发送。

我知道通过 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 {
             [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”不允许它们相互通信吗?

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

这些问题可能很愚蠢,但我不是网络专家,这是我第一次在 ssh 之外使用隧道。我也愿意接受能够解决我所做工作之外的问题的建议。

谢谢!

答案1

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

http://1wt.eu/keepalived/

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

希望这有帮助!

答案2

在 AWS 中,它可能在 VPS 环境中工作,但在普通 EC2 环境中会失败,因为您无法在安全组中打开原始协议规则(VRRP 为 112)。

相关内容