基于 CentOS 7 搭建 LVS 负载均衡(NAT 模式)搭建指南

背景介绍:为什么选择 LVS 负载均衡?

在高并发 Web 架构中,随着用户量增长,单台服务器的性能瓶颈和单点故障问题会愈发突出。传统应用层负载均衡(如 Nginx)虽配置灵活,但在百万级并发场景下,用户态转发的性能限制会显现。

LVS(Linux Virtual Server)作为内核级负载均衡方案,工作在传输层(Layer 4),通过 IPVS 模块直接在内核中处理数据包转发,无需用户态与内核态的频繁切换,可轻松支撑百万级并发连接,且资源占用极低。其 NAT 模式配置简单,无需修改后端服务器网络架构,是大型互联网企业高并发场景的首选方案,也适合负载均衡入门者快速掌握内核级负载均衡的核心原理。

本文将在 CentOS 7 系统上从零部署完整的 LVS 负载均衡集群(NAT 模式),覆盖环境准备、核心配置、效果验证及持久化优化,助力快速构建高可用、高并发的 Web 架构。

核心关键词解释

  • LVS(Linux Virtual Server):集成于 Linux 内核的开源负载均衡项目,通过 IPVS 模块实现高效数据包转发,支持 NAT、DR、TUN 三种模式;
  • IPVS(IP Virtual Server):LVS 的核心内核模块,负责实现负载均衡的调度算法和数据包转发逻辑,无需额外安装;
  • VIP(Virtual IP):虚拟 IP 地址,对外提供统一的服务访问入口,客户端仅需访问 VIP 即可享受负载均衡服务;
  • Director(调度器):运行 LVS 的服务器,负责接收客户端请求,根据调度算法转发至后端真实服务器;
  • RS(Real Server):后端真实服务器,运行 Web 等应用服务,处理调度器转发的请求;
  • NAT 模式:LVS 三种模式之一,通过地址转换实现请求转发,所有进出流量均经过调度器,配置简单但存在流量瓶颈;
  • 调度算法:LVS 分发请求的规则,常用轮询(rr)、加权轮询(wrr)、最小连接(lc)等;
  • ipvsadm:LVS 的用户态管理工具,用于配置、查看和修改 LVS 负载均衡规则。

一、LVS 简介与 NAT 模式原理

1. 什么是 LVS?

LVS 是一个开源负载均衡项目,已集成到 Linux 内核中。它通过 IPVS(IP Virtual Server)模块实现高效的数据包转发,无需额外安装内核,仅需通过用户态工具(如 ipvsadm)即可配置和管理。

2. NAT 模式工作原理

NAT(Network Address Translation)模式是 LVS 三种常用模式(NAT、DR、TUN)中配置最简单的一种,其流量路径遵循以下流程:

  1. 客户端发送请求至 LVS 的虚拟 IP(VIP);
  2. LVS 调度器(Director)接收请求后,根据预设的调度算法(如轮询)将请求转发给后端真实服务器(Real Server,简称 RS);
  3. 真实服务器处理请求后,将响应流量返回给 LVS 调度器(因真实服务器网关指向 LVS);
  4. LVS 调度器对响应流量做地址转换,最终返回给客户端。

3. NAT 模式优缺点

  • ✅ 优点:配置简单,真实服务器无需修改网络配置,仅需指定网关即可;
  • ⚠️ 缺点:所有进出流量均需经过 LVS 调度器,LVS 易成为流量瓶颈,不适合超大规模并发场景。

二、实验环境规划

本次搭建需 3 台 CentOS 7 服务器,角色、主机名、IP 地址规划如下表所示(LVS 公私网 IP 一致):

主机角色 主机名 操作系统 IP 地址
LVS 调度器 lvs-director CentOS 7 虚拟 IP(公私网一致):10.0.0.1
真实服务器 1 web1 CentOS 7 内网 IP:10.0.0.2
真实服务器 2 web2 CentOS 7 内网 IP:10.0.0.3

三、步骤 1:准备后端 Web 服务器

若尚未部署 Web 服务,需在 web1 和 web2 上分别搭建简单 Web 页面(以 Apache 为例),确保后端服务可正常响应请求:

1. 在 web1 上执行

bash

复制代码
# 安装 Apache 服务(从 CentOS 官方 YUM 源获取)
yum install -y httpd

# 创建 Web 首页(标识 web1,便于测试时区分节点)
echo "<h1>Welcome to web1</h1>" > /var/www/html/index.html

# 启动 Apache 并设置开机自启(确保服务器重启后服务自动运行)
systemctl start httpd
systemctl enable httpd

2. 在 web2 上执行

仅需将 Web 首页内容改为 Welcome to web2,其余命令与 web1 一致:

bash

复制代码
yum install -y httpd
echo "<h1>Welcome to web2</h1>" > /var/www/html/index.html
systemctl start httpd
systemctl enable httpd

3. 验证 Web 服务

在 LVS 调度器或其他内网机器上,通过内网 IP 访问 web1 和 web2,确认页面正常返回:

bash

复制代码
# 访问 web1(应返回 web1 标识页面)
curl http://10.0.0.2

# 访问 web2(应返回 web2 标识页面)
curl http://10.0.0.3

四、步骤 2:配置 LVS 调度器(Director)

LVS 调度器是整个负载均衡集群的核心,需完成工具安装、IP 转发启用、防火墙配置三个关键操作,确保数据包能正常转发。

1. 安装 LVS 管理工具

LVS 内核模块(IPVS)默认已集成到 CentOS 7 内核中,无需额外安装,仅需安装用户态管理工具 ipvsadm

bash

复制代码
yum install -y ipvsadm

2. 启用 IP 转发(关键!)

LVS 作为调度器,需开启内核 IP 转发功能,否则无法将客户端请求转发至后端真实服务器:

bash

复制代码
# 临时启用 IP 转发(重启后失效,用于快速测试)
echo 1 > /proc/sys/net/ipv4/ip_forward

# 永久启用 IP 转发(修改配置文件,重启后仍生效)
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf

# 使配置立即生效
sysctl -p

# 验证 IP 转发是否启用(输出 1 表示已启用)
sysctl net.ipv4.ip_forward

3. 设置防火墙(可选)

若系统启用了 firewalld,需开放 80 端口(Web 服务默认端口),或临时关闭防火墙(仅测试环境推荐):

bash

复制代码
# 方案 1:开放 80 端口(推荐,生产环境适用)
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload

# 方案 2:临时关闭 firewalld(测试环境适用,简化配置)
systemctl stop firewalld

五、步骤 3:配置 LVS 虚拟服务(NAT 模式)

通过 ipvsadm 命令创建 LVS 虚拟服务规则,指定 VIP、调度算法和后端真实服务器,实现请求分发:

bash

复制代码
# 1. 清空现有 LVS 规则(首次配置可省略,避免旧规则干扰)
ipvsadm -C

# 2. 添加虚拟服务:VIP 为 10.0.0.1,端口 80,调度算法为轮询(rr)
ipvsadm -A -t 10.0.0.1:80 -s rr

# 3. 添加后端真实服务器(-m 表示 NAT 模式)
ipvsadm -a -t 10.0.0.1:80 -r 10.0.0.2:80 -m  # 添加 web1 节点
ipvsadm -a -t 10.0.0.1:80 -r 10.0.0.3:80 -m  # 添加 web2 节点

关键参数说明

参数 含义
-A 添加虚拟服务(Virtual Server)
-a 为虚拟服务添加真实服务器(Real Server)
-t VIP:PORT 指定虚拟服务的 TCP 协议和端口(如 10.0.0.1:80)
-s rr 调度算法为轮询(round-robin),其他常用算法:wrr(加权轮询)、lc(最小连接)
-m 指定 LVS 模式为 NAT(Masquerading)
-r RS_IP:PORT 指定后端真实服务器的 IP 和端口

六、步骤 4:配置真实服务器网关(关键!)

NAT 模式要求真实服务器的默认网关指向 LVS 调度器的 IP(10.0.0.1),否则真实服务器的响应流量无法返回给 LVS,客户端将收不到响应。

1. 在 web1 和 web2 上修改网关

bash

复制代码
# 编辑网卡配置文件(假设网卡为 eth0,实际需根据服务器网卡名称调整,可通过 ip addr 查看)
vi /etc/sysconfig/network-scripts/ifcfg-eth0

# 在文件末尾添加网关配置(指向 LVS 调度器 IP)
GATEWAY=10.0.0.1

2. 重启网络服务生效

bash

复制代码
systemctl restart network

3. 验证网关配置

bash

复制代码
# 查看默认网关,输出应包含"default via 10.0.0.1 dev eth0"
ip route show default

七、步骤 5:测试负载均衡效果

配置完成后,需验证 LVS 是否能将请求均匀分发到后端两台真实服务器。

1. 命令行测试(推荐)

在任意客户端(或 LVS 调度器本机)执行循环请求 VIP,观察返回结果是否交替显示 web1 和 web2 的页面:

bash

复制代码
# 循环请求 10 次 VIP(10.0.0.1)
for i in {1..10}; do
  curl -s http://10.0.0.1
done

预期输出(轮询交替)

plaintext

复制代码
<h1>Welcome to web1</h1>
<h1>Welcome to web2</h1>
<h1>Welcome to web1</h1>
<h1>Welcome to web2</h1>
...

2. 浏览器测试

打开浏览器,访问 http://10.0.0.1,多次刷新页面,观察页面内容是否交替变化(若浏览器缓存影响,可开启无痕模式测试)。

八、步骤 6:持久化 LVS 规则(开机自启)

LVS 规则默认保存在内存中,服务器重启后规则会丢失。需通过 systemd 创建服务,实现 LVS 规则开机自动加载,确保服务稳定性。

1. 创建 LVS 服务文件

bash

复制代码
cat > /etc/systemd/system/lvs.service <<EOF
[Unit]
Description=LVS Load Balancer (NAT Mode)
After=network.target  # 网络服务启动后再启动 LVS 服务

[Service]
Type=oneshot  # 一次性执行服务
# 启动时清空旧规则并重新创建 LVS 规则(与步骤 3 配置一致)
ExecStart=/sbin/ipvsadm -C && \
         /sbin/ipvsadm -A -t 10.0.0.1:80 -s rr && \
         /sbin/ipvsadm -a -t 10.0.0.1:80 -r 10.0.0.2:80 -m && \
         /sbin/ipvsadm -a -t 10.0.0.1:80 -r 10.0.0.3:80 -m
RemainAfterExit=yes  # 执行完成后保持服务活跃状态

[Install]
WantedBy=multi-user.target  # 多用户模式下启动
EOF

2. 启用并启动服务

bash

复制代码
# 重新加载 systemd 配置(识别新创建的服务)
systemctl daemon-reload

# 设置开机自启(服务器重启后自动加载 LVS 规则)
systemctl enable lvs

# 启动服务(立即加载 LVS 规则)
systemctl start lvs

# 验证服务状态(输出 active 表示正常)
systemctl status lvs

九、常用命令与排错

1. 常用 LVS 管理命令

功能 命令
查看 LVS 规则(详细信息,数字格式显示 IP 和端口) ipvsadm -ln
查看当前连接数(客户端 IP、后端 RS 等) ipvsadm -lnc
清空所有 LVS 规则 ipvsadm -C
保存 LVS 规则到文件 ipvsadm -S > /etc/sysconfig/ipvsadm
从文件加载 LVS 规则 ipvsadm -R < /etc/sysconfig/ipvsadm
测试后端 RS 连通性 curl http://10.0.0.2(web1)、curl http://10.0.0.3(web2)
检查真实服务器网关 ip route show default

2. 常见问题排查

问题 1:访问 VIP 无响应
  • 检查 LVS 调度器的安全组是否开放 80 端口(云服务器场景);
  • 检查 LVS 调度器的防火墙是否放行 80 端口(firewall-cmd --list-ports);
  • 检查真实服务器的网关是否正确指向 LVS 的 IP(10.0.0.1);
  • 检查真实服务器的 Web 服务是否正常运行(systemctl status httpd)。
问题 2:只有一台后端 RS 响应
  • 检查 LVS 规则是否包含两台 RS(ipvsadm -ln);
  • 检查未响应的 RS 的 Web 服务是否正常(curl http://RS_IP);
  • 检查未响应的 RS 的网关是否正确配置(ip route show default)。
问题 3:连接超时
  • 在 LVS 调度器上使用 tcpdump 抓包分析流量路径,例如:

    bash

    复制代码
    # 抓取与 web1(10.0.0.2)相关的 80 端口流量
    tcpdump -i eth0 host 10.0.0.2 and port 80
  • 检查 LVS 与 RS 之间的网络是否通畅(ping 10.0.0.2ping 10.0.0.3)。

十、总结与进阶建议

1. 总结

本文完整演示了在 CentOS 7 上从零搭建 LVS 负载均衡集群(NAT 模式)的流程,核心亮点:

  • LVS 工作在传输层,内核级转发,低延迟、高吞吐,适合高并发场景;
  • NAT 模式配置简单,无需修改后端 RS 的网络架构,仅需指定网关即可快速部署;
  • LVS 公私网 IP 统一为 10.0.0.1,简化网络配置,降低入门门槛;
  • 通过 systemd 实现 LVS 规则开机自启,确保服务重启后仍能正常工作。

同时需注意,NAT 模式的局限性在于 LVS 调度器会成为流量瓶颈,所有进出流量均需经过调度器,不适合超大规模集群。

2. 进阶学习方向

  • 🔄 切换至 LVS-DR 模式(Direct Routing):DR 模式下,RS 直接将响应流量返回给客户端,绕过 LVS 调度器,突破 NAT 模式的性能瓶颈,适合大规模集群;
  • 🛡️ 集成 Keepalived:实现 LVS 调度器的高可用(主备自动切换),避免 LVS 单点故障,确保负载均衡服务不中断;
  • 📊 监控与运维:结合 Prometheus + Node Exporter + Grafana 监控 LVS 的连接数、转发效率、后端 RS 状态等指标,实时掌握集群运行状态,及时发现并处理异常。

总结

LVS 作为内核级负载均衡方案,凭借其高性能、低资源占用的优势,成为高并发场景的核心组件。本文通过 NAT 模式的实战部署,帮助快速理解 LVS 的工作原理和配置逻辑,适合作为负载均衡进阶学习的基础。

后续可根据业务规模,灵活选择 LVS 模式(NAT/DR/TUN),并结合 Keepalived、监控工具等,构建更稳定、可扩展的高可用架构。

相关推荐
任聪聪3 小时前
Centos平替系统RockyLinux详细安装教程
linux·运维·centos
瑶总迷弟5 小时前
在centos上基于kubeadm部署单master的k8s集群
linux·kubernetes·centos
是小胡嘛5 小时前
华为云CentOS系统中运行http服务器无响应
linux·服务器·c++·http·centos·华为云
某zhuan6 小时前
云计算实验5——MapReduce编程实现计算一个大文本文件中所有单词出现的个数
centos·云计算·mapreduce
q***751811 小时前
Linux(CentOS)安装 MySQL
linux·mysql·centos
q***133413 小时前
Linux(CentOS)安装 Nginx
linux·nginx·centos
摘星编程13 小时前
openGauss 快速上手:CentOS 环境下单机部署完整指南
linux·运维·centos
yifengyiyufjq13 小时前
基于 CentOS 7 的 HAProxy 负载均衡搭建指南
centos·负载均衡
u***420713 小时前
Ubuntu介绍、与centos的区别、基于VMware安装Ubuntu Server 22.04、配置远程连接、安装jdk+Tomcat
java·ubuntu·centos