12.1.5 与LVS/负载均衡协同的架构关系

在高可用与负载均衡场景中,Keepalived与LVS的协同关系可理解为“控制面+转发面”的分工:Keepalived负责VIP漂移、主备选举与健康检查等控制逻辑,LVS负责数据转发与负载分发。二者结合构成高性能、高可靠的四层负载均衡架构。

原理草图(控制面/转发面协作)

文章图片

架构角色与分工
- Keepalived:基于VRRP维护VIP,检测本机与后端Real Server健康状态,控制LVS虚拟服务的启停与主备切换。
- LVS:基于IPVS在内核层实现负载均衡,支持DR/TUN/NAT多种转发模式。
- Real Server:承载业务流量,通常部署多副本,具备健康探测与故障剔除能力。


安装与基础环境(LVS+Keepalived)#

以CentOS/RHEL系为例,安装并启用服务:

# 安装
yum -y install keepalived ipvsadm

# 启动与开机自启
systemctl enable --now keepalived
systemctl status keepalived

# 查看IPVS模块与表
lsmod | grep ip_vs
ipvsadm -Ln

命令说明
- ipvsadm -Ln:查看LVS转发表(不解析域名,性能更佳)。
- lsmod | grep ip_vs:确认内核IPVS模块已加载。


关键配置示例(Keepalived驱动LVS)#

示例环境:
- VIP:10.0.0.100
- LVS主节点:10.0.0.5
- LVS备节点:10.0.0.6
- Real Server:10.0.0.11、10.0.0.12
- 转发模式:DR(直连)

主节点 /etc/keepalived/keepalived.conf

global_defs {
  router_id LVS_MASTER
}

vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 51
  priority 100
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 123456
  }
  virtual_ipaddress {
    10.0.0.100/24 dev eth0
  }
}

virtual_server 10.0.0.100 80 {
  delay_loop 6
  lb_algo rr
  lb_kind DR
  protocol TCP

  real_server 10.0.0.11 80 {
    weight 1
    TCP_CHECK {
      connect_timeout 3
      retry 2
      delay_before_retry 2
      connect_port 80
    }
  }
  real_server 10.0.0.12 80 {
    weight 1
    TCP_CHECK {
      connect_timeout 3
      retry 2
      delay_before_retry 2
      connect_port 80
    }
  }
}

备节点 /etc/keepalived/keepalived.conf

global_defs {
  router_id LVS_BACKUP
}

vrrp_instance VI_1 {
  state BACKUP
  interface eth0
  virtual_router_id 51
  priority 90
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 123456
  }
  virtual_ipaddress {
    10.0.0.100/24 dev eth0
  }
}

virtual_server 10.0.0.100 80 {
  delay_loop 6
  lb_algo rr
  lb_kind DR
  protocol TCP

  real_server 10.0.0.11 80 {
    weight 1
    TCP_CHECK { connect_timeout 3 retry 2 delay_before_retry 2 connect_port 80 }
  }
  real_server 10.0.0.12 80 {
    weight 1
    TCP_CHECK { connect_timeout 3 retry 2 delay_before_retry 2 connect_port 80 }
  }
}

关键参数解释
- virtual_router_id:主备必须一致,标识同一VRRP组。
- priority:优先级决定主备角色。
- lb_kind DR:指定LVS转发模式为DR。
- real_server:后端真实服务器及健康检查配置。


DR模式必备内核参数(Real Server)#

避免Real Server响应VIP的ARP,防止ARP冲突:

cat >/etc/sysctl.d/lvs_dr.conf <<'EOF'
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_announce=2
EOF
sysctl -p /etc/sysctl.d/lvs_dr.conf

说明
- arp_ignore=1:仅在目标IP是本机IP时才响应ARP。
- arp_announce=2:使用最合适的源地址进行ARP通告。


验证与协同测试#

1)确认VIP漂移

# 主节点查看VIP
ip a | grep 10.0.0.100

# 停止主节点keepalived,验证VIP迁移
systemctl stop keepalived
# 在备节点查看VIP是否接管
ip a | grep 10.0.0.100

2)查看LVS转发表

ipvsadm -Ln --stats
ipvsadm -Ln --rate

3)健康检查生效验证

# 模拟RS故障
systemctl stop nginx  # 在10.0.0.1110.0.0.12
# 观察LVS表项
ipvsadm -Ln | grep 10.0.0.11

预期效果
- 停止RS后,Keepalived自动剔除故障节点;
- 主节点停止Keepalived,VIP快速漂移到备节点。


常见排错清单(命令 + 解释)#

1)VIP无法漂移

# 查看VRRP状态与日志
journalctl -u keepalived -f
# 确认防火墙与组播
firewall-cmd --list-all
  • 检查auth_pass是否一致、virtual_router_id是否一致。
  • VRRP默认组播224.0.0.18,防火墙需放通。

2)LVS无转发

# 检查ipvs模块和表
lsmod | grep ip_vs
ipvsadm -Ln
  • 若表为空,确认virtual_server配置是否正确,Keepalived是否运行。

3)DR模式回包异常

# Real Server ARP设置核查
sysctl -a | egrep "arp_ignore|arp_announce"
  • 需严格设置ARP参数,避免VIP被Real Server响应。

练习任务#

  1. 双机切换演练:在Master上停止Keepalived,确认VIP迁移到Backup并继续提供服务。
  2. 健康检查演练:停止某个Real Server的Web服务,观察LVS表项变化并验证请求转发到其他节点。
  3. 转发模式对比:将lb_kind改为NAT,观察网络路径变化并记录性能差异。