跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

怎么在Linux利用LVS实现四层高并发负载均衡集群

LVS+ NAT高并发易丢包因调度器单点瓶颈致nf_conntrack耗尽;应优先用DR模式,正确配置lo绑定VIP、arp_ignore/arp_announce及rp_filter关闭,并合理设置timeout与persistence参数。 为什么直接用 LVS + NAT 模式在高并发下容易丢包 因为所有流量都经过 LVS 调度器转发,它既是入口也是出口,网卡和连接跟踪表(
nf_conntrack
)极易成为瓶颈。特别是短连接高频场景,
nf_conntrack_max
耗尽后新连接直接被丢弃,错误现象常表现为客户端超时或
Connection refused
,但后端服务实际正常。 实操建议: 优先选
DR
(Direct Routing)模式:LVS 仅改目标 MAC,响应流量绕过调度器,吞吐量可接近物理网卡极限 确保所有 Real Server 和 LVS 在同一二层网络(同 VLAN / 同交换机),且 Real Server 的 lo 接口绑定 VIP(如
ip addr add 192.168.10.100/32 dev lo
),同时禁用 ARP 响应:
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
和
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
不要在 Real Server 上配置 VIP 到 eth0 —— 这会导致 ARP 冲突,LVS 转发失败 ipvsadm 添加真实服务器时 timeout 和 persistence 参数怎么设
timeout
控制连接空闲超时(单位秒),默认 900(15 分钟)。高并发短连接场景下必须调小,否则连接跟踪表堆积;而
persistence
(
-p
)用于会话保持,但它是基于源 IP 的粗粒度绑定,不是“用户登录态”,别误当 session stickiness 用。 实操建议: HTTP 短连接集群:设
timeout 60
,避免
nf_conntrack
占满 需要会话保持的 HTTPS 或长连接服务(如 WebSocket),才加
-p 300
(5 分钟),但注意这会降低负载均衡效果 别混用
-p
和
-M
(fwmark 持久化):后者需配合 iptables mark,调试成本高,普通业务不推荐 Real Server 上为什么收不到 LVS 转发的包 最常见原因是 Real Server 的内核参数未关闭反向路径过滤(
rp_filter
)。DR 模式下,包目的 IP 是 VIP,但入口网卡是 eth0,而 VIP 绑在 lo,内核默认按路由表反查源接口,发现不匹配就丢弃。 CentOS Linux 7.9.2009 CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。 下载 实操建议: 临时关闭:
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
和
echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
永久生效:在
/etc/sysctl.conf
加
net.ipv4.conf.all.rp_filter = 0
和
net.ipv4.conf.eth0.rp_filter = 0
,然后
sysctl -p
验证是否生效:抓包看
tcpdump -i eth0 host 192.168.10.100
是否能捕获到请求包;若无,先查
rp_filter
,再查 lo 上 VIP 是否已添加、ARP 参数是否正确 LVS 调度器本身挂了怎么办 LVS 调度器单点故障是 DR/NAT 模式天然缺陷。不能靠 keepalived 就以为万事大吉 —— 它只解决 VIP 飘移,没解决健康检查盲区:比如 LVS 进程僵死但 keepalived 仍认为 OK,或网卡软中断 CPU 占满导致无法转发。 实操建议: keepalived 的
vrrp_script
必须检测
ipvsadm -Ln
输出是否含预期规则,而非只 ping 自己 加轻量级外部探针:用 cron 每 5 秒跑一次
curl -s --connect-timeout 1 http://192.168.10.100/health | grep ok
,失败则强制
systemctl restart keepalived
生产环境建议至少部署两台 LVS 调度器,并用 BGP Anycast 或 DNS 轮询兜底,别把全部鸡蛋放一个 VIP 里 DR 模式下,Real Server 的网络配置细节比 LVS 命令本身更容易出问题,尤其是
arp_ignore
和
rp_filter
这两个开关,漏掉任意一个,集群就静默失效。

相关文章