1. LVS-NAT模式实验配置详解
作为企业级负载均衡的经典方案,LVS(Linux Virtual Server)的NAT模式至今仍是许多中小规模应用的首选架构。我在过去五年里为三十多家企业部署过基于LVS的解决方案,其中60%的案例都采用了NAT模式。这种模式最大的优势在于真实服务器可以完全隐藏在内网,只需要负载均衡器拥有公网IP,既节省了IP资源又提升了安全性。
今天要分享的配置方案经过生产环境验证,支持单台LVS服务器处理8000+ QPS的HTTP请求。与DR模式相比,NAT模式对网络设备没有特殊要求,普通交换机即可部署,特别适合从传统架构向负载均衡架构过渡的场景。下面我会从内核参数调优到具体命令逐层解析,并分享几个只有踩过坑才知道的注意事项。
2. 环境准备与拓扑设计
2.1 基础网络规划
典型的LVS-NAT架构包含三个角色:
- 负载均衡器(Director):双网卡配置,eth0连接公网(假设IP为203.0.113.10),eth1连接内网(192.168.100.1)
- 真实服务器(Real Server):单网卡配置(192.168.100.11-13),默认网关指向Director的内网IP(192.168.100.1)
- 客户端:任意互联网访问源
关键点:必须确保Real Server的默认网关指向Director,这是NAT模式正常工作的前提。我遇到过不止一个案例因为网关配置错误导致流量有去无回。
2.2 内核参数调优
在Director上需要调整以下参数(写入/etc/sysctl.conf):
net.ipv4.ip_forward = 1 net.ipv4.vs.conntrack = 1 net.ipv4.vs.expire_nodest_conn = 1执行sysctl -p生效后,建议用以下命令验证:
cat /proc/sys/net/ipv4/ip_forward # 应返回13. 核心配置步骤
3.1 安装ipvsadm工具
在Director上执行:
yum install ipvsadm -y # CentOS/RHEL apt-get install ipvsadm -y # Ubuntu/Debian安装后建议设置开机自启:
systemctl enable ipvsadm && systemctl start ipvsadm3.2 配置虚拟服务
假设我们要暴露HTTP服务(VIP:203.0.113.10:80),后端有三台Real Server(192.168.100.11-13:8080):
ipvsadm -A -t 203.0.113.10:80 -s rr ipvsadm -a -t 203.0.113.10:80 -r 192.168.100.11:8080 -m ipvsadm -a -t 203.0.113.10:80 -r 192.168.100.12:8080 -m ipvsadm -a -t 203.0.113.10:80 -r 192.168.100.13:8080 -m参数说明:
-A:添加虚拟服务-t:指定TCP服务-s rr:采用轮询(Round Robin)调度算法-a:添加Real Server-m:启用NAT模式(Masquerading)
3.3 持久化配置
为防止服务重启丢失配置,执行:
ipvsadm-save > /etc/sysconfig/ipvsadm # CentOS/RHEL ipvsadm-save > /etc/ipvsadm.rules # Ubuntu/Debian4. 高级调优与监控
4.1 连接超时设置
默认TCP空闲超时为900秒,对于Web应用建议调整为:
ipvsadm --set 300 60 300三个参数分别表示:
- TCP会话超时(秒)
- TCP FIN状态超时
- UDP超时
4.2 健康检查方案
原生LVS缺乏健康检查机制,建议配合keepalived:
! Configuration File for keepalived global_defs { router_id LVS_DEVEL } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 203.0.113.10 } } virtual_server 203.0.113.10 80 { delay_loop 6 lb_algo rr lb_kind NAT persistence_timeout 50 protocol TCP real_server 192.168.100.11 8080 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 8080 } } # 其他Real Server配置类似 }5. 常见问题排查
5.1 流量不通排查步骤
检查Director的IP转发:
cat /proc/sys/net/ipv4/ip_forward验证iptables规则是否拦截:
iptables -L -n -v检查Real Server的网关配置:
ip route show | grep default
5.2 性能瓶颈分析
当出现性能问题时,重点关注:
watch -n 1 ipvsadm -ln --stats关键指标:
- Conns:连接数
- InPkts:入站包
- OutPkts:出站包
6. 生产环境建议
经过多个项目实践,我总结出以下经验:
- 对于突发流量场景,建议将调度算法改为
wlc(加权最小连接) - NAT模式会修改源IP,如需获取真实客户端IP,需要在Real Server上安装
toa内核模块 - 单个VIP建议后端Real Server不超过20台,否则会影响哈希表性能
- 监控方面建议采集:
- 每秒新建连接数(CPS)
- 活动连接数
- Director的CPU软中断(softirq)使用率
最后分享一个真实案例:某电商网站在大促期间出现LVS性能下降,最终发现是因为NAT模式下没有开启nf_conntrack_tcp_be_liberal参数,导致大量无效连接占用哈希表。解决方法是在Director上添加:
echo 1 > /proc/sys/net/netfilter/nf_conntrack_tcp_be_liberal