本文基于 Linux Virtual Server(LVS)技术,完整覆盖群集基础、LVS 原理、NFS 共享存储、LVS-NAT 模式部署,保留文档全部实操代码,补充原理、选型、排错等扩展知识点,内容不重复且更易落地。
一、LVS 负载均衡群集核心基础
1.1 群集三大类型
- 负载均衡群集(LB):提升并发处理能力,分散请求,降低延迟,典型场景:Web、APP 服务。
- 高可用群集(HA):保障服务不中断,故障自动切换,典型场景:数据库、网关。
- 高性能运算群集(HPC):分布式并行计算,对标超级计算机,典型场景:科学计算、AI 训练。
补充知识点 :企业常用LB+HA 融合架构,既分流又保可用,LVS+Keepalived 是标准组合。
1.2 负载均衡三层架构
- 负载调度器(Director):唯一入口,绑定 VIP,分发请求,支持主备热备。
- 服务器池(Real Server):提供真实业务,用 RIP,只处理调度器转发的请求。
- 共享存储 :保证所有节点数据一致,Linux 环境首选NFS。
补充知识点:VIP(虚拟 IP)是群集对外统一入口,Real Server 无需暴露公网 IP。
1.3 LVS 三种工作模式
表格
| 模式 | 全称 | 结构 | 特点 | 适用场景 |
|---|---|---|---|---|
| NAT | 地址转换 | 调度器是网关,请求 / 响应都经调度器 | 仅 1 个公网 IP,安全高,配置简单 | 中小型网站、内网服务 |
| TUN | IP 隧道 | 节点分散各地,响应直接回客户端 | 跨地域,性能高,配置复杂 | 跨机房、全球分发 |
| DR | 直接路由 | 调度器与节点同网段,响应直接回客户端 | 性能最强,无隧道开销 | 大型高并发 Web 服务 |
补充知识点 :DR 模式性能>TUN>NAT,企业 90% 场景用 DR;NAT 是入门首选,最易部署。
二、LVS 核心原理与工具
2.1 LVS 内核模块
LVS 是 Linux 内核原生模块(ip_vs),无需额外编译,CentOS/openEuler 默认支持。
bash
运行
# 加载ip_vs模块
modprobe ip_vs
# 查看模块版本
cat /proc/net/ip_vs
2.2 四大负载调度算法
- 轮询(rr):请求轮流分配,不看服务器负载。
- 加权轮询(wrr):按权重分配,性能高的节点权重设大。
- 最少连接(lc):优先分给连接数最少的节点。
- 加权最少连接(wlc):结合权重 + 连接数,适配异构服务器。
补充知识点 :Web 服务首选rr/wrr ;长连接服务(如 SSH、游戏)首选lc/wlc。
2.3 ipvsadm 管理工具(全命令)
ipvsadm是 LVS 用户态管理工具,负责增删虚拟服务、节点、保存策略。
bash
运行
# 安装ipvsadm(openEuler/CentOS通用)
dnf install -y ipvsadm # openEuler
yum install -y ipvsadm # CentOS
# 查看版本
ipvsadm -v
核心命令清单
bash
运行
# 1. 清除所有原有策略
ipvsadm -C
# 2. 创建虚拟服务器(VIP+端口+算法)
ipvsadm -A -t 192.168.74.129:80 -s rr
# 3. 添加真实服务器节点(-m=NAT模式,-w=权重)
ipvsadm -a -t 192.168.74.129:80 -r 192.168.10.102:80 -m -w 1
ipvsadm -a -t 192.168.74.129:80 -r 192.168.10.103:80 -m -w 1
# 4. 查看群集状态(数字格式,不解析域名)
ipvsadm -ln
# 5. 查看客户端连接详情(排错必备)
ipvsadm -lnc
# 6. 删除单个真实节点
ipvsadm -d -r 192.168.10.103:80 -t 192.168.74.129:80
# 7. 删除整个虚拟服务器
ipvsadm -D -t 192.168.74.129:80
# 8. 保存策略(永久生效)
ipvsadm-save > /etc/sysconfig/ipvsadm
# 9. 开机自启+重启服务
systemctl enable --now ipvsadm
systemctl restart ipvsadm
补充知识点 :-m=NAT、-g=DR、-i=TUN,模式参数必须正确,否则群集失效。
三、NFS 共享存储部署(群集数据统一)
NFS 是 LVS 群集标配共享存储,保证所有 Web 节点页面 / 数据一致。
3.1 NFS 服务端配置
bash
运行
# 1. 安装依赖包
yum install -y nfs-utils rpcbind
# 2. 设置开机自启
systemctl enable nfs-server rpcbind
# 3. 创建共享目录
mkdir -p /opt/wwwroot
# 4. 配置共享规则(允许192.168.10.0/24网段读写)
echo "/opt/wwwroot 192.168.10.0/24(rw,sync,no_root_squash)" >> /etc/exports
# 5. 先启动rpcbind,再启动nfs(顺序不能错)
systemctl start rpcbind
systemctl start nfs-server
# 6. 查看本机共享目录
showmount -e
配置文件说明:
rw:读写权限;ro:只读sync:同步写入,数据安全;async:异步写入,性能高no_root_squash:客户端 root 保留本地 root 权限(生产谨慎用)
3.2 NFS 客户端(Web 节点)配置
bash
运行
# 1. 安装依赖
yum install -y nfs-utils rpcbind
systemctl enable --now rpcbind
# 2. 查看服务端共享目录
showmount -e 192.168.10.104
# 3. 手动挂载到Web根目录
mount 192.168.10.104:/opt/wwwroot /var/www/html
# 4. 开机自动挂载(/etc/fstab)
echo "192.168.10.104:/opt/wwwroot /var/www/html nfs defaults,_netdev 0 0" >> /etc/fstab
# 5. 验证挂载
df -h | grep nfs
补充知识点 :_netdev参数必须加,代表网络设备,避免开机未联网就挂载导致启动失败。
四、LVS-NAT 模式实战部署(超详细步骤)
4.1 实验环境规划
表格
| 角色 | 系统 | IP 地址 | 核心服务 |
|---|---|---|---|
| LVS 调度器 | openEuler 24.03 | 内网:192.168.10.101;外网 VIP:192.168.74.129 | ipvsadm、路由转发 |
| Web1 节点 | openEuler 24.03 | 192.168.10.102 | httpd、NFS 客户端 |
| Web2 节点 | openEuler 24.03 | 192.168.10.103 | httpd、NFS 客户端 |
| NFS 存储 | openEuler 24.03 | 192.168.10.104 | nfs-server、rpcbind |
前提条件:所有服务器关闭防火墙、SELinux
bash
运行
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
4.2 LVS 调度器配置
步骤 1:开启内核路由转发(NAT 模式必须)
bash
运行
# 临时开启
echo 1 > /proc/sys/net/ipv4/ip_forward
# 永久开启
vi /etc/sysctl.conf
# 添加/修改
net.ipv4.ip_forward = 1
# 生效
sysctl -p
步骤 2:配置双网卡(内网 + 外网 VIP)
bash
运行
# 外网网卡配置(VIP:192.168.74.129)
vi /etc/sysconfig/network-scripts/ifcfg-ens36
TYPE=Ethernet
BOOTPROTO=static
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=192.168.74.129
NETMASK=255.255.255.0
# 重启网络
ifdown ens36 && ifup ens36
# 验证IP
ifconfig ens36
步骤 3:配置 LVS 负载策略
bash
运行
# 清除旧策略
ipvsadm -C
# 创建VIP虚拟服务(80端口,轮询算法)
ipvsadm -A -t 192.168.74.129:80 -s rr
# 添加Web1、Web2节点(NAT模式,权重1)
ipvsadm -a -t 192.168.74.129:80 -r 192.168.10.102:80 -m -w 1
ipvsadm -a -t 192.168.74.129:80 -r 192.168.10.103:80 -m -w 1
# 保存策略
ipvsadm-save > /etc/sysconfig/ipvsadm
# 开机自启
systemctl enable --now ipvsadm
4.3 Web 节点服务器配置(Web1/Web2 相同)
步骤 1:修改网关为 LVS 调度器内网 IP
bash
运行
# 删除默认网关
route del default gw 192.168.10.254
# 添加新网关(LVS内网IP)
route add default gw 192.168.10.101
# 永久修改网关
vi /etc/sysconfig/network-scripts/ifcfg-ens33
GATEWAY=192.168.10.101
# 重启网络
ifdown ens33 && ifup ens33
步骤 2:部署 httpd + 挂载 NFS
bash
运行
# 安装Apache
yum install -y httpd
# 创建测试页面
echo "<h1>LVS-NAT Web Server 1</h1>" > /var/www/html/index.html # Web1
echo "<h1>LVS-NAT Web Server 2</h1>" > /var/www/html/index.html # Web2
# 启动httpd
systemctl enable --now httpd
然后去厕所发现是按加权轮询或者轮询显示的页面 那么成功!!!
然后下面部署统一页面:
yum -y install nfs-utils (web1和web2)
# 挂载NFS共享存储
mount 192.168.10.104:/opt/wwwroot /var/www/html (web1和web2)
然后在nfs服务器上创建统一页面
vim /opt/www/root/index.html
test
然后重启,找个客户机做测试
4.4 测试 LVS-NAT 群集
- 客户端浏览器访问:
http://192.168.74.129 - 多次刷新,页面交替显示
Web Server 1/2,说明负载均衡生效 - LVS 调度器查看状态:
bash
运行
ipvsadm -ln
ipvsadm -lnc
五、补充核心知识点(生产必备)
- LVS-NAT 瓶颈:调度器是流量入口 + 出口,高并发时易成瓶颈,适合中小型业务。
- 节点健康检查 :原生 LVS 无健康检查,需配合
Keepalived实现节点宕机自动剔除。 - 端口映射 :LVS 支持非 80 端口,如
ipvsadm -A -t 192.168.74.129:8080 -s rr。 - 保持连接 :
-p 60参数,60 秒内同一客户端请求分配到同一节点:
bash
运行
ipvsadm -a -t 192.168.74.129:80 -r 192.168.10.102:80 -m -w 1 -p 60
- 权重调整:权重 0 代表节点暂停,不分配请求:
bash
运行
ipvsadm -a -t 192.168.74.129:80 -r 192.168.10.102:80 -m -w 0
六、常见排错思路
- 无法访问 VIP:检查 LVS 路由转发是否开启、防火墙 / SELinux 是否关闭。
- 请求只分配到一个节点:检查调度算法、权重、节点网关是否正确。
- NFS 挂载失败 :检查服务端
/etc/exports、网络连通性、rpcbind是否启动。 - ipvsadm 策略丢失 :未执行
ipvsadm-save,重启后规则清空,必须保存。