我在 Softlayer 上有 2 个虚拟服务器,都运行 HAProxy。我正在尝试使用 keepalived 设置故障转移。每台服务器都有一个私有 IP 和一个公共 IP,它们在同一个 VLAN 上。我为keepalived尝试了许多不同的设置,但是在master上停止HAProxy,它不会故障转移到BACKUP。
我读到不支持多播,因此我将设置更改为单播。现在,备份/主服务器上的设置基本上是这样的:
vrrp_script chk_haproxy {
script "pidof haproxy"
interval 2
}
vrrp_instance VI_1 {
debug 2
interface eth1
state MASTER
virtual_router_id 51
priority 101
unicast_src_ip 1.2.3.4 # My IP
unicast_peer {
5.6.7.8 # peer IP
}
track_script {
chk_haproxy
}
}
其中 MYIP 是 conf 文件所在服务器的公共 IP 地址,PEERIP 是对等方的公共 IP 地址。仍然无法正常工作。停止主服务器上的 HAProxy,它不会故障转移到备份。
我想知道是否有人在 Softlayer 上设置了带有故障转移的 HAProxy,以及他们是如何完成它的?
我设法完成了这个设置,我是这样做的:
我使用 SoftLayer 的控制面板创建了一个全局 IP 地址。
我在两个 HAProxy 虚拟服务器上都有 Debian 7。我将全局 IP 地址添加到两台服务器上的 eth1 接口。
这是两台服务器上使用的 HAProxy 设置:
这是 MASTER 服务器上的 Keepalived 设置:
这是 BACKUP 服务器上的 Keepalived 设置:
如上所述,我正在运行 Debian 7。从 keepalived 设置中可以看出,我有一个 notify_master 脚本。这是使脚本运行所需的一切:
现在所有依赖项都已到位,脚本应该可以工作。这是我保存为的脚本
/usr/bin/reroute_global
:您需要更改 API_USERNAME/KEY 以匹配您的 API 凭据。该脚本从您的 SoftLayer 全局 IP 地址中获取第一个全局 IP,然后将全局 IP 重新路由到系统。在故障转移的情况下,BACKUP 变为 MASTER 并运行脚本,该脚本将全局 IP 地址路由到自身。
测试
curl http://<global_IP>
service haproxy stop
备份时:
tail -f /var/log/syslog
. 您应该看到如下内容:curl http://<global_IP>
(如果故障转移有效,它应该可以工作)