一、故障分类与排查思路
LVS出问题,通常分四类:
-
网络层问题:比如VIP(虚拟IP)ping不通,或者后端服务器网络不通。
-
负载均衡问题:比如流量分配不均、会话保持失效、调度算法出问题。
-
服务层问题:比如后端服务挂了、健康检查没通过、端口冲突。
-
高可用问题:比如主备切换失败、脑裂(两台同时抢VIP)、ARP混乱。
二、常用命令速查
-
看网络 :
ipvsadm -Ln、ping VIP、ip a -
看服务 :
ipvsadm -L -c、netstat -tunlp -
看统计 :
ipvsadm -l --stats、ss -s -
看健康 :
curl -I VIP、日志在/var/log/下 -
看ARP :
arp -an、tcpdump arp
三、几个典型问题怎么解决
案例1:VIP访问不了
现象:客户端连不上VIP,但直接访问后端服务器没问题。
排查步骤:
-
看VIP有没有绑定:
ip addr show | grep VIP,没有就手动加。 -
看ipvsadm服务是不是正常。
-
看ARP抑制配置对不对(
arp_ignore应为1)。
原因:服务器重启后VIP没自动绑定。
解决:在keepalived配置文件里写好VIP,重启服务。
案例2:流量分配不均
现象:10台后端服务器,3台忙得要死,其他闲着。
原因:所有服务器权重一样,但性能不同。
解决:调权重,性能好的给高权重,差的给低权重。
案例3:主备切换失败
现象:主节点挂了,备节点没接上VIP。
原因:网线松了,keepalived检测不到网络。
解决:修网线,加个监控脚本检测网卡状态,失败就降权触发切换。
四、配置优化建议
-
开启IP转发:
echo 1 > /proc/sys/net/ipv4/ip_forward -
关闭ARP响应(防冲突):设置
arp_ignore和arp_announce -
在RS上也要配置VIP,但要绑在
lo上,防止抢VIP -
调度算法用
wrr更灵活
五、调试技巧
-
看LVS连接状态:
ipvsadm -Lcn -
抓包分析:
tcpdump host VIP -
看CPU中断分布:
cat /proc/interrupts -
调大连接表:
echo 4096 > /proc/sys/net/ipv4/vs/conn_tab_bits
六、Keepalived配置要点
-
主备节点配置基本相同,只是
state和priority不同 -
健康检查可以用
TCP_CHECK,超时时间设短一点 -
会话保持时间(persistence_timeout)别设太长,否则流量不均衡
七、自动化脚本
写个脚本定期检查后端服务是否正常,不正常的就从LVS里踢掉,恢复后再加回来。这样能自动处理小故障。
八、监控告警
可以用Prometheus监控LVS的连接数、后端健康状态、VIP是否可达。超过阈值就报警,比如:
-
连接数飙升
-
后端挂了
-
VIP ping不通
九、常见问题速查表
| 问题 | 检查点 | 解决 |
|---|---|---|
| VIP不通 | ARP、网卡 | 配好ARP,绑VIP |
| 后端收不到请求 | 路由、lo接口 | RS也要绑VIP |
| 主备不切换 | keepalived、网络 | 加双心跳线 |
| 部分客户端连不上 | 会话保持、防火墙 | 调timeout,放行端口 |
| 性能差 | 连接表、CPU | 调大连接表,开启RSS |
十、灾备恢复流程
-
主节点挂了,手动切到备:停主节点的keepalived,备节点恢复配置。
-
恢复配置:从备份里恢复ipvsadm和keepalived配置。
-
验证:检查VIP绑定,curl测试服务。
总结一句话:
LVS出问题,先看网络,再看配置,最后看后端服务。用好命令、配好监控、写好脚本,就能稳稳当当跑下去。