LVS 集群技术详解与实战部署

目录

引言

一、实验环境准备

[二、理论基础:集群与 LVS 核心原理](#二、理论基础:集群与 LVS 核心原理)

[2.1 集群与分布式](#2.1 集群与分布式)

[2.2 LVS 核心原理](#2.2 LVS 核心原理)

[LVS 的 4 种工作模式](#LVS 的 4 种工作模式)

[LVS 调度算法](#LVS 调度算法)

[三、LVS 部署工具:ipvsadm 命令详解](#三、LVS 部署工具:ipvsadm 命令详解)

[四、实战案例:LVS 部署详解](#四、实战案例:LVS 部署详解)

[案例 1:NAT 模式集群部署](#案例 1:NAT 模式集群部署)

环境说明

配置步骤

[案例 2:DR 模式集群部署](#案例 2:DR 模式集群部署)

环境说明

配置步骤

1.在客户端主机中为nat模式网卡:

[2. 在路由主机中设定双网卡,eth0为nat网卡,eth1为仅主机网卡](#2. 在路由主机中设定双网卡,eth0为nat网卡,eth1为仅主机网卡)

3.对于dr调度器设定网卡为仅主机模式

4.对于RS1的设定网卡为仅主机模式

5.对于RS2中的网络设定

解决vip响应问题

配置详情

1.配置要点

[2.在lvs 和 rs 中设定vip](#2.在lvs 和 rs 中设定vip)

3.在RS1和RS2中解决响应问题

4.在lvs中配置策略

5.测试效果

三、总结


引言

在高并发业务场景中,单台服务器往往难以承载大量的访问请求,此时集群技术成为提升系统性能与可用性的关键。LVS(Linux Virtual Server,Linux 虚拟服务器)作为 Linux 内核集成的负载均衡技术,能够将请求高效分发到多台真实服务器,实现负载均衡。本文将从理论到实战,详细介绍 LVS 集群技术,包括核心原理、部署命令及多个实战案例,助你快速掌握 LVS 的应用。

一、实验环境准备

在开始 LVS 部署前,需准备以下实验环境(可根据实际情况调整主机数量和 IP):

|---------|------------|--------------------------------------------------------------------|
| 主机名 | 角色 | 说明 |
| server1 | 调度器(VS) | 负责请求调度,需配置 VIP:192.168.2.100(虚拟 IP)和 DIP:192.168.186.100(调度器内网 IP) |
| server2 | 真实服务器(RS1) | 提供实际服务(如 Web),配置 RIP(真实服务器 IP)192.168.186.10 |
| server3 | 真实服务器(RS2) | 同 server2 IP地址:192.168.186.20 |
| server4 | 测试机 | 模拟客户端,用于测试负载均衡效果 IP地址:192.168.2.111 |

二、理论基础:集群与 LVS 核心原理

2.1 集群与分布式

  • 集群(Cluster):多台计算机组合成的单个系统,用于解决特定问题,常见类型包括:
    • 负载均衡(LB):请求分发到多台主机,分摊负载;
    • 高可用(HA):避免单点故障(SPOF),提升服务可用性;
    • 高性能计算(HPC):专注大规模计算(本文不涉及)。
  • 分布式:将业务拆分为多个子业务,部署在多台服务器,每台服务器功能不同,组合实现完整业务。
  • 区别:集群通过提升单位时间处理任务数提升效率,分布式通过缩短单个任务时间提升效率。

2.2 LVS 核心原理

LVS 由调度器(VS)和真实服务器(RS)组成,VS 根据调度算法将客户端请求分发到 RS,核心术语包括:

  • VIP:VS 对外提供服务的 IP;
  • DIP:VS 内网 IP,用于与 RS 通信;
  • RIP:RS 的 IP;
  • CIP:客户端 IP。
LVS 的 4 种工作模式
  1. NAT 模式(lvs-nat)
    • 原理:修改请求报文的目标 IP(多目标 DNAT),请求和响应均经过 VS;
    • 特点:RS 网关需指向 DIP,支持端口映射,但 VS 可能成为瓶颈。
  1. DR 模式(lvs-dr)
    • 原理:通过封装新 MAC 地址转发请求,请求经 VS,响应由 RS 直接发往客户端;
    • 特点:VS 和 RS 需配置相同 VIP,不支持端口映射,性能高(默认模式)。
  1. TUN 模式(lvs-tun)
    • 原理:原 IP 报文外封装新 IP 首部(源 DIP,目标 RIP),响应由 RS 直接发往客户端;
    • 特点:支持跨网络部署,需公网 IP,RS 需支持隧道功能。
  1. FULLNAT 模式
    • 原理:修改请求报文的源 IP 和目标 IP,请求和响应均经过 VS;
    • 特点:内核默认不支持,RIP 与 DIP 可不在同一网络。
LVS 调度算法
  • 静态算法(不考虑 RS 负载):
    • RR(轮询):请求依次分发到各 RS;
    • WRR(加权轮询):按权重分配,性能高的 RS 承担更多请求;
    • SH(源地址哈希):同一客户端请求固定到同一 RS(会话绑定)。
  • 动态算法(考虑 RS 负载):
    • WLC(加权最少连接):默认算法,根据活跃连接数和权重分配;
    • SED(最短预期延迟):高权重 RS 优先承接新请求;
    • FO(加权故障转移):用于灰度发布,优先调度未过载的高权重 RS。

三、LVS 部署工具:ipvsadm 命令详解

ipvsadm 是 LVS 的管理工具,用于配置集群服务和 RS,核心命令如下:

|--------|---------------------------------------|--------------------------------|
| 功能 | 命令示例 | 说明 |
| 添加集群服务 | ipvsadm -A -t VIP:80 -s rr | 添加 TCP 服务(VIP:80),调度算法为轮询(rr) |
| 添加 RS | ipvsadm -a -t VIP:80 -r RIP:80 -m | 为集群服务添加 RS(RIP:80),模式为 NAT(-m) |
| 修改配置 | ipvsadm -E -t VIP:80 -s wrr | 将调度算法修改为加权轮询(wrr) |
| 删除 RS | ipvsadm -d -t VIP:80 -r RIP:80 | 从集群服务中删除指定 RS |
| 查看配置 | ipvsadm -Ln | 显示集群配置(-n:不解析域名) |
| 保存规则 | ipvsadm -Sn > /etc/sysconfig/ipvsadm | 保存当前配置到文件 |

四、实战案例:LVS 部署详解

案例 1:NAT 模式集群部署

环境说明
  • VS(server1):VIP=192.168.2.100(外网),DIP=192.168.186.100(内网);
  • RS1(server2):RIP=192.168.186.10,网关指向 DIP;
  • RS2(server3):RIP=192.168.186.20,网关指向 DIP;
  • 测试机(server4):192.168.2.111模拟外网客户端。
配置步骤
  1. VS 启用内核路由
bash 复制代码
[root@lvs ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.d/99-ip_forward.conf
[root@lvs ~]# sysctl --system # 生效配置

【解释】:NAT 模式需要 VS 转发报文,需开启 IP 转发。

  1. 安装 ipvsadm
bash 复制代码
[root@lvs ~]# yum install ipvsadm -y
[root@lvs ~]# systemctl enable --now ipvsadm # 开机自启
  1. 配置集群服务和 RS
bash 复制代码
# 添加集群服务(VIP:80,轮询算法)

[root@lvs ~]# ipvsadm -A -t 192.168.2.100:80 -s rr

# 添加RS1(NAT模式)

[root@lvs ~]# ipvsadm -a -t 192.168.2.100:80 -r 192.168.186.10:80 -m

# 添加RS2(NAT模式)

[root@lvs ~]# ipvsadm -a -t 192.168.2.100:80 -r 192.168.186.20:80 -m

  1. 测试验证

在测试机执行多次请求,观察轮询效果:

bash 复制代码
for N in {1..6};do curl 192.168.2.100;done

预期结果:交替返回 RS1 和 RS2 的响应。

案例 2:DR 模式集群部署

环境说明

|-----------|--------------------------------------------------|--------------------|---------|
| 主机名 | IP | VIP | 角色 |
| DR_client | 192.168.2.111 | null | 测试主机 |
| route | NAT-eth0:192.168.2.100, 仅主机-eth1:192.168.186.100 | null | 路由器 |
| lvs | 192.168.186.200, GW:192.168.186.100 | lo:192.168.186.254 | 调度器 |
| RS1 | 192.168.186.10, GW:192.168.186.100 | lo:192.168.186.254 | web服务器1 |
| RS2 | 192.168.186.20, GW:192.168.186.200 | lo:192.168.186.254 | web服务器2 |

配置步骤
1.在客户端主机中为nat模式网卡:
bash 复制代码
[root@client ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection 

[root@client ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.2.2     0.0.0.0         UG    100    0        0 eth0
192.168.2.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0
复制代码
2. 在路由主机中设定双网卡,eth0为nat网卡,eth1为仅主机网卡
bash 复制代码
#对于eth0的设定
[root@lvs ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection 

[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
method=manual
address1=192.168.2.100/24,192.168.2.2
dns=8.8.8.8


#对于eth1的设定
[root@lvs ~]# vim /etc/NetworkManager/system-connections/eth1.nmconnection 

[connection]
id=eth1
type=ethernet
interface-name=eth1

[ipv4]
method=manual
address1=192.168.186.100/24,192.168.2.2
dns=8.8.8.8

3. 对于dr调度器设定网卡为仅主机模式
bash 复制代码
[root@lvs-dr ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection 

[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
method=manual
address1=192.168.186.200/24,192.168.186.100
address2=192.168.186.254/24
dns=8.8.8.8
4. 对于RS1的设定网卡为仅主机模式
bash 复制代码
[root@rs1 ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection 

[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
method=manual
address1=192.168.186.10/24,192.168.186.100
dns=8.8.8.8
5. 对于RS2中的网络设定
bash 复制代码
[root@rs2 ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection 

[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
method=manual
address1=192.168.186.20/24,192.168.186.100
dns=8.8.8.8
解决vip响应问题

DR 模型中各主机上均需要配置 VIP ,解决地址冲突的方式有三种:
(1) 在前端网关做静态绑定
(2) 在各 RS 使用 arptables
(3) 在各 RS 修改内核参数,来限制 arp 响应和通告的级别
限制响应级别 :arp_ignore
0: 默认值,表示可使用本地任意接口上配置的任意地址进行响应
1: 仅在请求的目标 IP 配置在本地主机的接收到请求报文的接口上时,才给予响应
限制通告级别 :arp_announce
0: 默认值,把本机所有接口的所有信息向每个接口的网络进行通告
1: 尽量避免将接口信息向非直接连接网络进行通告
2: 必须避免将接口信息向非本网络进行通告

配置详情
1.配置要点

1.Director 服务器采用双 IP 桥接网络,一个是 VPP ,一个 DIP
2.Web 服务器采用和 DIP 相同的网段和 Director 连接
3. 每个 Web 服务器配置 VIP
4. 每个 web 服务器可以出外网

2.在lvs 和 rs 中设定vip
bash 复制代码
#lvs
[root@lvs-dr ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection 

[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
method=manual
address1=192.168.186.200/24,192.168.186.100
address2=192.168.186.254/24
dns=8.8.8.8
bash 复制代码
#RS1
[root@rs1 ~]# vim /etc/NetworkManager/system-connections/lo.nmconnection 

[connection]
id=lo
type=loopback
interface-name=lo

[ipv4]
method=manual
address1=127.0.0.1/8
address2=192.168.186.254/32
bash 复制代码
#RS2
[root@rs2 ~]# vim /etc/NetworkManager/system-connections/lo.nmconnection 

[connection]
id=lo
type=loopback
interface-name=lo

[ipv4]
method=manual
address1=127.0.0.1/8
address2=192.168.186.254/32
3.在RS1和RS2中解决响应问题
bash 复制代码
#RS1
[root@rs1 ~]# echo net.ipv4.conf.all.arp_ignore =1 >> /etc/sysctl.conf 
[root@rs1 ~]# echo net.ipv4.conf.all.arp_announce = 2 >> /etc/sysctl.conf 
[root@rs1 ~]# echo net.ipv4.conf.lo.arp_ignore = 1 >> /etc/sysctl.conf 
[root@rs1 ~]# echo net.ipv4.conf.lo.arp_announce = 2 >> /etc/sysctl.conf 
bash 复制代码
#RS2
[root@rs2 ~]# echo net.ipv4.conf.all.arp_ignore =1 >> /etc/sysctl.conf 
[root@rs2 ~]# echo net.ipv4.conf.all.arp_announce = 2 >> /etc/sysctl.conf 
[root@rs2 ~]# echo net.ipv4.conf.lo.arp_ignore = 1 >> /etc/sysctl.conf 
[root@rs2 ~]# echo net.ipv4.conf.lo.arp_announce = 2 >> /etc/sysctl.conf 
4.在lvs中配置策略
bash 复制代码
#lvs
[root@lvs-dr ~]# ipvsadm -A -t 192.168.186.254:80 -s rr
[root@lvs-dr ~]# ipvsadm -a -t 192.168.186.254:80 -r 192.168.186.10:80 -g
[root@lvs-dr ~]# ipvsadm -a -t 192.168.186.254:80 -r 192.168.186.20:80 -g
5.测试效果

三、总结

LVS 作为高性能的负载均衡技术,通过不同工作模式(NAT/DR/TUN)和调度算法,可灵活应对各种业务场景。本文通过 4 个实战案例,从基础部署到问题解决,详细演示了 LVS 的配置过程。实际应用中,需根据业务需求选择合适的模式(如 DR 模式适合高并发场景),并结合监控工具(如 ipvsadm 统计)优化调度策略。

希望本文能帮助你快速掌握 LVS 集群技术,欢迎在评论区交流部署过程中遇到的问题!

相关推荐
beyoundout10 小时前
LVS(Linux virtual server)-实现四层负载均衡
linux·服务器·lvs
Spike()10 小时前
LVS工作模式和算法的总结
linux·服务器·lvs
Brandon汐13 小时前
LVS(Linux virual server)
linux·运维·lvs
Deutsch.13 小时前
深入解析LVS负载均衡核心原理
运维·负载均衡·lvs
麟城Lincoln1 天前
【Linux-云原生-笔记】LVS(Linux virual server)相关
linux·笔记·云原生·lvs·nat·dr·ipvsadm
为什么要内卷,摆烂不香吗1 天前
LVS部署DR模式集群
服务器·数据库·lvs
蠢货爱好者1 天前
Linux中的LVS集群技术
linux·运维·lvs
白鸽梦游指南1 天前
LVS运行原理及实战模拟
服务器·网络·lvs
丨千纸鹤丨1 天前
LVS集群
服务器·网络·lvs