Keepalived 不起作用?

Keepalived 不起作用?

我正在尝试在 CentOS 8 上使用 keepalived 为 HAProxy 创建 HA,这是我所拥有的:

Virtual IP: 10.10.10.14
HAProxy Server 1: 10.10.10.15
HAProxy Server 2: 10.10.10.18

和我的 keepalived 配置掌握

vrrp_script chk_haproxy {
  script "killall -0 haproxy" # check the haproxy process
  interval 2 # every 2 seconds
  weight 2 # add 2 points if OK
}

vrrp_instance VI_1 {
  interface ens190 
  state MASTER 
  virtual_router_id 51
  priority 101 
  virtual_ipaddress {
    10.10.10.14 
  }
  track_script {
    chk_haproxy
  }
}

Keepalived 配置开启备份

vrrp_script chk_haproxy {
  script "killall -0 haproxy" # check the haproxy process
  interval 2 # every 2 seconds
  weight 2 # add 2 points if OK
}

vrrp_instance VI_1 {
  interface ens165 
  state BACKUP 
  virtual_router_id 51
  priority 100 
  virtual_ipaddress {
    10.10.10.14 
  }
  track_script {
    chk_haproxy
  }
}

但每次我尝试停止 HAProxy 进程时,它都不会连接到备份服务器。相反,它仅适用于最近启动 keepalived 的服务器。

我的ip -a命令会像这样返回掌握

inet 10.10.10.15/24 brd 10.10.10.255 scope global noprefixroute ens190
inet 10.10.10.14/32 scope global ens190

为了备份

inet 10.10.10.18/24 brd 10.10.10.255 scope global noprefixroute ens165
inet 10.10.10.14/32 scope global ens165

哪里不对了?我还设置了net.ipv4.ip_nonlocal_bind = 1sysctl 配置。我的日志只显示服务的启动和停止?

答案1

我的配置有效,但指南没有提及任何有关防火墙规则的内容。所以我做了一些研究并使sudo firewall-cmd --zone=public --permanent --add-rich-rule='rule protocol value="vrrp" accept'这个设置发挥作用。

答案2

HAProxy 完成加载配置后会绑定到套接字。然后它侦听 10.10.10.14,该 IP 地址稍后可能会被 Keepalived 从网络接口中删除。

但是,当 Keepalived 的另一个实例添加 IP 地址时,主机上的 HAProxy 不会自动侦听该地址。 Keepalived切换时需要重新加载HAProxy。

为此,您可能需要在以下部分添加通知脚本vrrp_instance VI_1

notify "/usr/local/bin/toggle_keepalived"

该文件/usr/local/bin/toggle_keepalived是一个 shell 脚本,仅重新加载 HAProxy,例如在 systemd 系统上:

#!/bin/bash
systemctl reload haproxy

使其可执行,就可以了。

相关内容