12.5.1 LVS与Keepalived集成架构

LVS与Keepalived集成架构#

LVS(Linux Virtual Server)负责四层负载均衡与转发,Keepalived 通过 VRRP 提供虚拟IP(VIP)与主备漂移,并通过健康检查驱动 LVS 服务的高可用。两者集成的核心是:Keepalived 作为控制平面(VIP 管理、健康检查、状态切换),LVS 作为数据平面(连接调度与转发)。

原理草图(控制面/数据面)

文章图片

整体组件与角色
- VIP(Virtual IP):对外统一入口,由 Keepalived 管理漂移
- Director(调度器):运行 Keepalived + LVS(ipvs),负责连接调度
- Real Server(后端真实服务器):承载业务流量,需与 VIP 连通
- Health Check(健康检查):Keepalived 定期检测后端,动态维护 LVS real_server


安装与基础准备(CentOS/Alma/RHEL)#

# Director 节点安装
yum -y install keepalived ipvsadm

# 启动内核 LVS 模块
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh

# 查看模块与版本
lsmod | grep ip_vs
ipvsadm -v

命令解释
- modprobe ip_vs_*:加载 LVS 调度算法模块
- ipvsadm -v:查看 LVS 版本,验证 ipvsadm 是否可用


DR 模式集成示例(可执行)#

1)Director(Master)配置 /etc/keepalived/keepalived.conf

global_defs {
  router_id LVS_MASTER
}

vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 51
  priority 150
  advert_int 1
  virtual_ipaddress {
    10.0.0.100/24 dev eth0
  }
}

virtual_server 10.0.0.100 80 {
  delay_loop 2
  lb_algo rr
  lb_kind DR
  persistence_timeout 30

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

2)Director(Backup)配置 /etc/keepalived/keepalived.conf

global_defs {
  router_id LVS_BACKUP
}

vrrp_instance VI_1 {
  state BACKUP
  interface eth0
  virtual_router_id 51
  priority 100
  advert_int 1
  nopreempt
  virtual_ipaddress {
    10.0.0.100/24 dev eth0
  }
}

virtual_server 10.0.0.100 80 {
  delay_loop 2
  lb_algo rr
  lb_kind DR
  persistence_timeout 30

  real_server 10.0.0.11 80 {
    weight 1
    TCP_CHECK { connect_timeout 3; connect_port 80; }
  }
  real_server 10.0.0.12 80 {
    weight 1
    TCP_CHECK { connect_timeout 3; connect_port 80; }
  }
}

3)Real Server 绑定 VIP + ARP 抑制

# 绑定 VIP 到 lo(注意 DR 模式不在网卡上回应 ARP)
ip addr add 10.0.0.100/32 dev lo

# ARP 抑制(避免 Real Server 响应 VIP 的 ARP)
cat >/etc/sysctl.d/lvs.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.conf

4)启动与验证

systemctl enable --now keepalived

# 查看 VIP 是否在 Master 上
ip addr show dev eth0 | grep 10.0.0.100

# 查看 LVS 规则与后端状态
ipvsadm -Ln

预期效果
- VIP 仅在 Master Director 可见
- ipvsadm -Ln 显示 10.0.0.100:80 及两台 Real Server


关键命令说明#

ipvsadm -Ln        # 查看 LVS 转发表(数字格式)
ipvsadm -Ln --stats # 查看连接与流量统计
ipvsadm -Ln --rate  # 查看实时速率
  • --stats:用于观察后端是否收到流量
  • --rate:用于判断流量突增与健康检查摘除效果

排错清单(典型问题与定位)#

1)VIP 不在 Master 上

systemctl status keepalived
journalctl -u keepalived -n 50
  • 检查 virtual_router_id 是否一致
  • 检查接口名是否正确(interface eth0

2)Real Server 不回包

# Director 上抓包确认请求是否转发
tcpdump -i eth0 host 10.0.0.11 and port 80

# Real Server 是否误响应 ARP
arp -an | grep 10.0.0.100
  • DR 模式必须 ARP 抑制
  • VIP 必须绑定在 lo

3)后端被摘除

ipvsadm -Ln
grep -n "real_server" -n /etc/keepalived/keepalived.conf
  • 检查 TCP_CHECK 端口是否与实际一致
  • 检查后端服务是否监听 0.0.0.0:80

练习(动手验证)#

  1. lb_algorr 改为 wrr,设置 weight 为 1/3,观察请求分布
  2. 停止一台 Real Server 的 HTTP 服务,确认 ipvsadm -Ln 中该节点被摘除
  3. 关闭 Master Keepalived,观察 Backup 是否接管 VIP(ip addr 验证)
  4. 添加 persistence_timeout 60,验证会话保持效果