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 集群技术,欢迎在评论区交流部署过程中遇到的问题!

相关推荐
竹竿袅袅21 天前
Keepalived 原理及配置(高可用)
运维·云原生·lvs·keepalived·haproxy·高可用
hyy279522768423 天前
LVS集群技术
lvs
Stewie1213824 天前
lvs集群技术
lvs
中心观察者24 天前
LVS技术详解与实战
linux·运维·服务器·网络·lvs
这日光醉了城.24 天前
LVS---集群技术
lvs
用户呢称25 天前
Linux | LVS--Linux虚拟服务器知识点(下)
linux·服务器·lvs
zoulingzhi_yjs25 天前
Linux LVS集群技术
linux·服务器·lvs
cqh20525 天前
LVS(Linux Virtual Server) 集群
linux·运维·lvs
电动2302张尚文25 天前
lvs集群技术(Linux virual server)
运维·服务器·lvs
obboda25 天前
LVS详解
lvs