LVS DR模式工作原理群集部署

LVS DR模式工作原理群集部署


文章目录


前言

在互联网架构朝着高并发、高可用演进的过程中,负载均衡技术始终是保障业务稳定运行的核心支撑 ------ 它通过将海量请求合理分配至后端节点服务器,有效避免单点过载,同时提升整体服务的响应效率与容错能力。Linux Virtual Server(LVS)作为 Linux 内核原生的负载均衡方案,凭借 "内核态转发" 的特性,具备百万级并发处理能力,成为超大规模集群场景下的优选技术之一。

一、核心集群类型详解

1.负载均衡集群(Load Balancing Cluster,LBC)

通过 "调度算法" 将外部请求(或任务)均匀分发到集群中的多台后端服务器,避免单台服务器过载,同时最大化集群的整体处理能力。

本质是 "任务分流",核心解决 "单节点压力过大导致的响应变慢、服务不可用" 问题。

高可用集群(High Availability Cluster,HAC)

通过 "冗余设计" 和 "故障自动切换",确保集群中的核心服务在任意节点故障时,能快速切换到备用节点,避免服务中断。

本质是 "故障兜底",核心解决 "单点故障导致的服务不可用" 问题,追求 "99.9% 以上的服务可用性"(如 99.99% 意味着每年 downtime 不超过 52 分钟)。

高性能运算集群(High Performance Computing Cluster,HPC)

由大量计算节点(CPU/GPU 密集型)通过高速网络互联,协同完成单台服务器无法承载的 "大规模、高复杂度计算任务"。

本质是 "算力聚合",核心解决 "单节点算力不足导致的计算任务无法完成或耗时过长" 问题,追求 "极致的计算速度"
简单来说,就是将多个主机作为一个整体,对外提供相同的服务。

2.集群分为三类

负载均衡(LB):减少响应的延迟 、提高并发处理能力。

高可用(HA):强调了系统的稳定性、连续性、减少服务器中断时间,减少损失。

高可用(HPC):提高运算能力、并发、分布式

二、LVS三种工作模式

1、地址转换(NAT模式)

调度器作网关,是访问请求的入口,也是响应访问的出口,在高并发场景中负载压力很高。nat转换可以提高安全性。

2、TUN模式

仅是访问请求的入口,响应不经过调度器,但是需要大量的公网ip,还需要专门的ip隧道,数据转发受ip隧道影响。

3、DR模式

调度器是访问请求的入口,响应数据不经过调度器,节点服务器和调度器在同一个物理网络,数据在转发中不受额外的影响。

4.LVS集群管理(ipvsadm)

创建虚拟服务器

添加、删除服务器节点

查看群集及节点情况

保存负载分配策略 选项

-A:添加虚拟服务器

-D:删除整个虚拟服务器

-s:指定负载调度算法 (轮询:rr、加权轮询: wrr、最少连接: lc、加权最少连接: wlc )

-a:表示添加真实服务器 (节点服务器)

-d:删除某一个节点

-t:指定 VIP地址及 TCP端口

-r:指定 RIP地址及 TCP端口

-m:表示使用 NAT群集模式.

-g:表示使用 DR模式

-i:表示使用 TUN模式

-w:设置权重 (权重为 0 时表示暂停节点)

-p 60:表示保持长连接60秒

-l:列表查看 LVS 虚拟服务器 (默认为查看所有)

-n:以数字形式显示地址、端口等信息,常与 "-l" 选项组合使用。ipvsadm -ln

5.Nginx、LVS和HAProxy之间的区别

Nginx:轻量、全能,适合 Web 服务和中小型负载均衡。

LVS:极致性能,适合四层超大规模集群,但功能单一。

HAProxy:专业负载均衡器,四层+七层都行,健康检查能力最强。

三、LVS虚拟服务器

1、LVS介绍

LVS 工作在 OSI 模型的 传输层(四层),通过 IP 负载均衡技术将客户端请求分发到后端多台真实服务器(Real Server,RS),核心价值是提高服务的并发处理能力,广泛应用于高并发生产环境(如电商秒杀、大型网站集群)。

与 Nginx(七层负载均衡)相比,LVS 完全运行在内核态,转发效率极高(几乎无性能损耗),支持百万级并发连接,但功能相对专注(仅负责四层转发,不处理应用层逻辑),常与 Nginx 配合形成 "LVS 四层调度 + Nginx 七层代理" 的高性能架构。

2、负载调度算法

2.1、轮询

将收到的访问请求按照顺序轮流分配给群集中的各节点(真实服务器),均等地对待每一台服务器,而不管服务器实际的连接数和系统负载

2.2、加权轮询

根据调度器设置的权重值来分发请求,权重值高的节点优先获得任务,分配的请求数越多保证性能强的服务器承担更多的访问流量

2.3、最少连接

根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点

2.4、加权最少连接

在服务器节点的性能差异较大时,可以为真实服务器自动调整权重

性能较高的节点将承担更大比例的活

3、LVS-DR工作原理

LVS-DR数据包流向分析

客户机先将 源IP 目标VIP 发送到 路由器

##1.路由器收到客户端请求 发送广播 寻找目标VIP ARP问题一:每个节点VIP对应的MAC地址不一致,出现ARP絮乱。

2.DR调度器收到 源IP和目标VIP 会调度给 RS节点服务器

3.RS节点服务器 更换源IP和目标IP 交给路由器 ARP问题二:RS节点VIP对应的MAC和DR调度器的VIP对应的MAC不一致,路由器会覆盖VIP对应的MAC地址表为RS节点的MAC地址。导致路由器和DR调度器失联。

4.交换机 最后将数据再转发给 客户机 客户机在整个传输的过程中不会知道实际提供服务的机器。

四、DR模式 LVS负载均衡群集

1. DR模式工作原理(Direct Routing)

1.1 数据包流向分析(4步完整流程)

  1. 客户端 → Director(负载均衡器):客户端发送请求到虚拟IP(VIP),数据包会先到达Director Server(负载调度器)的内核空间。
  2. Director → Real Server(真实服务器):Director检测到数据包目标IP是VIP,判定为集群服务请求,仅修改数据包的MAC地址(目标MAC改为选中的Real Server的MAC,源MAC改为Director自身的MAC),IP地址(源IP:客户端CIP,目标IP:VIP)保持不变,随后将数据包转发给对应的Real Server。
  3. Real Server 处理请求:Real Server接收数据包(目标MAC为自身),通过本地lo接口(已配置VIP)处理请求;处理完成后,生成响应报文,响应报文的源IP为VIP,目标IP为客户端CIP,不经过Director,直接发送给客户端。
  4. 客户端接收响应:客户端直接接收Real Server的响应报文,完成一次请求-响应流程。

1.2 DR模式核心特点

  • 网络约束:Director Server与Real Server必须在同一物理网络(同网段)。
  • IP灵活:Real Server可使用私有IP或公网IP。
  • 角色定位:Director仅作为请求入口(转发请求),不作为网关,不处理响应报文。
  • 流量特点:所有请求经过Director转发,响应报文由Real Server直接发送给客户端(减轻Director压力)。
  • 网关配置:Real Server的网关不能指向Director Server(避免响应报文绕回Director)。
  • VIP配置:Real Server必须在lo接口(本地回环接口)配置VIP(确保能处理目标IP为VIP的数据包)。

2. DR模式部署步骤(含详细注释)

2.0 环境规划(部署前必看)

2.0.1 服务器角色与IP分配
服务器角色 IP地址 核心作用
DR服务器(Director) 192.168.10.23 负载调度器,接收请求并转发
Web服务器1(Real Server) 192.168.10.16 实际处理请求,提供Web服务
Web服务器2(Real Server) 192.168.10.17 实际处理请求,提供Web服务(冗余)
虚拟IP(VIP) 192.168.10.180 客户端访问入口,对外统一暴露
客户端 192.168.10.200 测试访问集群服务
2.0.2 环境架构说明
  • 客户端通过VIP(192.168.10.180)访问集群服务。
  • Director(192.168.10.23)通过ens33:0别名配置VIP,负责转发请求。
  • 两台Real Server通过lo:0接口配置VIP,直接响应客户端。
  • 网络链路:客户端→路由器/交换机→Director→Real Server(请求);Real Server→客户端(响应)。

2.1 配置负载调度器(Director Server,IP:192.168.10.23)

(1)系统基础配置(关闭防火墙、安装依赖工具)
bash 复制代码
# 1. 关闭防火墙(避免拦截LVS转发的数据包和VIP通信)
systemctl stop firewalld.service
# 2. 关闭SELinux(避免安全策略限制内核模块加载和IP转发)
setenforce 0
# 3. 加载ip_vs内核模块(LVS的核心模块,实现四层负载均衡功能)
modprobe ip_vs
# 4. 安装ipvsadm工具(LVS的命令行管理工具,用于配置调度规则)
yum -y install ipvsadm
(2)配置虚拟IP(VIP:192.168.10.180)
bash 复制代码
# 1. 进入网卡配置文件目录(Linux网卡配置文件默认存放路径)
cd /etc/sysconfig/network-scripts/
# 2. 复制ens33网卡配置文件,创建虚拟网卡别名ens33:0(避免修改原网卡配置,独立管理VIP)
cp ifcfg-ens33 ifcfg-ens33:0
# 3. 编辑虚拟网卡配置文件
vim ifcfg-ens33:0
# 配置文件内容(逐行注释)
DEVICE=ens33:0          # 虚拟网卡设备名(ens33的别名,:0表示第一个别名)
ONBOOT=yes              # 系统启动时自动激活该网卡
IPADDR=192.168.10.180   # 虚拟IP(VIP),客户端访问的入口
NETMASK=255.255.255.255 # 子网掩码设为255.255.255.255(主机路由,仅本机可用该VIP通信)

# 4. 激活虚拟网卡(使配置生效)
ifup ens33:0
# 5. 验证虚拟网卡配置(查看ens33:0是否正常启动,IP是否正确)
ifconfig ens33:0
(3)调整内核参数(优化DR模式网络转发,避免冲突)
bash 复制代码
# 1. 编辑内核参数配置文件
vim /etc/sysctl.conf
# 添加以下参数(逐行注释)
net.ipv4.ip_forward = 0  # DR模式不需要IP转发(仅修改MAC地址转发,IP不变),设为0禁用
net.ipv4.conf.all.send_redirects = 0  # 禁止所有网卡发送ICMP重定向包(避免客户端收到重定向后绕过Director)
net.ipv4.conf.default.send_redirects = 0  # 禁止默认网卡发送ICMP重定向包
net.ipv4.conf.ens33.send_redirects = 0  # 禁止Director的物理网卡(ens33)发送ICMP重定向包

# 2. 使内核参数立即生效(无需重启系统)
sysctl -p
(4)配置LVS服务及调度规则(核心步骤)
bash 复制代码
# 1. 清空现有LVS规则(避免旧规则干扰,首次配置必执行)
ipvsadm -C
# 2. 创建虚拟服务器(VIP:端口),指定调度算法
# -A:添加虚拟服务器;-t:指定TCP协议;192.168.10.180:80:VIP和服务端口(HTTP默认80);-s rr:调度算法为轮询(rr)
ipvsadm -A -t 192.168.10.180:80 -s rr
# 3. 添加Real Server节点(192.168.10.16)
# -a:添加真实节点;-r 192.168.10.16:80:Real Server的IP和端口;-g:指定DR模式(Gateway模式)
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.16:80 -g
# 4. 添加Real Server节点(192.168.10.17)
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.17:80 -g
# 5. 查看LVS配置及节点状态(验证配置是否生效)
# -l:以列表形式显示;-n:不解析IP为域名(显示纯IP,更清晰);输出中"Route"表示DR模式
ipvsadm -ln

2.2 配置节点服务器(Real Server,IP:192.168.10.16 和 192.168.10.17)

两台Real Server配置完全一致,以下步骤同时在两台服务器执行
(1)配置VIP到lo接口(本地回环接口)
bash 复制代码
# 1. 进入网卡配置文件目录
cd /etc/sysconfig/network-scripts/
# 2. 复制lo接口配置文件,创建别名lo:0(lo接口是本地回环,配置VIP后可处理目标IP为VIP的数据包)
cp ifcfg-lo ifcfg-lo:0
# 3. 编辑lo:0配置文件
vim ifcfg-lo:0
# 配置文件内容(逐行注释)
DEVICE=lo:0              # lo接口的别名,用于绑定VIP
ONBOOT=yes               # 系统启动时自动激活
IPADDR=192.168.10.180    # 绑定VIP(与Director的VIP一致)
NETMASK=255.255.255.255  # 子网掩码设为255.255.255.255(主机路由,仅本机可见)

# 4. 激活lo:0接口(使配置生效)
ifup lo:0
# 5. 验证lo:0配置
ifconfig lo:0
# 6. 添加主机路由(指定VIP的数据包通过lo:0接口转发,确保本地处理VIP请求)
route add -host 192.168.10.180 dev lo:0
(2)调整ARP参数(避免MAC地址冲突,关键步骤)
bash 复制代码
# 1. 编辑内核参数配置文件
vim /etc/sysctl.conf
# 添加以下参数(逐行注释)
net.ipv4.conf.lo.arp_ignore = 1  # lo接口收到ARP请求时,仅响应目标IP为本地物理IP的请求(不响应VIP的ARP请求,避免暴露VIP)
net.ipv4.conf.lo.arp_announce = 2  # lo接口发送ARP广播时,仅通告本地物理IP(不通告VIP,防止其他设备缓存VIP的MAC为当前服务器)
net.ipv4.conf.all.arp_ignore = 1  # 所有接口遵循lo的ARP忽略规则
net.ipv4.conf.all.arp_announce = 2  # 所有接口遵循lo的ARP通告规则

# 2. 使内核参数立即生效
sysctl -p
(3)安装并配置Web服务(提供测试页面,验证负载均衡)
bash 复制代码
# 1. 安装httpd服务(Linux自带Web服务器,用于提供测试页面)
yum -y install httpd
# 2. 启动httpd服务
systemctl start httpd
# 3. 设置httpd开机自启(避免服务器重启后Web服务失效)
systemctl enable httpd

# 4. 创建测试页面(两台服务器的页面内容不同,便于验证轮询效果)
# 对于192.168.10.16服务器:
echo 'this is 192.168.10.16 web01!' > /var/www/html/index.html
# 对于192.168.10.17服务器:
echo 'this is 192.168.10.17 web02!' > /var/www/html/index.html

2.3 测试LVS群集(验证部署结果)

测试步骤:
  1. 打开客户端(192.168.10.200)的浏览器,输入URL:http://192.168.10.180/
  2. 首次访问应显示其中一台Web服务器的测试页面(如"this is 192.168.10.16 web01!")。
  3. 刷新浏览器(注意:LVS默认会话保持时间为50秒,需等待50秒后刷新,或清除浏览器缓存后刷新),应切换到另一台Web服务器的测试页面(如"this is 192.168.10.17 web02!"),说明轮询调度生效。
测试成功标准:
  • 客户端能通过VIP正常访问Web服务。
  • 多次刷新(间隔50秒以上)后,页面内容在两台Web服务器之间切换,证明负载均衡生效。

3. LVS相关面试知识点(DR模式重点)

3.1 LVS三种工作模式对比(重点关注DR模式)

模式 核心原理 优点 缺点
NAT(VS/NAT) Director修改数据包目标IP,Real Server响应包需返回Director 节点服务器可使用任意操作系统 Director是性能瓶颈(需处理所有请求和响应)
DR(VS/DR) Director仅修改数据包目标MAC,Real Server直接响应客户端 性能高(Director不处理响应),无瓶颈 节点服务器需与Director同网段
TUN(VS/TUN) Director封装IP包到隧道,Real Server解封后直接响应 节点服务器可跨网段部署 节点需支持IP隧道协议,配置复杂


3.2 LVS调度算法(DR模式常用算法)

算法类型 算法名称 核心描述 适用场景
固定调度 rr(轮询) 所有Real Server平均分配请求 节点服务器性能一致的场景
固定调度 wrr(加权轮询) 按权重分配请求,权重高的节点分配更多请求 节点服务器性能不一致的场景
固定调度 dh(目的地址哈希) 同一客户端请求始终分配到同一节点 需会话保持的场景(如购物车)
固定调度 sh(源地址哈希) 同一客户端请求始终分配到同一节点 需会话保持的场景
动态调度 lc(最少连接数) 优先分配请求到当前连接数最少的节点 请求连接时长不一致的场景
动态调度 wlc(加权最少连接) 结合权重和连接数,权重高、连接数少的节点优先分配 节点性能不一致且连接时长波动的场景
动态调度 lblc(基于地址的最少连接) 结合目的地址哈希和最少连接,兼顾会话保持和负载均衡 大型分布式集群场景

3.3 Nginx vs LVS vs HAProxy 核心区别(DR模式LVS定位)

特性 Nginx LVS(DR模式) HAProxy
定位 Web服务器+反向代理+负载均衡 内核级四层负载均衡 专业四层+七层负载均衡器
工作层级 四层(TCP)+ 七层(HTTP/HTTPS) 四层(TCP/UDP,传输层) 四层+七层
性能 高(软件级,单机十万级并发) 极高(内核态转发,单机百万级并发) 高(接近Nginx,专注负载均衡)
核心优势 功能丰富(静态资源、缓存、反向代理),易上手 性能最强、稳定性高,无响应转发瓶颈 健康检查强大,支持会话保持、SSL卸载
核心劣势 七层性能不如LVS/HAProxy 仅支持四层,功能单一,配置复杂 不自带Web服务,依赖其他组件提供内容
适用场景 Web代理、动静分离、中小型集群 超大规模集群、核心业务四层调度 高可用集群、对健康检查要求高的业务
一句话总结:

DR模式LVS是极致性能的四层负载均衡方案,适合超大规模集群的核心调度场景,但功能单一,需配合Web服务器(如httpd、Nginx)使用;若需兼顾Web服务和中小型负载均衡,可选择Nginx;若需强大的健康检查和七层调度,可选择HAProxy。

总结

DR 模式作为 LVS 负载均衡群集中的核心应用模式,其 "请求经调度器转发、响应由节点直连客户端" 的设计,从根本上解决了传统 NAT 模式下调度器的响应瓶颈问题,凭借内核态转发的高性能优势,成为支撑超大规模集群稳定运行的关键技术之一。通过前文的梳理可知,DR 模式的价值不仅体现在 "百万级并发处理" 的性能表现上,更在于其对资源的高效利用 ------ 调度器仅负责修改数据包 MAC 地址,无需承担响应转发压力,让后端 Real Server 的算力得以充分释放。

相关推荐
2501_939909052 小时前
LVS+Keepalived群集
lvs
伞啊伞2 小时前
安装与配置 LVS + Keepalived
lvs
默恋~微凉2 小时前
LVS+keepalived
lvs
伞啊伞3 小时前
LVS-DR 模式负载均衡群集
智能路由器·负载均衡·lvs
不想画图3 小时前
负载均衡——LVS+Keepalived群集部署
运维·负载均衡·lvs
可爱又迷人的反派角色“yang”11 小时前
LVS+Keepalived群集
linux·运维·服务器·前端·nginx·lvs
Q鑫6 天前
LVS/Nginx/Haproxy+keepalived负载均衡集群工作原理
nginx·负载均衡·lvs
yifengyiyufjq8 天前
基于 CentOS 7 搭建 LVS 负载均衡(NAT 模式)搭建指南
centos·负载均衡·lvs
Aiden1212111 天前
LVS+Keepalived
lvs