Linux LVS 高可用负载均衡配置

2次阅读

keepalived启动失败主因是keepalived.conf语法错误,需用keepalived -t -f校验;vrrp/lvs配置需顶格与缩进规范,dr模式须正确配置real server的lo接口、arp参数及防火墙规则,并确保vrrp组播通信正常。

Linux LVS 高可用负载均衡配置

keepalived 启动失败:/etc/keepalived/keepalived.conf 语法错误

配置 LVS 高可用时,keepalived 启动失败最常见原因就是 /etc/keepalived/keepalived.conf 里写错了关键字或缩进。它不报具体哪一行错,只在日志里显示 "Configuration file '/etc/keepalived/keepalived.conf' syntax Error"

实操建议:

  • keepalived -t -f /etc/keepalived/keepalived.conf 手动校验语法,它会输出真实报错行号
  • vrrp_instancevirtual_server 块必须顶格写,内部参数要缩进(空格或 tab 皆可,但同一文件内别混用)
  • virtual_serverdelay_looplb_algolb_kind 这几个参数不能少;lb_kind 必须是 DRNATTUN,拼错(比如写成 dr 小写)也会挂
  • 检查 real_server 下的 weight 是否为整数,TCP_CHECK 块里的 connect_port 是否和后端服务监听端口一致

DR 模式下 real server 回环接口没配好,请求全丢

LVS DR 模式要求所有 real server 把 VIP 绑定到本地回环接口(lo),并禁用 ARP 响应,否则客户端发来的包会被 real server 自己吃掉,不转发给后端应用。

实操建议:

  • 在 real server 上执行:ip addr add 192.168.10.100/32 dev lo(把 VIP 替换成你实际的 virtual_ipaddress
  • 加两条 sysctl 配置:net.ipv4.conf.lo.arp_ignore = 1net.ipv4.conf.lo.arp_announce = 2,然后 sysctl -p
  • 别只配 lo,还要确认 net.ipv4.conf.all.arp_ignore 是 0 —— 设成 1 会导致其他正常网卡也收不到 ARP,反而断连
  • 验证方式:在 real server 上 ip addr show lo 看 VIP 是否存在;再从 client ping VIP,抓包看 reply 是否来自 real server 而非 LVS 调度器

iptables 丢掉了 LVS 的转发包

很多系统默认开了 iptablesfirewalld,而 LVS 在内核 netfilter 的 PREROUTING 链之后做转发,如果规则顺序不对,包可能在到达 LVS 前就被 DROP 了。

实操建议:

  • 先临时关掉防火墙:systemctl stop firewalldiptables -F,确认是否是它导致不通
  • 若必须开防火墙,确保放行 VIP 的入向流量:iptables -I input -d 192.168.10.100 -j ACCEPT(VIP 替换为你自己的)
  • DR 模式下 real server 不需要开放调度器端口,但必须允许本机访问自己绑定的 VIP(即 lo 接口上的 VIP),否则健康检查会失败
  • 注意 iptables 规则持久化方式:centos 7+ 默认用 firewalld,直接改 iptables 命令不生效;debian/ubuntu 则常用 iptables-persistent

keepalived 主备切换后 VIP 不漂移

主节点宕机,备节点没接管 VIP,常见于 VRRP 广播收不到、优先级配置冲突、或网络隔离。

实操建议:

  • tcpdump -i eth0 vrrp 在两台机器上同时抓包,看主是否还在发 VRRP Advertisement,备是否收到
  • 检查 vrrp_instance 下的 state:主必须是 MASTER(大写),备是 BACKUPpriority 主要比备高(如 100 vs 90),且差值 ≥ 5 更稳
  • 确认两节点在同一个二层网络,中间交换机没开 IGMP snooping 或 VLAN 隔离——VRRP 依赖组播地址 224.0.0.18,跨三层需额外配置
  • 备节点启动后,ip addr show 看 VIP 是否出现;没出现就查 journalctl -u keepalived -n 50,重点找 "VRRP_Instance(xxx) Entering MASTER STATE" 是否有

DR 模式下 VIP 漂移本身很快,但 real server 的 ARP 缓存更新慢,客户端可能还要等几十秒才恢复;这个延迟不是配置问题,而是网络层固有行为。

text=ZqhQzanResources