1. LVS-NAT模式负载均衡架构解析
IPVS(IP Virtual Server)作为Linux内核的一部分,自2.4版本起就集成在主流发行版中。NAT模式通过修改数据包的目标/源IP地址实现流量转发,其典型架构包含三个角色:
- Director:运行IPVS的核心节点,负责流量调度
- Real Server:实际处理请求的后端服务器
- VIP:对外暴露的虚拟IP地址
在NAT模式下,Director需要同时具备内外网访问能力。当客户端请求到达VIP时,Director会根据预设算法(如RR、WRR等)选择Real Server,并将目标IP改为Real Server的私有IP。回包时Real Server将响应先发回Director,再由Director将源IP改回VIP返回客户端。
关键设计要点:Director必须开启ip_forward功能,且Real Server的默认网关需指向Director的内网IP
2. 实战部署全流程
2.1 基础环境准备
以CentOS 7为例,Director和Real Server都需要执行内核参数调整:
# 所有节点关闭防火墙和SELinux systemctl stop firewalld && systemctl disable firewalld setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # Director节点开启路由转发 echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p2.2 IPVS规则配置
在Director节点安装ipvsadm管理工具:
yum install ipvsadm -y创建NAT模式的负载均衡服务(以HTTP为例):
# 添加虚拟服务(VIP:80使用轮询算法) ipvsadm -A -t 192.168.1.100:80 -s rr # 添加真实服务器(-m表示NAT模式) ipvsadm -a -t 192.168.1.100:80 -r 10.0.0.1:80 -m ipvsadm -a -t 192.168.1.100:80 -r 10.0.0.2:80 -m ipvsadm -a -t 192.168.1.100:80 -r 10.0.0.3:80 -m # 查看配置结果 ipvsadm -Ln2.3 Real Server配置
每台Real Server需要:
- 配置回环接口的VIP(防止ARP问题)
cat > /etc/sysconfig/network-scripts/ifcfg-lo:0 <<EOF DEVICE=lo:0 IPADDR=192.168.1.100 NETMASK=255.255.255.255 ONBOOT=yes EOF ifup lo:0- 修改路由使响应经过Director
route add default gw 10.0.0.254 # 假设Director内网IP是10.0.0.2543. 深度调优与监控
3.1 连接保持优化
调整IPVS连接超时参数(单位:秒):
ipvsadm --set 900 120 300 # TCP空闲/首次SYN/FIN_WAIT超时对于HTTP长连接场景,建议配合持久化服务:
ipvsadm -E -t 192.168.1.100:80 -s rr -p 6003.2 健康检查方案
原生IPVS缺乏健康检查机制,可通过keepalived实现:
virtual_server 192.168.1.100 80 { delay_loop 6 lb_algo rr lb_kind NAT persistence_timeout 60 real_server 10.0.0.1 80 { TCP_CHECK { connect_timeout 3 connect_port 80 } } }4. 典型故障排查手册
4.1 连通性检查流程
| 故障现象 | 排查命令 | 可能原因 |
|---|---|---|
| VIP无法访问 | ping 192.168.1.100 | 物理网络问题/VIP未正确配置 |
| 服务无响应 | ipvsadm -Ln | IPVS规则未生效/Real Server服务异常 |
| 单向通信 | tcpdump -i eth0 host 10.0.0.1 | Real Server路由配置错误 |
4.2 性能问题分析
- 查看当前连接分布
watch -n 1 'ipvsadm -ln --stats'- 内核参数调优
# 增加可用端口范围 echo "net.ipv4.ip_local_port_range = 1024 65000" >> /etc/sysctl.conf # 提高conntrack表大小 echo "net.netfilter.nf_conntrack_max = 1048576" >> /etc/sysctl.conf sysctl -p- Session同步问题对于高并发场景,建议在Real Server上配置:
echo "net.ipv4.vs.expire_nodest_conn = 1" >> /etc/sysctl.conf5. 生产环境注意事项
- ARP问题处理在Real Server上抑制VIP的ARP响应:
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce- 多网卡绑定优化当Director有多个NIC时,需明确指定出口设备:
ip route add default via 192.168.1.1 dev eth0 tab 100 ip rule add from 192.168.1.100/32 tab 100 priority 100- 日志记录建议启用详细日志(调试后建议关闭):
modprobe ip_vs echo "1" > /proc/sys/net/ipv4/vs/debug_level journalctl -f -k | grep IPVS实际部署中发现,当Real Server使用不同内核版本时,可能出现MTU不匹配导致的分片问题。这时需要在Director上调整:
ifconfig eth0 mtu 1400