我正在Linode上运行一个应用程序。 他们的networking不支持多播。 许多用于故障转移的工具(keepalived,spread / wackamole,hearbeat)要求多播工作(据我所知)。 我已经阅读了他们所有的文档,甚至在“单播”模式(如果他们有),它仍然通过组播发送。
我知道使用GRE隧道,我可以在路由器不知道的情况下有效地发送多播,这将使我能够使用这些工具之一(现在我想使用keepalived)。
我在设备“gretun”上设置了我的隧道,如下所示:
10.0.0.1是指向www1的隧道接口
10.0.0.2是指向www2的隧道接口
我可以从万维网nc 10.0.0.2 80
从WWW 1,80和nc 10.0.0.1 80
从WWW 2,所以它似乎工作。 假装我试图分享的公共IP是69.164.69.69。
我有两个问题:
configuration好keepalived监控隧道(gretun)后,两台机器仍然看不到对方。 这是我的configuration:
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,我猜是因为他们不能互相交stream。 任何想法为什么使用“gretun”不会让他们与海誓山盟交谈?
第二个问题:是否可以build立一个隧道,使我可以连接3台以上的机器并使用组播? 换句话说,不是在每个不同的节点组合之间build立不同的隧道,而是让节点“join”一个隧道,这样他们就可以自动发现彼此了。
这些问题可能是愚蠢的,但我不是一个networking专家,这是我第一次在ssh之外使用隧道的经验。 我也接受build议,可以解决我在做什么以外的问题。
谢谢!
如果你有兴趣,我有一个keepalived的补丁,允许它使用本地和远程VIP之间的单播。 我已经成功地在虚拟机之间的vps.net使用它。 这比试图build立隧道简单得多! 我已经上传了
然后您只需指定“vrrp_unicast_bind”和“vrrp_unicast_peer”。 它仍将使用VRRP协议,但只能在这些IP之间使用。
希望这有助于!
在AWS中,它可能在VPS环境中工作,但在正常的EC2环境中会失败,因为您无法在安全组中打开原始协议规则(112)。