您的位置:首页 > 路由器知识路由器知识
2025年超详细LVSDR模式实战指南:从入门到精通的负载均衡配置手册
2026-04-12人已围观
2025年超详细LVS DR模式实战指南:从入门到精通的负载均衡配置手册
什么是LVS DR模式?用生活例子讲明白
想象你去一家超级火爆的网红奶茶店,门口有个精明的店长(LVS服务器),店内有多个制作台(后端服务器)。当你(客户端)点单时,店长并不亲自做奶茶,而是根据哪个制作台空闲,直接把你的订单小票(数据包)转给对应的制作台。制作台做好奶茶后,直接递给你,不需要再经过店长。这种"店长只分配任务,制作台直接服务顾客"的模式,就是LVS的DR(直接路由)模式。
LVS(Linux Virtual Server)本质上是Linux内核自带的负载均衡器,就像给服务器集群装了个智能"流量分配器"。它主要有三种工作模式:NAT模式、DR模式和TUN模式。其中DR模式性能最强,因为它只改数据包的MAC地址,不碰IP头,转发效率超高,能轻松扛住每秒数十万的请求。
为什么要选择DR模式?三大核心优势
1. 性能天花板最高:DR模式下,只有请求报文经过LVS服务器,响应报文直接从后端服务器回给客户端,LVS不会成为瓶颈。实测显示,DR模式的PPS(每秒数据包处理量)比NAT模式高3-5倍。
2. 服务器负载更均衡:支持轮询、加权轮询、最少连接等多种调度算法,能根据后端服务器性能灵活分配请求。比如给配置高的服务器设置更高权重,让它多干活。
3. 对网络环境要求低:只要LVS和后端服务器在同一个局域网就行,不需要复杂的网络拓扑。不像TUN模式需要专门的隧道支持,也不像NAT模式要求LVS做网关。
准备工作:硬件、系统与网络环境配置
最低硬件配置要求
- LVS服务器:2核4G内存起步,网卡建议千兆以上。如果你的网站日活百万级,建议4核8G配置。
- 后端服务器:根据业务需求配置,Web服务器2核2G足够,数据库服务器建议4核8G以上。
- 网络设备:所有服务器必须在同一局域网,交换机支持MAC地址学习(现在的交换机基本都支持)。
系统环境准备(以CentOS 7为例)
所有服务器都要执行这些操作:
```bash
关闭防火墙和SELinux,生产环境可按需配置规则
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
安装必要工具
yum install -y net-tools vim wget
```
网络拓扑规划
我们用以下网络配置举例,你需要根据自己的实际环境修改IP地址:
- LVS服务器(DS):
- DIP(物理网卡IP):172.30.100.111
- VIP(虚拟服务IP):172.30.100.1(这个IP就是用户访问的地址)
- 后端服务器1(RS1):
- RIP(物理网卡IP):172.30.100.126
- VIP(回环网卡IP):172.30.100.1(和LVS的VIP一样)
- 后端服务器2(RS2):
- RIP(物理网卡IP):172.30.100.127
- VIP(回环网卡IP):172.30.100.1(和LVS的VIP一样)
从零开始配置:LVS服务器部署步骤
第一步:加载LVS内核模块
LVS已经是Linux内核的一部分,我们只需要加载它:
```bash
加载ip_vs模块
modprobe ip_vs
查看模块是否加载成功
lsmod | grep ip_vs
查看LVS版本信息
cat /proc/net/ip_vs
```
如果看到类似`IP Virtual Server version 1.2.1 (size=4096)`的输出,说明加载成功了。
第二步:安装LVS管理工具ipvsadm
ipvsadm是管理LVS的命令行工具,就像操作路由器用的命令行:
```bash
CentOS系统安装
yum install -y ipvsadm
Ubuntu系统安装
apt-get install -y ipvsadm
```
安装完成后,先别急着配置,我们需要先准备好VIP。
第三步:配置VIP地址
VIP是用户访问的入口,必须绑定在LVS服务器的物理网卡上:
```bash
在物理网卡上创建虚拟接口,绑定VIP
ifconfig eth0:0 172.30.100.1 broadcast 172.30.100.1 netmask 255.255.255.255 up
添加VIP路由
route add -host 172.30.100.1 dev eth0:0
```
> 注意:这里的`eth0`是你的物理网卡名,有些人的系统可能叫`ens33`或`enp0s3`,用`ifconfig`命令可以查看。子网掩码必须是32位(255.255.255.255),广播地址和VIP相同。
第四步:编写LVS配置脚本
手动敲命令太麻烦,我们写个脚本一键配置:
```bash
!/bin/bash
清除已有规则
ipvsadm -C
启用IP转发(DR模式其实不需要,但开着也无妨)
echo 1 > /proc/sys/net/ipv4/ip_forward
定义变量
VIP="172.30.100.1:80" VIP和端口
RS1="172.30.100.126:80" 后端服务器1
RS2="172.30.100.127:80" 后端服务器2
创建虚拟服务,使用加权轮询算法(wrr)
ipvsadm -A -t $VIP -s wrr
添加后端服务器,指定DR模式(-g),权重都为1
ipvsadm -a -t $VIP -r $RS1 -g -w 1
ipvsadm -a -t $VIP -r $RS2 -g -w 1
保存配置
ipvsadm -S > /etc/sysconfig/ipvsadm
查看配置
ipvsadm -Ln
```
给脚本加执行权限并运行:
```bash
chmod +x lvs_dr_setup.sh
./lvs_dr_setup.sh
```
运行成功后,会看到类似这样的输出:
```
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.30.100.1:80 wrr
-> 172.30.100.126:80 Route 1 0 0
-> 172.30.100.127:80 Route 1 0 0
```
后端服务器配置:关键在ARP抑制
为什么要配置回环网卡VIP?
这是DR模式最容易让人困惑的地方:为什么后端服务器也要配置VIP?因为当LVS把请求转发给后端服务器时,数据包的目标IP还是VIP。如果后端服务器没配置VIP,就会认为这个包不是发给自己的,直接丢弃。
但如果所有服务器都在网卡上配VIP,就会出现"ARP地址冲突"——当客户端问"谁是172.30.100.1"时,所有服务器都会抢答,导致客户端收到多个回复,不知道该发给谁。
解决办法是:把VIP配置在回环网卡(lo)上,并且禁止回环网卡响应ARP请求。这样既能让后端服务器接收VIP的数据包,又不会在网络上"暴露"自己有VIP。
详细配置步骤(两台后端服务器都要做)
第一步:在回环网卡上配置VIP
```bash
在回环网卡上创建虚拟接口,绑定VIP
ifconfig lo:0 172.30.100.1 broadcast 172.30.100.1 netmask 255.255.255.255 up
添加本地路由,让访问VIP的数据包走回环网卡
route add -host 172.30.100.1 dev lo:0
```
第二步:修改ARP内核参数(重中之重)
这一步是DR模式的核心秘密,必须严格配置:
```bash
配置arp_ignore:1表示只响应目标IP是本机物理网卡IP的ARP请求
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
配置arp_announce:2表示发送ARP请求时,优先使用请求目标网段的本地IP作为源IP
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
```
> 通俗解释:`arp_ignore=1`让服务器"装聋作哑",收到VIP的ARP查询假装没听见;`arp_announce=2`让服务器"谨言慎行",对外宣告IP时只说自己的物理网卡IP,不提回环网卡上的VIP。
第三步:编写后端服务器配置脚本
同样,我们把这些命令写成脚本,方便以后维护:
```bash
!/bin/bash
VIP="172.30.100.1"
配置回环网卡VIP
ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
route add -host $VIP dev lo:0
配置ARP参数
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
```
保存为`lvs_rs_setup.sh`,加执行权限运行。
第四步:安装测试服务(以Nginx为例)
为了测试负载均衡是否生效,我们在两台后端服务器上安装Nginx,并设置不同的首页:
```bash
安装Nginx
yum install -y nginx
后端服务器1设置首页内容
echo "
Server 172.30.100.126
" > /usr/share/nginx/html/index.html后端服务器2设置首页内容
echo "
Server 172.30.100.127
" > /usr/share/nginx/html/index.html启动Nginx
systemctl start nginx && systemctl enable nginx
```
验证配置:一步步确认是否成功
第一步:检查LVS规则是否生效
在LVS服务器上执行:
```bash
ipvsadm -Ln
```
正常输出应该包含我们配置的VIP和后端服务器IP,权重(Weight)都是1。
第二步:测试VIP是否能访问
在客户端电脑上访问`http://172.30.100.1`,应该能看到后端服务器的页面。多刷新几次,如果能交替显示"Server 172.30.100.126"和"Server 172.30.100.127",说明轮询算法生效了。
第三步:抓包验证数据包流向(高级验证)
在LVS服务器上抓包,查看是否只有请求没有响应:
```bash
tcpdump -i eth0 host 172.30.100.1 -nn
```
正常情况下,应该只能看到`IP 客户端IP > 172.30.100.1: HTTP`的请求包,看不到响应包(因为响应包直接从后端服务器回客户端了)。
在后端服务器上抓包,应该能看到目标MAC是自己,但目标IP是VIP的数据包:
```bash
tcpdump -i eth0 host 172.30.100.1 -nn
```
性能优化:让你的LVS集群跑得更快
选择合适的调度算法
LVS支持多种调度算法,不同场景选不同的:
- 轮询(rr):请求按顺序分给后端服务器,适合所有服务器性能差不多的情况。
- 加权轮询(wrr):给性能好的服务器设置高权重,比如配置高的服务器权重设为2,普通的设为1,请求会按2:1分配。
- 最少连接(lc):优先分配给连接数少的服务器,适合请求处理时间长短不一的场景(比如电商网站,有的用户浏览商品,有的用户下单付款)。
修改调度算法很简单,改`ipvsadm -A`命令的`-s`参数就行:
```bash
改为加权轮询算法
ipvsadm -E -t 172.30.100.1:80 -s wrr
修改后端服务器权重
ipvsadm -e -t 172.30.100.1:80 -r 172.30.100.126:80 -g -w 2
ipvsadm -e -t 172.30.100.1:80 -r 172.30.100.127:80 -g -w 1
```
调整Linux内核参数
在LVS服务器上修改`/etc/sysctl.conf`,添加以下参数:
```bash
开启SYN cookies,防止SYN攻击
net.ipv4.tcp_syncookies = 1
最大TCP连接数
net.core.somaxconn = 65535
增加TCP连接跟踪表大小
net.netfilter.nf_conntrack_max = 1048576
减少TIME_WAIT连接数量
net.ipv4.tcp_max_tw_buckets = 20000
```
执行`sysctl -p`使配置生效。
配置连接超时时间
默认LVS会保持连接300秒,对于高并发网站来说太长了,会占用大量连接资源。可以缩短超时时间:
```bash
修改TCP连接超时时间(单位:秒)
ipvsadm --set 30 10 60
```
参数含义:`--set tcp tcpfin udp`,分别是TCP连接超时、TCP FIN包超时、UDP超时。
高可用配置:用Keepalived避免单点故障
LVS服务器本身可能会挂掉,这时候整个系统就瘫痪了。解决办法是用Keepalived做LVS的主备切换,就像给皇帝配个太子,皇帝不行了太子上。
安装Keepalived
```bash
yum install -y keepalived
```
配置主LVS服务器(172.30.100.111)
编辑`/etc/keepalived/keepalived.conf`:
```conf
! Configuration File for keepalived
global_defs {
router_id LVS_MASTER
}
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 {
172.30.100.1/32 dev eth0 label eth0:0
}
}
virtual_server 172.30.100.1 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 0
protocol TCP
real_server 172.30.100.126 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 172.30.100.127 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
```
配置备LVS服务器(172.30.100.112)
大部分配置和主服务器一样,只需要改`state`、`priority`和`router_id`:
```conf
! Configuration File for keepalived
global_defs {
router_id LVS_BACKUP
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90 优先级比主服务器低
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.30.100.1/32 dev eth0 label eth0:0
}
}
virtual_server部分和主服务器完全一样,省略...
```
启动Keepalived后,VIP会自动飘在主服务器上。如果主服务器挂了,备服务器会自动接管VIP,整个过程大概1-2秒,用户几乎感知不到。
新手避坑清单:10个最容易踩的陷阱
1. VIP子网掩码不是32位:必须是`255.255.255.255`,否则会导致ARP广播范围错误。
2. 后端服务器网关指向LVS:DR模式下后端服务器网关应该指向真实网关,不是LVS服务器。
3. arp_ignore和arp_announce参数没配置:这是最常见的错误,会导致VIP冲突,必须严格设为1和2。
4. 回环网卡VIP配置在物理网卡上:后端服务器的VIP必须在lo接口,不能在物理网卡。
5. LVS和后端服务器不在同一网段:DR模式要求所有服务器在同一局域网,否则MAC地址转发会失败。
6. 防火墙没关闭或没开规则:至少要开放80端口,最好先关闭防火墙测试,成功后再开规则。
7. 使用了不支持DR模式的云服务器:有些云服务商(如AWS)的基础网络不支持自定义MAC地址,会导致DR模式失效。
8. 没给VIP添加路由:LVS和后端服务器都需要添加VIP的主机路由,否则数据包不知道怎么走。
9. 用ifconfig配置但没保存:ifconfig配置重启后会丢失,必须写成脚本或配置到网络接口文件。
10. 没测试后端服务器直接访问VIP的情况:在后端服务器上执行`curl http://172.30.100.1`,应该能访问到自己的页面。
常见问题解决:5个经典故障案例
问题1:访问VIP提示无法连接
排查步骤:
1. 检查LVS服务器是否配置了VIP:`ifconfig eth0:0`
2. 检查LVS规则是否正确:`ipvsadm -Ln`
3. 检查后端服务器Nginx是否启动:`systemctl status nginx`
4. 检查LVS到后端服务器的网络连通性:`ping 172.30.100.126`
可能原因:LVS规则没配置,或后端服务器没启动服务。
问题2:只能访问到一台后端服务器
排查步骤:
1. 检查LVS调度算法是否正确:`ipvsadm -Ln`应该有`wrr`或`rr`
2. 检查后端服务器权重是否都是0:权重为0的服务器不会被分配请求
3. 清除浏览器缓存或用`curl`测试:浏览器可能有缓存
可能原因:权重配置错误,或用了基于源IP的调度算法(如sh)。
问题3:VIP冲突,偶尔能访问偶尔不能
排查步骤:
1. 在客户端执行`arp -a | findstr 172.30.100.1`(Windows)或`arp -n | grep 172.30.100.1`(Linux)
2. 查看VIP对应的MAC地址是否稳定(应该是LVS服务器的MAC)
3. 在后端服务器检查arp_ignore参数:`cat /proc/sys/net/ipv4/conf/all/arp_ignore`
可能原因:后端服务器的ARP抑制参数没配置好,导致客户端收到多个ARP响应。
问题4:LVS切换后服务不可用
排查步骤:
1. 检查备LVS是否接管了VIP:`ifconfig`
2. 检查备LVS的ipvs规则:`ipvsadm -Ln`
3. 检查Keepalived日志:`tail -f /var/log/messages | grep Keepalived`
可能原因:备LVS的ipvs规则没配置,或VIP飘移失败。
问题5:高并发下LVS服务器CPU占用过高
排查步骤:
1. 用`top`查看哪个进程占用CPU高,通常是`softirq`(软中断)
2. 检查LVS服务器的网卡是否跑满:`ifconfig eth0`看RX/TX packets
3. 检查调度算法是否合理:`ipvsadm -Ln`
解决办法:
- 升级服务器CPU,至少4核以上
- 优化内核参数,增加网络缓冲区:
```bash
echo "net.core.rmem_max = 16777216" >> /etc/sysctl.conf
echo "net.core.wmem_max = 16777216" >> /etc/sysctl.conf
sysctl -p
```
- 如果PPS超过10万,考虑用DPVS(基于DPDK的LVS)
10个实用小技巧:让你成为LVS高手
1. 规则保存与恢复:`ipvsadm -S > /etc/sysconfig/ipvsadm`保存规则,`ipvsadm -R < /etc/sysconfig/ipvsadm`恢复。
2. 查看连接数:`ipvsadm -Ln --stats`查看各后端服务器的连接统计,`ipvsadm -Ln --rate`查看速率统计。
3. 临时禁用后端服务器:`ipvsadm -e -t 172.30.100.1:80 -r 172.30.100.126:80 -g -w 0`,把权重设为0。
4. 设置连接持久化:`ipvsadm -A -t 172.30.100.1:80 -s rr -p 60`,表示60秒内同一客户端的请求会发到同一台后端服务器,适合购物车等场景。
5. 监控LVS性能:安装`collectd`和`grafana`,配置ipvs插件,可视化监控连接数、吞吐量等指标。
6. 批量配置后端服务器:用Ansible批量执行配置脚本,几台到几百台服务器都能轻松搞定。
7. 自动重启服务:把LVS和Keepalived配置成系统服务,确保开机启动:`systemctl enable ipvsadm keepalived`。
8. 日志记录:修改`/etc/sysconfig/ipvsadm`,添加`IPVSADM_OPTIONS="-l"`开启日志,日志在`/var/log/ipvsadm`。
9. 使用加权轮询处理服务器性能差异:给高配服务器设置更高权重,如`-w 3`,低配设`-w 1`。
10. 定期清理连接:对于短连接服务(如HTTP),可以定期执行`ipvsadm -C && sh /path/to/lvs_script.sh`清理无效连接。
长期使用体验:LVS DR模式的优缺点总结
优点:
1. 稳定性超强:LVS是内核模块,比Nginx等应用层负载均衡器稳定得多,我见过连续运行两年不重启的LVS服务器。
2. 性能损耗极低:只改MAC地址,转发效率接近硬件负载均衡器,比Nginx负载均衡性能高3-5倍。
3. 配置简单:核心就是LVS和后端服务器的几个配置文件,学会后维护成本很低。
缺点:
1. 不支持端口转换:DR模式不能像NAT模式那样改端口,比如把80端口转发到后端的8080端口。
2. 不支持跨网段后端服务器:所有服务器必须在同一局域网,限制了架构灵活性。
3. 管理界面缺失:只有命令行工具,不像F5有图形界面,对新手不够友好。
话说回来,对于中大型网站,LVS DR模式仍然是性价比最高的负载均衡方案。它可能不是最先进的,但绝对是最稳定、最经得住考验的——毕竟这是Linux内核自带的功能,已经过近20年的市场验证。
如果你正在搭建高并发网站,又不想花大价钱买硬件负载均衡器,LVS DR模式绝对是你的不二之选。按照本文的步骤一步步配置,即使是新手也能在1小时内搭建起一个能扛住10万并发的负载均衡集群。
最新发布
- 2025年超详细LVSDR模式实战指南:从入门到精通的负载均衡配置手册
- 2025年网站排名SEO优化五大误区解析:基于百度算法与实操数据的复盘
- 2025年超全静态路由配置指南:从新手入门到专家进阶,5大故障+10个技巧全解析
- 2025年网站SEO关键词选取指南:5大系统技巧+实用避坑要点
- 2025年RabbitMQ保姆级教程:从交换机队列原理到实战避坑指南
- 2025年文章关键词布局三大核心策略及实操要点解析
- 2025年最实用TP-Link路由器虚拟服务器设置指南:小白也能看懂的端口转发教程(
- 2025年搜索流量新洞察:长尾关键词实际规模超预期的运营启示
- 2025小白必看:交换机自学习算法深度拆解,从原理到实战的7000字保姆级教程
- 2025新站快速入百度视野实战:三步实现收录与排名跃迁
相关文章
- 2025年超详细LVSDR模式实战指南:从入门到精通的负载均衡配置手册
- 2025年超全静态路由配置指南:从新手入门到专家进阶,5大故障+10个技巧全解析
- 2025年RabbitMQ保姆级教程:从交换机队列原理到实战避坑指南
- 2025年最实用TP-Link路由器虚拟服务器设置指南:小白也能看懂的端口转发教程(
- 2025小白必看:交换机自学习算法深度拆解,从原理到实战的7000字保姆级教程
- 2025年SOHO路由器深度指南:从新手小白到组网大神的实战手册
- 2024静态路由实战:从基础配置到企业级负载均衡全攻略
- 2024超全双晶体管MOSFET-C积分器实战指南:从电路小白到滤波大神(含5大故障+10
- 2024必装!华为IPOP工具深度评测:小白也能玩转的10大网络神器,附避坑指南
- 2024最详STM32+ULN2003驱动步进电机指南:从0到1教你玩转28BYJ-48