lvs本身无故障转移能力,必须依赖keepalived实现高可用;keepalived通过vrrp协议管理vip漂移、自动同步lvs规则并健康检查后端服务器,三者协同确保调度器不挂、服务不中断、流量不丢失。

LVS 本身不自带故障转移能力,必须依赖 Keepalived 实现高可用。核心思路是:Keepalived 管理 VIP(虚拟 IP)漂移 + 自动同步 LVS 转发规则 + 健康检查后端服务器。三者协同,才能做到“调度器不挂、服务不中断、流量不丢失”。
Keepalived 掌控 VIP 漂移
主备 LVS 节点通过 VRRP 协议竞争 VIP 所有权。主节点优先级更高(如 priority 100),正常时独占 VIP;一旦心跳检测失败(如进程退出、网络中断),备节点立即接管 VIP,客户端无感知切换。
- 主节点配置中设置 state MASTER,备节点设为 state BACKUP
- virtual_router_id 必须一致(同一 VRRP 组内唯一标识)
- 建议主节点启用 nopreempt(注释掉),避免主恢复后抢回 VIP 导致连接重置
- VIP 必须绑定在物理网卡(如 eth0),不能绑在 lo 上
Keepalived 内置 IPVS 规则管理
无需手动运行 ipvsadm 命令,Keepalived 启动时会自动加载配置中的 virtual_server 定义,并调用内核 ip_vs 模块建立转发规则。
- lb_kind DR 是生产常用模式(直接路由),要求 RS 配置 lo:0 绑定 VIP 并抑制 ARP
- lb_algo rr 或 wrr 控制分发策略,persistence_timeout 可选开启会话保持
- 每个 real_server 段定义一台后端,含 IP、端口、权重及 TCP 健康检查参数
- 健康检查失败连续 retry 次后,Keepalived 自动从 IPVS 规则中剔除该 RS
真实服务器(RS)关键适配
尤其在 DR 模式下,RS 必须能响应 VIP 的请求,又不能干扰 LVS 节点的 VIP,否则引发地址冲突或响应异常。
- 在 RS 的 lo 接口上添加 VIP 别名(如 ifconfig lo:0 192.168.1.100/32 up)
- 关闭 ARP 响应:net.ipv4.conf.all.arp_ignore = 1 和 net.ipv4.conf.all.arp_announce = 2
- 所有 RS 网关指向同一出口(通常为 LVS 节点或上游路由器),不走 LVS 节点回包
- 确保 RS 服务(如 Nginx、Apache)监听 VIP 对应端口(如 0.0.0.0:80)
验证与日常保障要点
部署完成后不能只看 VIP 是否飘起来,要逐层确认通路是否真正生效。
- 在 LVS 节点执行 ipvsadm -ln 查看当前调度规则和 RS 状态
- 用 curl -I http://VIP 多次测试,观察返回内容是否轮询(或按权重分布)
- 手动停掉一台 RS 服务,等待约 3×connect_timeout+delay_before_retry 秒,确认流量自动切到其余 RS
- 模拟主 LVS 故障(systemctl stop keepalived),验证 VIP 迁移及业务连续性
- 所有节点务必时间同步(chronyd 或 ntpdate),VRRP 依赖精确时间戳防脑裂










