我在实验室的虚拟机中运行了一个由 3 个 Ubuntu 节点组成的集群,现在想将其投入生产。Hetzner Online hetzner.de 提供了一些物有所值的专用服务器,所以我租了 3 台机器,并通过千兆交换机连接起来。
我的目的是创建一个 HA 设置,在 2 个 HAProxy 服务器前面有两个 keepalived。Keepalived 在我的设置中配置了一个 VIP。不幸的是,这不适用于 Hetzner。但是他们提供了一个名为故障转移 IP 的系统,人们可以借助脚本切换到另一台服务器:http://wiki.hetzner.de/index.php/Failover_Skript
我的 keepalived 配置如下:
vrrp_script chk_haproxy {
script "killall -0 haproxy" # cheaper than pidof
interval 2 # check every 2 seconds
weight 2 # add 2 points of prio if OK
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 101
virtual_ipaddress {
192.168.56.101/24 # this is the shared IP I was using
}
track_script {
chk_haproxy
}
}
那么他们的故障转移脚本如何适应这种情况?
看来我不是唯一一个遇到这个问题的人,只是解决办法不是那么明显。https://www.howtoforge.com/community/threads/hetzner-to-stop-support-for-high-availability-setups.19988/
答案1
由于这是一个老答案,我不确定您是否仍在寻找答案。但我在寻找如何做到这一点的最佳方法时偶然发现了它。
Hetzner 为专用服务器分配故障转移 IP 的方式不是允许在服务器上配置它,而是将流量路由到原始服务器 IP。因此,可以不更改服务器上的任何内容,而是在其管理界面中手动切换 IP。但是,这对大多数人来说不是一个合适的解决方案,因为我不愿意起床手动进行故障转移。这应该自动完成,然后通知管理员故障转移已完成。甚至可以提供一份小报告,说明系统遇到的问题以及故障转移的原因。
Keepalived 可以帮你完成这个任务,你只需要配置 keepalived 在故障转移时运行脚本即可。但如果没有 IP 可以进行故障转移,我们又该如何进行故障转移呢?
很简单;在服务器之间创建一个内部网络,并将您自己的非路由内部 IP 分配给 keepalived。由于此内部网络使用与外部网络相同的接口,因此这并不重要。这种方法的一个好处是,您可以通过使用此内部 VIP 将所有内部流量 100% 保持在内部。
一旦 Keepalived 发生故障,您可以命令它运行 Hetzner 的脚本,以使用以下方式切换外部 IP:notify
一个例子:
vrrp_script chk_haproxy {
script "killall -0 haproxy" # cheaper than pidof
interval 2 # check every 2 seconds
weight 2 # add 2 points of prio if OK
}
vrrp_instance VI_1 {
state MASTER
interface enp0s31f6.4000
virtual_router_id 51
priority 101
virtual_ipaddress {
192.168.100.3/24 # this is the shared IP I was using
}
track_script {
chk_haproxy
}
notify /usr/sbin/hetzner_failoverIP.sh database set $THIS_SERVER_IP
}
当然,Hetzner 脚本可以调整得更加智能,例如可以自行选择服务器 IP。
需要注意的缺点是外部 IP 需要 40 到 60 秒。对我来说,最少 40 秒,最多 1 分钟太长了。
另一个选择是使用 Hetzner 云实例来启用 HA,而无需使用故障转移 IP 和上述脚本。在云中还有另一种解决方案:云浮动IP。
此选项将花费您每月约 8.50 欧元,用于:
- 两个云实例(每个 1 个基本 CPU、2GB 内存和 20TB 流量)
- 两个云浮动 IP
然后使用 keepalived 管理云浮动 IP(virtual_ipaddress 部分)并使用 HAProxy 将所有流量发送到专用服务器。然后 HAProxy 将执行健康检查,您无需担心:
- 使用 Hetzner API 切换 IP
- 额外停机时间 40 到 60 秒
值得一提的是,Hetzner云服务器不支持内部网络。但如果您以这种方式使用它们,则不需要这样做,而且由于内部流量是免费的,因此不会产生额外费用。为了安全起见,请使用 SELinux/AppArmor 和 Firewalld 保护负载平衡器(Keepalived+HAProxy 云实例)。在两个集群(云 <-> 专用)之间使用加密流量来防止数据包嗅探。我还会加密专用服务器之间的流量,即使您使用的是私有 VLAN,流量仍会通过同一 NIC 发送出去。需要记住这一点。
使用来源:
- https://wiki.hetzner.de/index.php/Failover/en
- https://wiki.hetzner.de/index.php/Failover_Skript/en
- https://wiki.hetzner.de/index.php/Vswitch/en
- https://wiki.hetzner.de/index.php/Cloud_floating_IP_persistent/en
- https://www.hetzner.com/cloud
- https://twitter.com/hetzner_online/status/955781300513857536