LVS(Linux Virtual Server)是Linux内核自带的负载均衡方案,转发性能远超Nginx等应用层代理,常用于高并发Web、接口网关等场景。本文以DR模式为主线,从网络规划、节点配置到Keepalived整合与故障切换验证,给出完整的服务器集群部署过程,配置在Rocky Linux 9上可验证执行。
LVS三种工作模式对比:NAT、DR与TUN
| 模式 | 转发方式 | 后端要求 | 适用场景 |
|---|---|---|---|
| NAT | 改写IP与端口,响应经负载均衡器回传 | 无特殊要求 | 后端规模小、同网段 |
| DR | 改写MAC地址转发,响应直连客户端 | 后端绑定VIP并抑制ARP | 高吞吐Web集群,同二层网络 |
| TUN | IP隧道封装转发 | 内核支持隧道 | 跨网段、跨机房集群 |
生产环境最常用DR模式:入站请求经过负载均衡器,出站响应由RealServer直接发回客户端,均衡器只处理一半流量,单点瓶颈被大幅压缩。
DR模式网络规划与集群IP分配
以两台均衡器加两台RealServer为例:
主负载均衡器:192.168.10.11 VIP: 192.168.10.100
备负载均衡器:192.168.10.12 VIP: 192.168.10.100
RealServer1 :192.168.10.20
RealServer2 :192.168.10.22
VIP需要同时绑定在负载均衡器和所有RealServer上,RealServer的VIP只配在回环接口,通过ARP抑制保证不对外响应,避免VIP冲突。
RealServer节点配置:VIP绑定与ARP抑制
每台RealServer绑定回环地址并调整ARP内核参数,让VIP对客户端不可见:
# 在RealServer上执行
ip addr add 192.168.10.100/32 dev lo
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
# 写入开机自启
cat >> /etc/rc.local <<'EOF'
ip addr add 192.168.10.100/32 dev lo
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
EOF
chmod +x /etc/rc.d/rc.local
arp_ignore=1表示只响应本机网卡地址的ARP请求;arp_announce=2表示ARP应答源地址使用发送网卡的IP。两个参数配合,RealServer不会暴露自己的VIP,客户端的请求只会到达负载均衡器。
主节点安装与ipvsadm转发规则配置
yum install -y ipvsadm keepalived
# 配置转发规则:DR模式(-g),加权轮询(wrr)
ipvsadm -A -t 192.168.10.100:80 -s wrr
ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.20:80 -g -w 2
ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.22:80 -g -w 1
ipvsadm -S
-g指定DR模式,-w设置节点权重。调度算法按场景选择:后端配置均衡用rr,差异用wrr,长连接用lc,后端性能参差不齐用wlc。HTTP短连接集群默认wrr足够。
Keepalived配置:VIP漂移与后端健康检查
keepalived负责两件事:VRRP心跳实现主备切换,健康检查摘除故障节点。主节点配置:
global_defs {
router_id LVS_MASTER
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 55
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass KEEPALIVED
}
virtual_ipaddress {
192.168.10.100/24 dev ens33
}
}
virtual_server 192.168.10.100 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
protocol TCP
real_server 192.168.10.20 80 {
weight 2
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
connect_port 80
}
}
real_server 192.168.10.22 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
connect_port 80
}
}
}
备份节点配置与主节点基本相同,state改为BACKUP、priority降低到90。主节点宕机后,备份节点在心跳超时内接管VIP,并通过keepalived重新下发ipvs规则。
故障切换验证与集群压测
# 主节点停keepalived模拟故障
systemctl stop keepalived
# 在备份节点观察VIP是否接管
ip addr | grep 192.168.10.100
ipvsadm -L
# 压测验证
ab -n 100000 -c 2000 http://192.168.10.100/
验证要点:主节点掉电后VIP漂移时长是否在预期内;一台节点故障后,请求是否只转发到存活节点;恢复后权重调度是否自动归位。这套检查纳入月度演练,切换演练不能跳过。
整套方案落地后,负载均衡器单点故障切换在秒级完成。DR模式要求均衡器与后端在同一二层网络内,跨VLAN场景改用TUN或网关模式;后端业务做健康检查接口,不要用TCP_CHECK裸探端口,检查到业务层才能保证摘除的准确性。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/lvs-fu-zai-jun-heng-ji-qun-shi-zhan-dr-mo-shi-bu-shu-yu/