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

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

我在实验室的虚拟机中运行了一个由 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 发送出去。需要记住这一点。

使用来源:

  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

相关内容