
开篇Keepalived 不只是VIP 漂移工具——它天生就是为 LVSLinux Virtual Server设计的。很多人不知道Keepalived 的看家本领就是管理 LVS 集群实现四层负载均衡 高可用的一体化方案。本文作为 Keepalived 系列第 5 篇带你用Keepalived 直接管理 LVSDR 模式搭建一套能抗高并发的四层负载均衡入口。区别于第 1 篇的 Nginx 应用层高可用这里是纯四层TCP/UDP转发性能极高适合数据库、缓存、微服务等对吞吐要求高的场景。一、为什么用 LVS Keepalived而不是 Nginx对比LVS四层Nginx七层工作层级传输层TCP/UDP应用层HTTP吞吐性能极高转发近乎内核态中需处理应用协议可做 URL 路由不能能七层特性会话保持靠调度算法靠 sticky/cookie适用数据库、缓存、海量连接Web、API 网关、SSL结论海量 TCP 连接、要求极致吞吐 → LVS需要按 URL 分流、SSL 卸载 → Nginx。两者也可叠加LVS 在前Nginx 在后。而 Keepalived 的价值在于它直接读写 LVS 规则通过内核接口既能配virtual_server又能做 LVS 调度器的 HA。一套配置LB 和高可用全搞定。二、LVS 三种工作模式对比模式请求/响应路径是否需要 VIP 在 RS 上优缺点DR直接路由请求→LB响应→RS 直接回客户端需要RS 也配 VIP但抑制 ARP性能最高、最常用NAT请求和响应都经过 LB不需要简单但 LB 成瓶颈TUN隧道请求→LB响应→RS 直接回需要支持跨网段配置复杂生产首选 DR 模式LB 只改 MAC 不改数据包响应由 RS 直接回LB 压力最小吞吐最高。三、DR 模式架构设计------------------| 客户端 || 访问 VIP |-----------------|(VIP 192.168.1.100)|----------------- Director (LB主)| LB1 (MASTER) | 192.168.1.11 / priority 150------------------- keepalived LVS规则|----------------------| |--------------- ---------------| RS1 | | RS2 | Real Server (真实服务)| 192.168.1.21 | | 192.168.1.22 | 都配 VIP 抑制ARP| Nginx/Web | | Nginx/Web |---------------- ----------------DirectorLBLB1192.168.1.11主LB2192.168.1.12备它们跑 Keepalived LVS负责把流量分发给 RS。Real ServerRS192.168.1.21 / 192.168.1.22真正的业务服务器都配了 VIP 但抑制 ARP 响应。VIP192.168.1.100。DR 模式的精髓VIP 既在 Director 上也在每个 RS 上。但 RS 通过抑制 ARP 让自己看不见VIP避免和 Director 抢应答最终只有持有 VIP 的 Director 对外响应。这样 RS 能直接用 VIP 回包因为 VIP 就在本地。四、Real Server 配置RS1、RS2 都做4.1 给 RS 绑定 VIP 并抑制 ARP编辑/etc/init.d/lvs_rs.sh或写成 systemdRS 上执行bash#!/bin/bashVIP192.168.1.100# 绑定 VIP 到回环口lo用于回包ip addr add $VIP/32 dev lo label lo:0# 抑制 ARP不对外宣告 VIP不响应 VIP 的 ARP 请求echo 1 /proc/sys/net/ipv4/conf/all/arp_ignoreecho 2 /proc/sys/net/ipv4/conf/all/arp_announceecho 1 /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 2 /proc/sys/net/ipv4/conf/lo/arp_announce# 开启路由转发echo 1 /proc/sys/net/ipv4/ip_forwardbashchmod x /etc/init.d/lvs_rs.sh/etc/init.d/lvs_rs.sharp_ignore1只回答目标 IP 是本机接口上地址的 ARP。arp_announce2尽量使用能直接路由到目标的最优本地地址。这两项是 DR 模式 RS 的标配。4.2 在 RS 上启动真实服务bashyum install -y nginxecho h1Backend from 192.168.1.21/h1 /usr/share/nginx/html/index.html # RS1echo h1Backend from 192.168.1.22/h1 /usr/share/nginx/html/index.html # RS2systemctl start nginx五、DirectorLB配置5.1 确认内核支持 ip_vsbashmodprobe ip_vslsmod | grep ip_vs5.2 安装并让 Keepalived 管理 LVSbashyum install -y keepalived ipvsadmipvsadm -L -n # 查看 LVS 规则5.3 keepalived.confLB 主节点Keepalived 通过virtual_server块管理 LVS核心配置如下confglobal_defs {router_id KEEPALIVED_LB1}vrrp_instance VI_LB {state MASTERinterface eth0virtual_router_id 90priority 150advert_int 1authentication {auth_type PASSauth_pass Lvs8848}unicast_src_ip 192.168.1.11unicast_peer {192.168.1.12}virtual_ipaddress {192.168.1.100/24 dev eth0 label eth0:0}track_interface {eth0}}# LVS 负载均衡规则这是 Keepalived 管 LVS 的核心virtual_server 192.168.1.100 80 {delay_loop 6 # 健康检查间隔秒lb_algo rr # 调度算法rr轮询, wlc加权最少连接lb_kind DR # 工作模式DRpersistence_timeout 60 # 会话保持时间秒0关闭protocol TCP # 协议 TCP / UDPreal_server 192.168.1.21 80 {weight 1 # 权重TCP_CHECK { # 健康检查方式connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 192.168.1.22 80 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3}}}5.4 备份 LB 节点配置复制主节点配置改四处router_id KEEPALIVED_LB2state BACKUPpriority 100unicast_src_ip 192.168.1.12unicast_peer { 192.168.1.11 }virtual_server段保持完全一致LB 主备管理同一套 LVS 规则。5.5 启动bashkeepalived -tsystemctl start keepalivedsystemctl enable keepalived六、验证负载均衡 健康检查 高可用6.1 查看 LVS 规则是否生效bashipvsadm -L -n# 输出示例IP Virtual Server version 1.2.1Prot LocalAddress:Port Scheduler Flags- RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 192.168.1.100:80 rr- 192.168.1.21:80 Route 1 0 0- 192.168.1.22:80 Route 1 0 0看到两条RouteDR 模式且均为Route转发说明 LVS 规则已加载。6.2 验证负载均衡bash# 多次访问 VIP应轮询到两台 RSfor i in $(seq 1 6); do curl -s http://192.168.1.100; echo; done# 输出应交替出现# Backend from 192.168.1.21# Backend from 192.168.1.226.3 验证健康检查RS 宕机自动摘除bash# 停掉 RS1 的 nginxssh 192.168.1.21 systemctl stop nginx# 稍等delay_loop 6 秒内再查 LVS 规则ipvsadm -L -n# RS1 应被移除只剩 RS2流量自动全部转向 RS2RS1 恢复 nginx 后自动加回。6.4 验证 Director 高可用LB 主宕机bash# 停掉 LB1 的 keepalived 或直接断网systemctl stop keepalived # 或 systemctl stop network观察 LB2bashtail -f /var/log/messages | grep -i keepalived# 应出现 Entering MASTER STATE gratuitous ARPip addr show eth0 | grep 192.168.1.100 # VIP 漂到 LB2ipvsadm -L -n # LB2 接管 LVS 规则curl -s http://192.168.1.100 # 业务仍正常轮询两台RSVIP 漂移 LVS 规则由新主接管对外完全无感负载均衡服务不中断。七、关键参数速查与排障7.1 调度算法怎么选算法说明适用rr轮询均匀分配各 RS 性能相当wrr加权轮询RS 性能不一wlc加权最少连接长连接场景如数据库sh / dh源/目标地址哈希需固定节点、会话保持7.2 健康检查方式方式说明TCP_CHECK建 TCP 连接探测端口HTTP_GET请求 URL 并校验状态码/内容MISC_CHECK执行自定义脚本7.3 排障要点现象处理RS 不参与转发检查 RS 的 arp_ignore/arp_announce、是否绑定 lo:0VIP ping 不通Director 上 VIP 是否绑定ip addr确认LVS 规则没生效modprobe ip_vskeepalived -t 校验访问出现 502/超时看 RS nginx 是否起、健康检查是否通过两台 LB 都持 VIP心跳不通改单播或放行 VRRP八、总结Keepalived LVSDR 模式是把负载均衡和高可用合二为一的生产级方案LVS 负责转发virtual_server段定义调度算法、RS 列表、健康检查。Keepalived 负责 HAvrrp_instance段让两台 Director 主备VIP 自动漂移。RS 负责回包绑定 lo:0 抑制 ARP实现 DR 模式最高性能。一套配置解决LB HA两个问题是四层高并发的经典选择。如果后面需要更细的七层能力再在前端叠加 Nginx 即可。本文为 Keepalived 高可用系列第 5 篇。下一篇完结篇Keepalived 脑裂专题与防脑裂实战。