如何使用 Hetzner Online 配置故障转移 IP 以实现高可用性

mer*_*lin 2 failover high-availability keepalived

我有一个由 3 个 Ubuntu 节点组成的集群,在实验室的 VM 中运行,现在想将其投入生产。Hetzner Online hetzner.de 提供了一些物有所值的专用服务器,所以我租了 3 台机器,连接了一个千兆交换机。

我的目的是在 2 个 HAProxy 服务器前创建一个带有两个 keepalived 的 HA-Setup。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
    }
}
Run Code Online (Sandbox Code Playgroud)

那么他们的故障转移脚本如何适应这个呢?

看起来我不是唯一一个遇到问题的人,只是解决方案不是那么明显。https://www.howtoforge.com/community/threads/hetzner-to-stop-support-for-high-availability-setups.19988/

Rob*_*ert 5

由于这是一个旧答案,我不确定您是否仍在寻找答案。但我偶然发现它寻找如何做到这一点的最佳方法。

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

当然,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 发送。要记住的事情。

使用的来源:

  1. https://wiki.hetzner.de/index.php/Failover/en
  2. https://wiki.hetzner.de/index.php/Failover_Skript/en
  3. https://wiki.hetzner.de/index.php/Vswitch/en
  4. https://wiki.hetzner.de/index.php/Cloud_floating_IP_persistent/en
  5. https://www.hetzner.com/cloud
  6. https://twitter.com/hetzner_online/status/95578​​1300513857536