Linux Distribution: CentOS 9 Stream
Version of HA Proxy: HAProxy version 2.4.22-f8e3218
Version of KeepAlived: Keepalived v2.2.8 (04/04,2023
我正在使用 keepalived 在主/备份配置中保护 2x HAProxy 负载均衡器。我看到 VIP 出现在主服务器和从服务器上 - 我知道 VIP 应该只出现一次 - 并且应该在主服务器重新上线时转移回主服务器。我可以让主服务器发生故障,一切正常 - 并启动主服务器备份,操作不会受到影响。但我对配置是否正确并不满意
跑步时的大师
sudo ip a | grep ens192
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
inet 192.168.1.17/24 brd 192.168.1.255 scope global noprefixroute ens192
**inet 192.168.1.20/32** scope global ens192
运行 sudo ip a | grep ens192 时的备份
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
inet 192.168.1.19/24 brd 192.168.1.255 scope global noprefixroute ens192
**inet 192.168.1.20/32** scope global ens192
主配置如下所示:
global_defs {
router_id LB-01
}
vrrp_script haproxy {
script "killall -0 haproxy"
interval 2
weight 2
}
vrrp_instance 50 {
virtual_router_id 50
advert_int 1
priority 150
state MASTER
interface ens192
virtual_ipaddress {
192.168.1.20
}
track_script {
haproxy
}
}
备份配置如下:
global_defs {
router_id LB-02
}
vrrp_script haproxy {
script "killall -0 haproxy"
interval 2
weight 2
}
vrrp_instance 50 {
virtual_router_id 50
advert_int 1
priority 50
state BACKUP
interface ens192
virtual_ipaddress {
192.168.1.20
}
track_script {
haproxy
}
}
我读到过,主优先级和备份优先级之间必须相差 50 个点。我已确认两个系统上的路由器实例 ID 相同...
有什么想法吗?
答案1
事实证明需要软件更新。此外,SELinux 阻止脚本检查 haproxy,因此虽然可以检测到 LB 的总损失,但无法检测到 haproxy 服务的故障
答案2
我想分享一下我专门用于保护 HAproxy 的 KeepAlive.conf 设置。在此配置中,HAProxy 和 KeepAliveD 安装在 2 个 HProxy 实例上,以在 LB 层创建一定程度的容错能力
我设置了一个具有加权优先级的备份/备份系统,而不是主/备份系统,后者意味着自动“回退”到默认 LB。我更喜欢这样一种设置,其中具有最长且更稳定正常运行时间的 LB 是首选系统。
obal_defs {
router_id LB-01
}
vrrp_script haproxy {
script "/usr/local/bin/checkhaproxy.sh"
interval 1
timeout 5
rise 3
fall 3
}
vrrp_instance 50 {
virtual_router_id 50
advert_int 1
state BACKUP
priority 150
nopreempt
interface ens192
virtual_ipaddress {
192.168.1.22
}
track_script {
haproxy
}
关键是要有一种方式来检查 HAproxy 的状态,这种方式是 SELinux 可以接受的。因此,我们创建了一个 .sh 脚本,并使用 chmod +x 使其可执行
!/bin/sh
# restart keepalive if haproxy died
pid=`/bin/pidof haproxy`
test -z "$pid" && { service keepalived restart &>/dev/null; exit 1; }
exit 0
它存储在 /usr/local/bin/
在名为 LB-02 的备份 1 上,shame .sh 脚本在 /usr/local/bin 中创建,conf 文件如下所示:
global_defs {
router_id LB-02
}
vrrp_script haproxy {
script "/usr/local/bin/checkhaproxy.sh"
interval 1
timeout 5
rise 3
fall 3
}
vrrp_instance 50 {
virtual_router_id 50
advert_int 1
state BACKUP
priority 50
nopreempt
interface ens192
virtual_ipaddress {
192.168.1.22
}
track_script {
haproxy
}
}
这两个文件几乎完全相同,除了:
路由器 ID 主机名(验证 LB-01 能否 ping 通 LB-02,反之亦然)LB-02 上的优先级值较低,以确保如果它们同时出现,则其中一个在选举中获胜
陷阱 - 显然 VIP 是与您的网络相关的 - 并注意不同的 Linux 发行版如何枚举网卡 - 又名 ens192 和 eth0 等等......