IPtables 实现负载均衡
在Linux系统中,使用iptables实现负载均衡主要通过NAT(网络地址转换)和statistic模块完成。以下是两种常见负载均衡策略的配置方法:
一、随机负载均衡(Random Mode)
通过--probability参数分配流量概率,适用于后端服务器性能相近的场景:
# 清空现有规则(可选)
iptables -t nat -F
# 配置3台后端服务器的随机分流规则
iptables -t nat -A PREROUTING -p tcp --dport 80 \
-m statistic --mode random --probability 0.33 -j DNAT --to-destination 10.0.0.2:80
iptables -t nat -A PREROUTING -p tcp --dport 80 \
-m statistic --mode random --probability 0.5 -j DNAT --to-destination 10.0.0.3:80
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.0.0.4:80
说明:
概率计算公式:p=1/(n−i+1)(n为服务器总数,i为规则序号)
规则顺序不可调换,否则概率分配失效
二、轮询负载均衡(Round Robin Mode)
通过--every和--packet参数实现按包轮询分发:
清空现有规则(可选)
iptables -t nat -F
配置3台后端服务器的轮询规则
iptables -t nat -A PREROUTING -p tcp --dport 80 \
-m statistic --mode nth --every 3 --packet 0 -j DNAT --to-destination 10.0.0.2:80
iptables -t nat -A PREROUTING -p tcp --dport 80 \
-m statistic --mode nth --every 2 --packet 0 -j DNAT --to-destination 10.0.0.3:80
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.0.0.4:80
说明:
--every指定每n个包触发一次规则,--packet指定起始包序号
规则顺序需保持--every值递减,否则轮询失效
三、通用配置步骤
启用IP转发编辑/etc/sysctl.conf,设置:
net.ipv4.ip_forward = 1
应用配置:sysctl -p
配置SNAT(源地址转换)确保返回流量正确路由:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
(eth0为外网接口,根据实际情况调整)
保存规则
Ubuntu/Debian:iptables-save > /etc/iptables/rules.v4
CentOS/RHEL:service iptables save
四、注意事项
规则顺序:iptables按规则顺序匹配,需严格按概率或轮询参数排序
性能限制:iptables适合小规模负载均衡,高并发场景建议使用HAProxy或Nginx
健康检查:需自行实现后端服务器健康检查,避免故障节点接收流量
通过上述配置,可实现基于iptables的简单负载均衡。实际生产环境中,建议结合ipvsadm或专用负载均衡工具优化性能。

浙公网安备 33010602011771号