当前位置: 首页 > news >正文

LVS:Linux 内核级负载均衡的架构设计、三种工作模式与十大调度算法详解

全面理解 LVS:Linux 内核级负载均衡的架构设计、三种工作模式与十大调度算法详解

一、LVS简介

LVS(Linux Virtual Server,Linux虚拟服务器)是由章文嵩博士主导的开源负载均衡项目,目前已集成到Linux内核模块中,核心是在IP层实现数据请求的负载均衡调度,为大规模服务器集群提供高可用、高并发的访问能力。

核心逻辑

终端用户访问LVS调度器(Director Server)的虚拟IP(VIP),调度器根据预设算法将请求分发至后端真实服务器(Real Server,RS);所有RS提供一致的服务(如Web、数据库)并共享存储资源,整个集群对用户完全透明(用户感知不到多台RS的存在)。

关键术语

  • VIP(Virtual IP):虚拟服务IP,对外提供服务的统一入口,用户仅需访问此IP。
  • RIP(Real IP):后端真实服务器(RS)的IP,仅用于集群内部通信。
  • DIP(Director IP):调度器(Director)的内网IP,用于与后端RS通信。
  • LB(Load Balancer):负载均衡器,即LVS调度器,负责请求分发。
  • RS(Real Server):后端真实服务器,实际处理用户请求。

官方资源

  • 官方站点:http://www.linuxvirtualserver.org

二、LVS体系结构

在这里插入图片描述

LVS集群系统由三层架构组成,各层分工明确,确保高可用与高扩展性,整体架构对用户透明。

层级核心组件功能说明
负载均衡层(Load Balancer)1-多台调度器(Director Server)1. 接收用户请求(目标IP为VIP);
2. 按算法分发请求至RS;
3. 监控RS健康状态(通过ldirectord模块);
4. 剔除故障RS,恢复后重新加入集群。
服务器群组层(Server Array)多台真实服务器(RS)1. 运行实际业务服务(Web、Mail、FTP等);
2. 处理调度器分发的请求;
3. 支持跨系统(Linux、Windows、Solaris等)。
数据共享存储层(Shared Storage)磁盘阵列、集群文件系统1. 为所有RS提供统一共享存储(避免数据不一致);
2. 常用方案:NFS(简单场景)、GFS(RedHat)、OCFS2(Oracle,高并发场景)。

架构注意事项

  • 调度器(Director)仅支持Linux/FreeBSD系统(Linux 2.6+内核默认集成LVS模块),RS支持任意操作系统。
  • 调度器可同时兼任RS角色(小规模集群场景),但会增加调度器负载,不建议大规模使用。

三、LVS管理工具

LVS的管理依赖内核模块(ipvs)用户空间工具(ipvsadm) 配合,ipvs实现核心转发逻辑,ipvsadm用于配置与管理集群。

1. 核心组件分工

组件运行位置核心作用
ipvs内核空间1. 实现IP层负载均衡转发;
2. 维护虚拟服务(VIP:Port)与真实服务(RIP:Port)的映射关系;
3. 执行调度算法(如轮询、最少连接)。
ipvsadm用户空间1. 命令行工具,用于配置/修改/删除虚拟服务与RS;
2. 查看集群状态、保存/重载配置;
3. 是用户操作LVS的唯一入口。

2. ipvsadm核心命令与参数

ipvsadm命令格式:ipvsadm [选项] [参数],关键参数按功能分类如下:

(1)虚拟服务管理(集群级配置)
选项含义示例(添加TCP虚拟服务,轮询算法)
-A添加虚拟服务ipvsadm -A -t 192.168.100.100:80 -s rr
-E修改已存在的虚拟服务ipvsadm -E -t 192.168.100.100:80 -s wrr
-D删除虚拟服务ipvsadm -D -t 192.168.100.100:80
-C清空所有虚拟服务配置ipvsadm -C
-L/-l列出虚拟服务与RS状态ipvsadm -Ln-n:IP/端口不解析为域名,加速显示)
-S保存配置到标准输出ipvsadm -Sn > /etc/sysconfig/ipvsadm(推荐保存路径)
-R从标准输入重载配置ipvsadm -R < /etc/sysconfig/ipvsadm
(2)真实服务(RS)管理(服务级配置)
选项含义示例(添加RS到虚拟服务,DR模式)
-a为虚拟服务添加RSipvsadm -a -t 192.168.100.100:80 -r 192.168.100.20:80 -g
-e修改已存在的RSipvsadm -e -t 192.168.100.100:80 -r 192.168.100.20:80 -w 2(调整权重为2)
-d从虚拟服务删除RSipvsadm -d -t 192.168.100.100:80 -r 192.168.100.20:80
(3)模式与权重参数
选项含义适用场景
-t指定虚拟服务为TCP协议Web(80/443)、SSH(22)等TCP服务
-u指定虚拟服务为UDP协议DNS(53)、NTP(123)等UDP服务
-r指定RS的IP:Port若端口与虚拟服务一致,可省略端口(如-r 192.168.100.20
-g转发模式为DR(默认)DR模式(同网段、高性能场景)
-i转发模式为TUNTUN模式(跨网段、大规模集群)
-m转发模式为NATNAT模式(小规模、简单部署场景)
-w指定RS权重(默认1)权重越高,接收的请求越多(适合RS性能差异大的场景)

3. 配置保存与重载

LVS配置默认保存在内存中,重启后丢失,需手动保存到文件:

# 保存配置(推荐路径:/etc/sysconfig/ipvsadm)
ipvsadm -Sn > /etc/sysconfig/ipvsadm# 重载配置(重启ipvsadm服务也会自动加载此文件)
systemctl restart ipvsadm
# 或手动重载
ipvsadm -R < /etc/sysconfig/ipvsadm

四、LVS工作模式及原理

LVS核心工作模式分为NAT模式DR模式TUN模式,三者在转发方式、网段要求、性能表现上差异显著,需根据业务场景选择。

1. NAT模式(Network Address Translation)

在这里插入图片描述

核心原理:地址转换

通过修改IP地址实现请求转发,所有流量(请求+回包)均需经过调度器(LB),是最易部署的模式。

转发流程(以HTTP请求为例)
  1. 客户端请求:客户端发送请求,目标IP=VIP(如172.16.30.10),目标端口=80,源IP=CIP(客户端IP)。
  2. LB转发请求:LB接收请求后,按算法选择RS(如192.168.100.20),将请求的目标IP改为RIP,目标端口不变,转发给RS。
  3. RS处理请求:RS接收请求(目标IP=自身RIP),处理后生成回包,源IP=RIP,目标IP=CIP;因RS网关指向LB的DIP,回包发送至LB。
  4. LB回包给客户端:LB接收RS回包,将源IP改为VIP,目标IP=CIP,转发给客户端。
关键配置要求
  • RS的默认网关必须指向LB的DIP(否则回包无法送达LB)。
  • LB需双网卡:一张网卡绑定VIP(对外),一张绑定DIP(对内与RS通信)。
优缺点与适用场景
优点缺点适用场景
1. 部署简单,无需特殊配置RS;
2. RS支持任意操作系统;
3. 仅需LB配置公网IP。
1. 所有流量经LB,高并发时LB易成瓶颈;
2. 最多支持10-20台RS。
小规模集群(如测试环境、小型Web服务)

2. DR模式(Direct Routing,直接路由)

在这里插入图片描述

核心原理:MAC地址修改

仅修改数据帧的目标MAC地址(改为RS的MAC),不修改IP地址,RS处理后直接回包给客户端(不经过LB),是性能最优的模式。

转发流程
  1. 客户端请求:客户端发送请求,目标IP=VIP,目标MAC=LB的MAC(客户端通过ARP请求获取VIP的MAC)。
  2. LB转发请求:LB接收请求后,按算法选择RS,将数据帧的目标MAC改为RS的MAC,IP地址不变(仍为VIP→CIP),转发给RS。
  3. RS处理请求:RS接收请求(目标MAC=自身,目标IP=VIP),因RS的lo接口已配置VIP(仅本机可见),可正常处理;回包直接发送给客户端(源IP=VIP,目标IP=CIP),不经过LB。
关键配置要求
  • ARP抑制:RS需配置内核参数(arp_ignore=1arp_announce=2),避免RS响应客户端对VIP的ARP请求(防止客户端直接与RS通信,绕开LB)。
  • 同网段要求:LB与RS必须在同一物理网段(MAC地址仅在同网段有效)。
  • VIP配置:LB与所有RS均需在lo接口配置VIP(掩码/32,仅本机可见)。
优缺点与适用场景
优点缺点适用场景
1. 性能最优,仅请求经LB,回包直连客户端;
2. 支持大规模RS(无LB瓶颈)。
1. 需配置ARP抑制,部署较复杂;
2. LB与RS必须同网段。
中大规模集群(如高并发Web服务、电商平台)

3. TUN模式(IP Tunneling,IP隧道)

在这里插入图片描述

核心原理:IP隧道封装

通过“IP隧道”封装请求(双层IP头),实现跨网段转发,RS处理后直接回包给客户端,解决DR模式“同网段”限制。

转发流程
  1. 客户端请求:客户端发送请求,目标IP=VIP,源IP=CIP。
  2. LB封装隧道:LB接收请求后,按算法选择RS,在原IP头外层新增一层IP头(源IP=LB的DIP,目标IP=RS的RIP),形成“IP隧道”,转发给RS。
  3. RS解封装与处理:RS接收隧道包后,解封装外层IP头,发现内层目标IP=自身lo接口的VIP,处理请求;回包直接发送给客户端(不经过LB)。
关键配置要求
  • IPIP模块:LB与RS需加载ipip内核模块(支持IP隧道协议),RS需在tunl0(隧道设备)配置VIP。
  • 反向路径过滤:RS需关闭rp_filter(反向路径过滤,设为0),避免内核丢弃隧道包(隧道包源IP与接收接口路由不匹配)。
  • RS公网IP:RS需有公网IP(或能直接与客户端通信的IP),否则无法直连客户端。
优缺点与适用场景
优点缺点适用场景
1. 支持跨网段部署(RS可分布在不同地域);
2. 性能接近DR,无LB瓶颈。
1. 需加载IPIP模块,部署复杂;
2. RS需支持IP隧道协议(主要为Linux)。
超大规模集群(如跨地域分布式服务、CDN)

4. 三种模式核心差异对比

特性NAT模式DR模式TUN模式
转发方式IP地址修改(目标→RIP,源→VIP)MAC地址修改(目标→RS的MAC)IP隧道封装(双层IP头)
流量路径客户端→LB→RS→LB→客户端客户端→LB→RS→客户端客户端→LB→RS→客户端
LB负载高(所有流量经LB)低(仅请求经LB)低(仅请求经LB)
网段要求无(RS可跨网段)必须同网段无(支持跨网段)
RS配置复杂度低(仅需设网关)中(ARP抑制+VIP配置)高(IPIP模块+关闭rp_filter)
最大RS数量10-20台数百台数千台

五、LVS调度算法

LVS调度算法分为静态算法(仅按预设规则分发,不考虑RS负载)和动态算法(根据RS实时负载调整分发),共10种,需根据业务场景选择。

1. 静态调度算法(4种)

静态算法不感知RS的实时负载(如连接数、CPU使用率),仅按固定规则分发请求,适合RS性能一致的场景。

算法名称英文缩写核心逻辑适用场景
轮询调度RR均等分发请求,每台RS接收请求数相同,不考虑负载。RS性能完全一致(如相同配置的Web服务器)
加权轮询WRR按RS权重分发请求,权重越高,接收请求越多(权重可手动配置)。RS性能差异大(如高配服务器权重高)
源地址散列调度SH根据客户端IP(CIP)通过散列函数映射到固定RS,相同CIP始终访问同一RS。需会话保持的场景(如登录状态、购物车)
目标地址散列调度DH根据目标IP(如VIP或请求的域名解析IP)映射到固定RS,相同目标IP访问同一RS。反向代理、DNS服务(需固定IP-RS映射)

2. 动态调度算法(6种)

动态算法实时感知RS的负载(如连接数、响应时间),优先将请求分发至负载较低的RS,适合RS负载波动大的场景。

算法名称英文缩写核心逻辑适用场景
最少连接调度LC优先将请求分发至当前连接数最少的RS,不考虑权重。RS性能一致,负载波动大(如突发流量)
加权最少连接WLC结合权重与连接数,公式:(当前连接数/权重),值越小的RS优先接收请求。RS性能差异大,需动态调整负载(推荐首选)
基于局部性的最少连接LBLC对相同目标IP(如用户访问的页面IP),优先分发至之前处理过该IP的RS(利用缓存),若该RS负载过高则选择其他RS。静态资源服务(如图片、CSS,利用缓存加速)
复杂的基于局部性最少连接LBLCR维护“目标IP→RS组”的映射,而非“目标IP→单RS”,避免单RS负载过高。大规模静态资源服务(如CDN节点)
最少期望延迟SED不考虑非活动连接,按公式(当前活动连接数+1)/权重计算,值越小的RS优先接收请求(权重高的RS更易被选中)。高并发场景,需优先调度高性能RS
永不排队NQ若存在RS的当前连接数为0,直接将请求分发至该RS,无需排队;无空闲RS时按SED算法调度。低延迟要求场景(如实时通信、交易系统)

3. 算法选择建议

  • 小规模测试环境:优先RR(简单易理解)。
  • 生产环境(RS性能一致):优先LC(动态适应负载)。
  • 生产环境(RS性能差异大):优先WLC(兼顾权重与负载)。
  • 需会话保持:优先SH(基于客户端IP)。
  • 静态资源/CDN:优先LBLC/LBLCR(利用缓存)。

六、配置 LVS-NAT 模式的 HTTPD 负载集群(HTTP)

环境说明核心逻辑

LVS-NAT 模式的核心是地址转换:客户端请求先发给 DR(调度器)的 VIP,DR 将目标 IP(VIP)转换为后端 RS 的 RIP,转发请求;RS 处理后,回包通过 DR(因 RS 网关指向 DR 的 DIP),DR 再将源 IP(RIP)转换为 VIP,返回客户端。所有流量需经过 DR,因此 DR 可能成为瓶颈,但配置简单,适合小规模集群。

主机名称网卡信息(ens160为nat、ens192为仅主机)核心作用
Client客户端192.168.100.200(ens160)(仅访问 VIP)发起 HTTP 请求,验证负载均衡
DRDIP:192.168.100.10,集群内;VIP:172.16.30.10,客户端访问入口接收请求、地址转换、调度 RS
RS1/RS2RIP:192.168.100.20/30(ens33)运行 HTTPD,处理请求并回包给 DR
1、DR、RS1、RS2三台主机都关闭防火墙和selinux
[root@dr ~]# systemctl stop firewalld  // 临时关闭防火墙(立即生效,重启失效)
[root@dr ~]# systemctl disable firewalld  
// 永久关闭防火墙(重启后生效)
[root@dr ~]# cat /etc/sysconfig/selinux 
SELINUX=disabled  // 永久关闭SELinux(需重启系统生效,临时关闭用setenforce 0)// RS1、RS2操作同上
[root@rs1 ~]# systemctl stop firewalld
[root@rs1 ~]# systemctl disable firewalld
[root@rs1 ~]# cat /etc/sysconfig/selinux 
SELINUX=disabled[root@rs2 ~]# systemctl stop firewalld
[root@rs2 ~]# systemctl disable firewalld
[root@rs2 ~]# cat /etc/sysconfig/selinux 
SELINUX=disabled
  • 防火墙会拦截 LVS 转发的流量(如 80 端口)和集群内通信,SELinux 是 Linux 安全策略,会限制服务端口和 IP 转发,因此必须关闭(测试环境,生产环境需精细化放行规则)。
  • 若仅执行stop不执行disable,服务器重启后防火墙会重新启动,导致集群失效。
2、配置ip信息
DR 配置(双 IP:DIP+VIP)
[root@dr ~]# nmcli connection add con-name ens36 ifname ens36 type ethernet  // 创建新网卡连接(ens36为新增物理/虚拟网卡)
[root@dr ~]# nmcli connection modify ens36 ipv4.addresses 172.16.30.10/24 ipv4.method manual connection.autoconnect yes  
// 配置VIP(172.16.30.10),手动IP,开机自启
[root@dr ~]# nmcli connection up ens36  // 激活网卡连接(立即生效VIP)
  • DR 需要两个 IP:DIP(192.168.100.10)用于和后端 RS 通信,VIP(172.16.30.10)用于接收客户端请求,因此需新增网卡(ens36)绑定 VIP。
RS1/RS2 配置(RIP + 网关指向 DIP)
// RS1配置
[root@rs1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33  // 编辑网卡配置文件
...
IPADDR=192.168.100.20  // 配置RIP(集群内唯一标识)
PREFIX=24  // 子网掩码(255.255.255.0)
GATEWAY=192.168.100.10  // 网关必须指向DR的DIP!NAT模式下RS回包需经DR转发
[root@rs1 ~]# systemctl restart network  
// 重启网络服务// RS2配置(同RS1,仅RIP不同)
[root@rs2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
...
IPADDR=192.168.100.30
PREFIX=24
GATEWAY=192.168.100.10
[root@rs2 ~]# systemctl restart network
  • RS 的网关必须指向 DR 的 DIP,这是 NAT 模式的核心:RS 处理完请求后,会将回包发给网关(DR),由 DR 转换源 IP(RIP→VIP)后返回客户端,若网关错误,回包无法到达客户端。
3. 后端 RS1 和 RS2 部署 WEB 服务器(HTTPD)
// RS1部署
[root@rs1 ~]# yum -y install httpd  // 安装Apache(HTTPD)服务
[root@rs1 ~]# echo RS1 > /var/www/html/index.html  // 写入测试页面(标识当前RS,方便验证负载均衡)
[root@rs1 ~]# systemctl restart httpd  // 重启HTTPD服务
[root@rs1 ~]# systemctl enable httpd  // 设置HTTPD开机自启(避免重启后服务停止)// RS2部署(同RS1,仅测试页面不同)
[root@rs2 ~]# yum -y install httpd  // 原步骤写“root@rs1”,属于笔误,需改为root@rs2
[root@rs2 ~]# echo RS2 > /var/www/html/index.html  // 测试页面写RS2,与RS1区分
[root@rs2 ~]# systemctl restart httpd.service 
[root@rs2 ~]# systemctl enable httpd.service

备注

  • 后端 RS 的核心作用是提供 WEB 服务,因此需安装 HTTPD;测试页面写入 “RS1/RS2”,是为了客户端访问时能直观看到请求被调度到哪个 RS,验证负载均衡是否生效。
4. 配置 DR(核心:开启转发 + 添加 LVS 规则)
(1)开启 IP 转发功能
[root@dr ~]# vim /etc/sysctl.conf  // 编辑内核参数配置文件(原步骤写sysctl.con,少f,需修正)
net.ipv4.ip_forward = 1  // 开启IPv4转发功能(NAT模式必须,否则DR无法转发流量)
[root@dr ~]# sysctl -p  // 加载内核参数(立即生效,无需重启系统)
net.ipv4.ip_forward = 1
  • Linux 默认关闭 IP 转发(net.ipv4.ip_forward=0),DR 作为调度器需要转发客户端→RS、RS→客户端的流量,因此必须开启转发;sysctl -p用于让修改后的内核参数立即生效,避免重启系统。
(2)安装 ipvsadm 并添加 LVS 规则
[root@dr ~]# yum -y install ipvsadm  // 安装LVS管理工具(ipvsadm是操作LVS内核模块的命令)
// 添加LVS规则:将VIP:80的请求调度到RS1:80,模式为NAT(-m)
[root@dr ~]# ipvsadm -a -t 172.16.30.10:80 -r 192.168.100.20:80 -m 
// 添加LVS规则:将VIP:80的请求调度到RS2:80,模式为NAT(-m)
[root@dr ~]# ipvsadm -a -t 172.16.30.10:80 -r 192.168.100.30:80 -m 
// 查看LVS规则(-L:列表,-n:IP不解析为域名,-v:详细信息)
[root@dr ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.30.10:80 rr  // rr:轮询调度(Round Robin),请求依次分配给RS1、RS2-> 192.168.100.20:80            Masq    1      0          0  // Masq即NAT模式,Weight=1(权重,默认1)-> 192.168.100.30:80            Masq    1      0          0  // 保存LVS规则到配置文件(避免重启后规则丢失)
[root@dr ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
// 重启ipvsadm服务(加载保存的规则)
[root@dr ~]# systemctl restart ipvsadm.service 
// 设置ipvsadm开机自启(确保重启后规则自动加载)
[root@dr ~]# systemctl enable ipvsadm.service  
  • ipvsadm是 LVS 的核心工具,常用参数含义:
    • -A:添加虚拟服务(如 VIP: 端口);
    • -a:给虚拟服务添加后端 RS;
    • -t:指定虚拟服务类型为 TCP(VIP: 端口);
    • -r:指定后端 RS 的 IP: 端口;
    • -m:指定转发模式为 NAT(Masquerade);
    • -s rr:指定调度算法为轮询(默认,适合 RS 性能一致的场景)。
  • ipvsadm -Sn > /etc/sysconfig/ipvsadm:将当前规则保存到默认配置文件,systemctl restart ipvsadm会自动加载该文件的规则,避免重启后规则丢失。
5. 客户端上测试
[root@hrz4 ~]# curl http://172.16.30.10  // 访问DR的VIP(HTTP端口80)
RS1  // 第一次请求调度到RS1
[root@hrz4 ~]# curl http://172.16.30.10
RS2  // 第二次请求调度到RS2(轮询生效)
[root@hrz4 ~]# curl http://172.16.30.10
RS1
[root@hrz4 ~]# curl http://172.16.30.10
RS2
  • 客户端需能访问 DR 的 VIP(172.16.30.10),通过curl命令发送 HTTP 请求,若返回结果轮询显示 “RS1”“RS2”,说明 LVS-NAT 模式的 HTTP 负载均衡已生效。

七、配置 LVS-NAT 模式的 HTTPD 负载集群(HTTPS)

1. DR 中生成 CA 根证书(自签名)
[root@dr ~]# mkdir -p /etc/pki/CA/private  // 创建CA证书存储目录(原步骤写privat,少e,需修正)
[root@dr ~]# cd /etc/pki/CA/
// 生成CA私钥(umask 077:仅root可读可写,避免私钥泄露;2048位:密钥长度,安全足够)
[root@dr CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus
...// 查看CA公钥(可选,验证私钥生成成功)
[root@dr CA]# openssl rsa -in private/cakey.pem -pubout
writing RSA key
-----BEGIN PUBLIC KEY-----
...  // 公钥内容
-----END PUBLIC KEY-----// 生成CA根证书(自签名,-x509:生成自签名证书;-days 1024:证书有效期1024天)
[root@dr CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 1024
You are about to be asked to enter information that will be incorporated
into your certificate request.
...
Country Name (2 letter code) [XX]:CN  // 国家(2位代码,如CN)
State or Province Name (full name) []:HB  // 省份
Locality Name (eg, city) [Default City]:WH  // 城市
Organization Name (eg, company) [Default Company Ltd]:LQ  // 组织/公司名
Organizational Unit Name (eg, section) []:linux  // 部门
Common Name (eg, your name or your server's hostname) []:dr.example.com  // CA的Common Name(需唯一,如DR的域名)
Email Address []:hrz@example.com  // 邮箱// 创建CA证书数据库文件(记录已签署的证书)
[root@dr CA]# touch index.txt
// 创建证书序列号文件(初始为01,下次签署自动递增)
[root@dr CA]# echo 01 > serial 
[root@dr CA]# ls
cacert.pem  certs  crl  index.txt  newcerts  private  serial  // 生成的CA文件
  • CA(Certificate Authority)是证书颁发机构,自签名 CA 适用于测试环境;生产环境需使用公信 CA(如 Let’s Encrypt)。
  • 私钥文件(cakey.pem)必须严格权限(umask 077),避免泄露导致证书被伪造;index.txtserial是 CA 签署证书的必要文件,缺少会导致签署失败。
2. RS1 生成证书请求(CSR)并发送给 CA
[root@rs1 ~]# yum -y install mod_ssl  // 安装Apache的SSL模块(支持HTTPS)
[root@rs1 ~]# cd /etc/httpd/ 
[root@rs1 httpd]# mkdir ssl  // 创建RS证书存储目录(原步骤写“cd /etc/httpd/ ”后直接“mkdir ssl”,需补全路径)
[root@rs1 httpd]# cd ssl
// 生成RS1的私钥(仅root可读可写)
[root@rs1 ssl]# (umask 077;openssl genrsa -out httpd.key 2048)
// 生成证书请求(CSR,发送给CA签署)
[root@rs1 ssl]# openssl req -new -key httpd.key -days 1024 -out httpd.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
...
Country Name (2 letter code) [XX]:CN  // 需与CA的国家一致
State or Province Name (full name) []:HB  // 需与CA的省份一致
Locality Name (eg, city) [Default City]:WH  // 需与CA的城市一致
Organization Name (eg, company) [Default Company Ltd]:LQ  // 需与CA的组织一致
Organizational Unit Name (eg, section) []:linux  // 需与CA的部门一致
Common Name (eg, your name or your server's hostname) []:rs1.example.com  // RS1的Common Name(需唯一,如RS1的域名)
Email Address []:hrz2@example.com  // 邮箱(可与CA不同)Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:  // 证书密码(测试环境可留空)
An optional company name []:  // 可选公司名(留空)[root@rs1 ssl]# ls
httpd.csr  httpd.key  // 生成的CSR和私钥
// 将CSR发送给DR(CA)(通过scp,需DR的root密码)
[root@rs1 ssl]# scp httpd.csr root@192.168.100.10:/root/
root@192.168.100.10's password: 
httpd.csr 100% 1037     1.0MB/s   00:00    
  • mod_ssl是 Apache 支持 HTTPS 的核心模块,必须安装;CSR(Certificate Signing Request)包含 RS 的公钥和身份信息,需发送给 CA 签署后才能生成可用证书。
  • CSR 中的 “Country/State/Locality/Organization/Organizational Unit” 需与 CA 的信息一致,否则 CA 会拒绝签署;“Common Name” 需为 RS 的域名或 IP,用于客户端验证服务器身份。
3. CA(DR)签署证书并发给 RS1
[root@dr CA]# cd  // 回到DR的root目录(CSR已发送到这里)
// CA签署CSR,生成RS1的证书(-in:CSR文件;-out:生成的证书;-days:有效期)
[root@dr ~]# openssl ca -in httpd.csr -out httpd.crt -days 1024
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok  // 签名验证通过
Certificate Details:Serial Number: 1 (0x1)  // 证书序列号(从serial文件读取,初始01)ValidityNot Before: Sep 22 10:16:57 2025 GMT  // 生效时间Not After : Jul 12 10:16:57 2028 GMT  // 过期时间(1024天)Subject:  // RS1的身份信息(与CSR一致)countryName               = CNstateOrProvinceName       = HBorganizationName          = LQorganizationalUnitName    = linuxcommonName                = rs1.example.comemailAddress              = hrz2.example.com...
Certificate is to be certified until ... (1024 days)
Sign the certificate? [y/n]:y  // 确认签署
1 out of 1 certificate requests certified, commit? [y/n]y  // 确认提交(更新index.txt和serial)
Write out database with 1 new entries
Data Base Updated  // 签署成功
  • 签署过程中,OpenSSL 会验证 CSR 的签名和身份信息(与 CA 一致),验证通过后生成证书(httpd.crt);此时index.txt会记录该证书信息,serial会自动递增为 02(下次签署用)。
  • 签署后的证书(httpd.crt)需发送回 RS1(原步骤未写,需补充:scp httpd.crt root@192.168.100.20:/etc/httpd/ssl/),RS1 需用该证书和自身私钥启用 HTTPS。
4. RS2 配置 HTTPS(复用 RS1 的证书,测试环境)
// RS2安装SSL模块并创建证书目录
[root@rs2 ~]# yum -y install mod_ssl
[root@rs2 ~]# mkdir /etc/httpd/ssl// RS1将证书和私钥发送给RS2(测试环境可复用,生产环境需单独生成CSR签署)
[root@rs1 ssl]# scp httpd.crt cacert.pem httpd.key root@192.168.100.30:/etc/httpd/ssl/
root@192.168.100.30's password: 
httpd.crt 100% 4565     6.8MB/s   00:00    
httpd.key 100% 1675     2.4MB/s   00:00 
  • 测试环境为简化操作,RS2 复用 RS1 的证书;生产环境中,每个 RS 需单独生成 CSR 并由 CA 签署,确保证书与服务器身份一致(避免客户端验证警告)。
5. 修改 RS1 的 SSL 配置文件并发给 RS2
[root@rs1 ssl]# vim /etc/httpd/conf.d/ssl.conf  // 编辑Apache的SSL配置文件
// 关键配置项修改(指定证书和私钥路径):
// 1. 服务器证书路径(CA签署后的证书)
SSLCertificateFile /etc/httpd/ssl/httpd.crt// 2. 服务器私钥路径(RS自身生成的私钥)
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key// 3. CA根证书路径(客户端验证服务器证书时,需信任该CA)
// SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt  // 注释默认链文件
SSLCACertificateFile /etc/httpd/ssl/cacert.pem  // 指向CA的根证书(需从DR复制到RS1的ssl目录:scp root@192.168.100.10:/etc/pki/CA/cacert.pem /etc/httpd/ssl/)// 将修改后的ssl.conf发送给RS2(确保RS2配置一致)
[root@rs1 ssl]# scp /etc/httpd/conf.d/ssl.conf root@192.168.100.30:/etc/httpd/conf.d/ssl.conf
root@192.168.100.30's password: 
ssl.conf 100% 9472    11.3MB/s   00:00  
  • ssl.conf

    是 Apache SSL 模块的核心配置文件,需指定 3 个关键文件:

    • SSLCertificateFile:RS 的服务器证书(CA 签署后);
    • SSLCertificateKeyFile:RS 的私钥;
    • SSLCACertificateFile:CA 的根证书(客户端需信任该证书,否则会提示 “证书不受信任”)。
6. 重启 RS1、RS2 的 HTTPD 服务并验证
// RS1重启HTTPD(加载SSL配置)
[root@rs1 ssl]# systemctl restart httpd// RS2重启HTTPD并验证443端口(HTTPS默认端口)
[root@rs2 ssl]# systemctl restart httpd
[root@rs2 ssl]# ss -tnl | grep 443  // 查看443端口是否监听(-t:TCP,-n:数字端口,-l:监听状态)
LISTEN     0      128         :::443                     :::*    // 443端口已监听,HTTPS服务就绪 
  • 重启 HTTPD 后,Apache 会同时监听 80(HTTP)和 443(HTTPS)端口;ss -tnl | grep 443用于验证 443 端口是否正常监听,若无输出,需检查 ssl.conf 配置是否正确(如文件路径错误)。
7. DR 中添加 HTTPS(443 端口)的 LVS 规则
// 添加虚拟服务:VIP:443(HTTPS端口),调度算法rr(轮询)
[root@dr CA]# ipvsadm -A -t 172.16.30.10:443 -s rr 
// 添加RS1:将VIP:443的请求调度到RS1:443,模式NAT(-m)
[root@dr CA]# ipvsadm -a -t 172.16.30.10:443 -r 192.168.100.20 -m  // 可省略:443(默认)
// 添加RS2:将VIP:443的请求调度到RS2:443,模式NAT(-m)
[root@dr CA]# ipvsadm -a -t 172.16.30.10:443 -r 192.168.100.30 -m // 查看LVS规则(确认80和443端口规则均存在)
[root@dr CA]# ipvsadm -Ln 
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.30.10:80 rr  // HTTP规则(原配置)-> 192.168.100.20:80            Masq    1      0          0         -> 192.168.100.30:80            Masq    1      0          0         
TCP  172.16.30.10:443 rr  // HTTPS规则(新添加)-> 192.168.100.20:443           Masq    1      0          0         -> 192.168.100.30:443           Masq    1      0          0  
  • HTTPS 的 LVS 规则与 HTTP 类似,仅端口从 80 改为 443;-m仍为 NAT 模式,因为 RS 的网关仍指向 DR,回包需经 DR 转发。
  • 若需永久保存规则,需再次执行ipvsadm -Sn > /etc/sysconfig/ipvsadm,避免重启后规则丢失。
8. 客户端测试 HTTPS 负载均衡
// curl -k:忽略证书验证(因使用自签名CA,客户端未信任,需加-k)
[root@hrz4 ~]# curl -k https://172.16.30.10:443
RS2  // 第一次调度到RS2
[root@hrz4 ~]# curl -k https://172.16.30.10:443
RS1  // 第二次调度到RS1(轮询生效)
[root@hrz4 ~]# curl -k https://172.16.30.10:443
RS2
[root@hrz4 ~]# curl -k https://172.16.30.10:443
RS1
  • curl -k用于忽略 “证书不受信任” 的警告(测试环境);生产环境需将 CA 根证书导入客户端(如浏览器),无需加-k
  • 若返回结果轮询显示 “RS1”“RS2”,说明 LVS-NAT 模式的 HTTPS 负载均衡已生效。

八、配置 LVS-DR 模式的 HTTPD 负载集群

核心逻辑

LVS-DR(Direct Routing,直接路由)模式是性能最优的 LVS 模式:客户端请求发给 DR 的 VIP,DR 仅修改数据帧的 MAC 地址(将目标 MAC 改为 RS 的 MAC),不修改 IP(VIP 仍为目标 IP),RS 接收后直接回包给客户端(无需经 DR)。因此 DR 仅处理入站请求,不处理回包,无瓶颈,但要求 DR 和 RS 必须在同一网段(因 MAC 地址仅在同网段有效)。

核心问题:所有 RS 和 DR 都配置了 VIP(避免客户端 ARP 请求冲突),需通过ARP 抑制(内核参数)确保客户端仅将 VIP 的 ARP 请求发送给 DR。

主机角色关键 IP 说明核心作用
Client(客户端)192.168.100.200发起 HTTP 请求,验证负载均衡
DR(调度器)DIP : 192.168.100.10 ; VIP : 192.168.100.100修改 MAC 转发请求,不处理回包
RS1/RS2(后端)RIP : 192.168.100.20/30 ; VIP : 192.168.100.100 (配置在 lo 接口)处理请求,直接回包给客户端
1. 后端 RS1、RS2 部署 HTTPD(同 NAT 模式)

RS1

[root@rs1 ~]# systemctl stop firewalld
[root@rs1 ~]# systemctl disable firewalld
[root@rs1 ~]# cat /etc/sysconfig/selinux 
SELINUX=disabled[root@rs1 ~]# yum install httpd -y
[root@rs1 ~]# echo RS1 > /var/www/html/index.html
[root@rs1 ~]# systemctl restart httpd.service 
[root@rs1 ~]# systemctl enable httpd.service 

RS2

[root@rs2 ~]# systemctl stop firewalld
[root@rs2 ~]# systemctl disable firewalld
[root@rs2 ~]# cat /etc/sysconfig/selinux 
SELINUX=disabled[root@rs2 ~]# yum install httpd -y
[root@rs2 ~]# echo RS1 > /var/www/html/index.html
[root@rs2 ~]# systemctl restart httpd.service 
[root@rs2 ~]# systemctl enable httpd.service 
  • DR 模式下 RS 无需配置网关指向 DR(因 RS 直接回包给客户端),仅需确保与客户端、DR 在同一网段。

LVS上配置ip:

2. DR 配置(关闭防火墙 + 配置 VIP + 开启转发)
(1)关闭防火墙和 SELinux
[root@dr ~]# systemctl stop firewalld
[root@dr ~]# systemctl disable firewalld
[root@dr ~]# cat /etc/sysconfig/selinux 
SELINUX=disabled
(2)配置 VIP 在 DR 的 lo 接口
// 在lo(回环)接口配置VIP(192.168.100.100),/32掩码(仅本机可用,避免广播)
[root@dr ~]# ifconfig lo 192.168.100.100/32 broadcast 192.168.100.100 netmask 255.255.255.255 up
// 查看IP配置(验证VIP是否生效)
[root@dr ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet 192.168.100.100/32 brd 192.168.100.100 scope global lo  // VIP已配置在lo接口valid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
  • DR 的 VIP 配置在 lo 接口(而非物理网卡),原因是:DR 仅需接收客户端对 VIP 的 ARP 请求,无需将 VIP 通过物理网卡广播;/32掩码表示该 IP 仅本机使用,避免与其他设备冲突。
(3)开启 IP 转发(DR 模式需转发入站请求)
[root@dr ~]# vim /etc/sysctl.conf  // 原步骤写sysctl,少.conf,需修正
net.ipv4.ip_forward = 1  // 开启IP转发(DR模式需转发请求,仅修改MAC,不修改IP)
[root@dr ~]# sysctl -p  // 生效配置
net.ipv4.ip_forward = 1

DR 模式虽不修改 IP,但需将客户端请求转发给 RS(修改 MAC 地址),因此仍需开启 IP 转发。

3. RS1、RS2 配置 ARP 抑制(核心!避免 VIP 冲突)
// RS1编辑内核参数(ARP抑制)
[root@rs1 ~]# vim /etc/sysctl.conf
// 关键参数说明:
// 1. arp_ignore=1:仅回应目标IP为“自身物理网卡IP”的ARP请求(忽略对VIP的ARP请求,避免客户端找错主机)
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
// 2. arp_announce=2:发送ARP请求时,源IP使用“接收请求的接口IP”(避免RS将VIP作为源IP发ARP,导致网关缓存错误MAC)
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2// 生效内核参数
[root@rs1 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2// RS2操作与RS1完全一致(复制上述配置并生效)
[root@rs2 ~]# vim /etc/sysctl.conf
// 粘贴上述4行参数
[root@rs2 ~]# sysctl -p
  • ARP 抑制是 DR 模式的核心:若不配置,客户端发送 “VIP(192.168.100.100)对应的 MAC 是多少” 的 ARP 请求时,所有 RS 都会回应(因 RS 也配置了 VIP),导致客户端随机选择一个 RS 的 MAC,DR 无法调度,集群失效。
  • arp_ignore=1确保 RS 仅回应自身物理网卡 IP(RIP)的 ARP 请求,不回应 VIP 的 ARP 请求;arp_announce=2确保 RS 发送 ARP 请求时用 RIP 作为源 IP,避免网关缓存 VIP 与 RS MAC 的映射
4. RS1、RS2 配置 VIP(在 lo 接口)并添加路由

RS1:

// 在lo接口配置VIP(/32掩码,与DR一致)
[root@rs1 ~]# ifconfig lo 192.168.100.100/32 broadcast 192.168.100.100 netmask 255.255.255.255 up
// 添加路由:访问VIP的流量走lo接口(确保RS能处理目标IP为VIP的请求)
[root@rs1 ~]# route add -host 192.168.100.100 dev lo 

RS2:

bash
[root@rs2 ~]# ifconfig lo 192.168.100.100/32 broadcast 192.168.100.100 netmask 255.255.255.255 up
[root@rs2 ~]# route add -host 192.168.100.100 dev lo
  • RS 在 lo 接口配置 VIP 的原因:DR 转发的请求目标 IP 是 VIP,RS 需能识别该 IP 并处理,因此需在 lo 接口(仅本机可见)配置 VIP;route add确保 RS 收到目标 IP 为 VIP 的流量时,通过 lo 接口处理(而非物理网卡)。
  • 若不添加路由,RS 会将目标 IP 为 VIP 的流量视为 “外部流量”,通过网关转发(若配置网关),导致请求丢失。
5. DR 添加 LVS-DR 模式规则
// 添加虚拟服务:VIP:80,调度算法rr(轮询)
[root@dr ~]# ipvsadm -A -t 192.168.100.100:80 -s rr               
// 添加RS1:调度到RS1:80,模式DR(-g,即Route模式)
[root@dr ~]# ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.20 -g
// 添加RS2:调度到RS2:80,模式DR(-g)
[root@dr ~]# ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.30 -g // 查看LVS规则(确认模式为Route)
[root@dr ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.100.100:80 rr-> 192.168.100.20:80            Route   1      0          0  // Route即DR模式-> 192.168.100.30:80            Route   1      0          0         // 保存规则(避免重启丢失)
[root@dr ~]# ipvsadm -Sn >/etc/sysconfig/ipvsadm        
// 重启ipvsadm并设为开机自启
[root@dr ~]# systemctl restart ipvsadm.service 
[root@dr ~]# systemctl enable ipvsadm.service  
  • DR 模式的 LVS 规则核心是-g(Route 模式),表示 DR 仅修改数据帧的 MAC 地址(目标 MAC→RS 的 MAC),不修改 IP 地址;RS 收到后,因目标 IP 是自身 lo 接口的 VIP,会处理请求并直接回包给客户端(源 IP = 客户端 IP,目标 IP = 客户端 IP)。
  • 与 NAT 模式不同,DR 模式的 RS 无需配置网关指向 DR,回包不经过 DR,因此性能更高。
6. 客户端验证 DR 模式负载均衡
[root@hrz4 ~]# curl http://192.168.100.100
RS1
[root@hrz4 ~]# curl http://192.168.100.100
RS2
[root@hrz4 ~]# curl http://192.168.100.100
RS1
[root@hrz4 ~]# curl http://192.168.100.100
RS2

九、配置 LVS-TUN 模式的 HTTPD 负载集群(原步骤未标序号,补充)

核心逻辑

LVS-TUN(IP Tunneling,IP 隧道)模式解决了 DR 模式 “同网段” 的限制,支持 DR 和 RS跨网段部署:DR 将客户端请求封装在新的 IP 隧道中(外层 IP:DR 的 DIP→RS 的 RIP),RS 解封装后处理请求,直接回包给客户端(无需经 DR)。核心依赖IPIP 隧道协议(需加载ipip内核模块),适合大规模集群(RS 分布在不同网段)。

主机角色关键 IP 说明核心作用
Client(客户端)192.168.100.200发起 HTTP 请求,验证负载均衡
DR(调度器)DIP(192.168.100.10)、VIP(192.168.100.55)封装请求为 IP 隧道,转发给 RS
RS1/RS2(后端)RIP(192.168.100.20/30)、VIP(192.168.100.55,配置在 tun 设备)解封装隧道,处理请求,直接回包
1. DR 配置(关闭防火墙 + 开启转发 + 安装 ipvsadm)
[root@dr ~]# systemctl stop firewalld
[root@dr ~]# systemctl disable firewalld
[root@dr ~]# setenforce 0  // 临时关闭SELinux(永久关闭需改/etc/sysconfig/selinux)// 开启IP转发(隧道转发需IP转发)
[root@dr ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1
[root@dr ~]# sysctl -p
net.ipv4.ip_forward = 1// 安装ipvsadm(LVS管理工具)
[root@dr ~]# yum -y install ipvsadm
  • TUN 模式需 DR 支持 IP 隧道封装,因此必须开启 IP 转发;SELinux 默认可能限制隧道模块加载,需临时关闭(setenforce 0)。
2. 后端 RS1、RS2 部署 HTTPD(同 DR 模式)

RS1

[root@rs1 ~]# yum install -y  httpd
[root@rs1 ~]# echo RS1 > /var/www/html/index.html
[root@rs1 ~]# systemctl restart httpd.service 
[root@rs1 ~]# systemctl enable httpd.service        
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

RS2

[root@rs2 ~]# yum install -y  httpd
[root@rs2 ~]# echo RS2 > /var/www/html/index.html
[root@rs2 ~]# systemctl restart httpd.service 
[root@rs2 ~]# systemctl enable httpd.service        
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
3. RS1、RS2 加载 ipip 隧道模块并配置 VIP

RS1:

// 加载ipip内核模块(支持IPIP隧道,临时加载,重启失效;永久加载需echo ipip > /etc/modules-load.d/ipip.conf)
[root@rs1 ~]# modprobe ipip
[root@rs1 ~]# ifconfig tunl0 192.168.100.55 broadcast 192.168.100.55 netmask 255.255.255.255 up

RS2:

[root@rs2 ~]# modprobe ipip
[root@rs2 ~]# ifconfig tunl0 192.168.100.55 broadcast 192.168.100.55 netmask 255.255.255.255 up  
  • VIP 配置在tunl0设备(隧道设备),原因是 RS 需通过隧道接收 DR 封装的请求,目标 IP 为 VIP,因此需在隧道设备上配置 VIP。

//修改内核参数为

RS1:

[root@rs1 ~]# vim /etc/sysctl.conf 
// ARP抑制(同DR模式,避免VIP冲突)
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
// 关闭反向路径过滤(rp_filter=0):隧道包的源IP可能与接收接口的IP不在同一网段,避免被内核丢弃
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0// 生效内核参数
[root@rs1 ~]# sysctl -p            
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0

RS2:

[root@rs2 ~]# vim /etc/sysctl.conf 
// 粘贴上述6行参数
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0[root@rs2 ~]# sysctl -p
  • rp_filter(反向路径过滤)是 Linux 的安全机制,默认开启(rp_filter=1),会丢弃 “源 IP 与接收接口路由不匹配” 的包;TUN 模式中,DR 封装的隧道包外层 IP 是 DR 的 DIP,内层 IP 是客户端 IP,RS 接收后解封装,源 IP 是客户端 IP,可能与tunl0接口的路由不匹配,因此需关闭rp_filter(设为 0),避免包被丢弃。

5. DR 添加 LVS-TUN 模式规则

// 添加虚拟服务:VIP:80,调度算法rr(轮询)
[root@dr ~]# ipvsadm -A -t 192.168.100.55:80 -s rr
// 添加RS1:调度到RS1:80,模式TUN(-i,即Tunnel模式)
[root@dr ~]# ipvsadm -a -t 192.168.100.55:80 -r 192.168.100.20 -i
// 添加RS2:调度到RS2:80,模式TUN(-i)
[root@dr ~]# ipvsadm -a -t 192.168.100.55:80 -r 192.168.100.30 -i // 查看LVS规则(确认模式为Tunnel)
[root@dr ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.100.55:80 rr-> 192.168.100.20:80            Tunnel  1      0          0  // Tunnel即TUN模式-> 192.168.100.30:80            Tunnel  1      0          0         // 保存规则并设为开机自启
[root@dr ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@dr ~]# systemctl restart ipvsadm.service 
[root@dr ~]# systemctl enable ipvsadm.service        
Created symlink from /etc/systemd/system/multi-user.target.wants/ipvsadm.service to /usr/lib/systemd/system/ipvsadm.service.
  • TUN 模式的 LVS 规则核心是-i(Tunnel 模式),表示 DR 将客户端请求封装为 IPIP 隧道包:
    • 外层 IP 头:源 IP=DR 的 DIP(192.168.100.10),目标 IP=RS 的 RIP(192.168.100.20/30);
    • 内层 IP 头:源 IP = 客户端 IP(192.168.100.200),目标 IP=VIP(192.168.100.55);
  • RS 收到隧道包后,解封装得到内层 IP 头,因目标 IP 是自身tunl0接口的 VIP,会处理请求并直接回包给客户端(源 IP = 客户端 IP,目标 IP = 客户端 IP),不经过 DR。

客户端验证:

[root@hrz4 ~]# curl http://192.168.100.55
RS1
[root@hrz4 ~]# curl http://192.168.100.55
RS2
[root@hrz4 ~]# curl http://192.168.100.55
RS1
[root@hrz4 ~]# curl http://192.168.100.55
RS2
[root@hrz4 ~]# curl http://192.168.100.55
  • 客户端无需与 RS 在同一网段(TUN 模式支持跨网段),只需能访问 DR 的 VIP;若返回结果轮询显示 “RS1”“RS2”,说明 LVS-TUN 模式已生效。
  • 可通过tcpdump在 RS 的tunl0接口抓包(tcpdump -i tunl0 host 192.168.100.200 and port 80),会发现 RS 接收的是 IPIP 隧道包,解封装后处理请求。
http://www.dtcms.com/a/398149.html

相关文章:

  • 【触想智能】工业一体机在金融领域的应用优势和具体注意事项
  • 制作大模型获取天气数据工具(和风API)
  • Nginx服务部署与配置(Day.2)
  • 计算机课程《网络安全》课程导览:开启数字世界的守护之旅
  • 网站系统开发精品网站开发
  • 国外ps网站产品推广方案ppt
  • 【MuJoCo学习笔记】#2 接触动力学 腱系统 执行器 传感器
  • 北京 旅游攻略
  • python+django/flask+springboot个性化旅游推荐系统(数据可视化) 景点推荐 路线匹配 用户画像建模 智能搜索筛选 图文展示系统
  • 智慧校园信息门户网站建设一站式做网站哪家好
  • 携程HR面(准备)
  • Qt 框架知识体系
  • 如何重新编译HyperLPR原生库以消除16k对齐警告
  • [QT]常用控件属性一
  • QT 编写应力分析软件
  • INTLAB区间工具箱在区间分析算法中的应用与实现
  • 北京网页设计新趋势黄石市seo关键词优化怎么做
  • 【Linux】拆解 Linux 容器化核心:Namespace 隔离 + cgroups 资源控制,附 LXC 容器生命周期实战
  • VSCode IDE环境的python 显示:Import “rclpy“ could not be resolvedPylancer
  • 吴镇宇做的电影教学网站石家庄最新消息今天
  • MySQL笔记8
  • 【C++无数组矩阵对角线平均值保留2位小数】2022-11-18
  • 阿里巴巴网站费用怎么做分录烟台企业展厅设计
  • ZooKeeper与Kafka分布式协调系统实战指南:从基础原理到集群部署
  • lesson66:JavaScript BOM与DOM全解析:从基础到现代前端实践引言:前端开发的两大基石
  • UNIAPP如何自定义全局方法?
  • 040 线程控制
  • 前端开发利器:nvm、npm与pnpm全面解析与TypeScript/JavaScript选择指南
  • 电影网站如何做seo哪家网站建设公司好
  • LeetCode 刷题【90. 子集 II】