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

LVS负载均衡技术全解析

LVS负载均衡技术全解析

一、LVS简介

LVS(Linux Virtual Server,Linux虚拟服务器)是由章文嵩博士主导开发的开源负载均衡项目,目前已深度集成到Linux内核模块中,成为Linux系统原生支持的高性能负载均衡解决方案。其核心是在Linux内核层面实现基于IP地址的数据请求负载均衡调度,通过将终端用户的请求合理分配到后端多台真实服务器(Real Server),显著提升服务的并发处理能力、可用性与扩展性。

核心工作流程

  1. 请求接收:终端互联网用户从外部访问企业服务时,Web请求首先发送至LVS调度器(Director Server),用户仅感知调度器对外提供的统一虚拟IP(VIP)。
  2. 请求调度:调度器根据预设的负载均衡算法(如轮询、最少连接等),决定将请求转发至后端某一台真实服务器。例如,轮询算法(rr)会将请求平均分配给所有正常运行的真实服务器,确保负载均衡。
  3. 服务处理与透明化:真实服务器接收到请求后进行处理,若所有真实服务器连接相同的存储设备(如磁盘阵列)且提供一致的服务(如相同的Web内容、数据库数据),则无论请求被转发到哪台真实服务器,用户最终获取的服务内容完全一致,整个集群对用户保持透明。
  4. 数据回传:根据LVS工作模式的差异,真实服务器采用不同方式将处理结果回传至用户,LVS支持三种核心工作模式:NAT模式(Network Address Translation)、TUN模式(IP Tunneling)和DR模式(Direct Routing)。

关键术语与官方资源

  • VIP(Virtual IP Address):虚拟IP地址,是LVS集群对外提供服务的统一入口,用户通过访问VIP发起请求。
  • RIP(Real IP Address):真实服务器的IP地址,仅在集群内部网络中生效(部分模式除外),用于接收调度器转发的请求。
  • 官方站点:http://www.linuxvirtualserver.org,可获取最新的项目文档、源码及技术支持。

二、LVS体系结构

LVS集群系统采用分层架构设计,从逻辑上分为三个核心层级,各层级功能独立且协同工作,确保集群对用户透明(用户仅感知一个高性能虚拟服务器),同时实现功能解耦与灵活扩展。

1. 负载均衡层(Load Balancer Layer)

  • 组成:位于集群最前端,由1台或多台负载调度器(Director Server)组成,是请求调度的核心。
  • 核心组件
    • LVS内核模块(ipvs):安装在Director Server上,维护预设的路由表,存储集群服务配置(如VIP、端口、调度算法)与真实服务器列表,负责将用户请求分发到后端真实服务器。
    • Ldirectord监控模块:实时监测后端真实服务器的健康状态(如服务是否正常运行、端口是否开放、响应是否超时)。当某台真实服务器故障时,自动将其从LVS路由表中剔除;当服务器恢复正常后,重新将其加入路由表,确保集群服务不中断。
  • 功能:接收用户请求,按算法分配请求,监控后端节点,相当于集群的“大脑”。

2. 服务器群组层(Server Array Layer)

  • 组成:由多台运行实际应用服务的真实服务器(Real Server)组成,是集群的“业务处理单元”。
  • 支持服务类型:可部署WEB服务器(如Apache、Nginx)、MAIL服务器(如Postfix)、FTP服务器(如vsftpd)、DNS服务器、视频服务器等,也可混合部署多种服务。
  • 连接方式:真实服务器之间通过高速局域网(LAN)或广域网(WAN)连接,适用于本地集群(LAN)或跨地域分布式集群(WAN)。
  • 灵活配置:在实际部署中,Director Server可同时兼任Real Server角色,充分利用硬件资源(需注意避免调度器负载过高)。

3. 数据共享存储层(Shared Storage Layer)

  • 组成:为所有真实服务器提供统一的共享存储空间,确保服务内容一致性,通常由磁盘阵列设备(如RAID阵列、SAN存储区域网络)组成。
  • 数据共享方案
    • NFS(Network File System):适用于简单场景,配置便捷,但在高并发业务中性能有限(存在IO瓶颈)。
    • 集群文件系统:适用于高并发场景,如Red Hat的GFS(Global File System)、Oracle的OCFS2(Oracle Cluster File System 2),支持多台服务器同时读写,避免NFS的性能问题。
  • 功能:保证所有真实服务器访问的数据源一致,避免因数据差异导致用户体验不一致。

4. 系统兼容性

角色支持操作系统
负载调度器(Director Server)仅支持Linux(2.6+内核原生支持LVS,无需额外配置)和FreeBSD(应用较少、性能一般)
真实服务器(Real Server)支持几乎所有系统平台,包括Linux、Windows、Solaris、AIX、BSD系列

三、LVS管理工具

LVS的管理依赖内核层的ipvs模块与用户空间的ipvsadm命令行工具,二者协同实现集群配置、规则管理与状态监控。

1. ipvs(内核模块)

ipvs是LVS的核心组件,运行于Linux内核协议栈,实现IP层负载均衡,是LVS功能的“底层引擎”。

(1)总体结构

ipvs由三个核心模块与两个链表组成:

  • IP包处理模块:接收用户请求数据包,解析IP地址、端口号、协议类型,判断请求是否匹配集群服务规则;若匹配,将数据包传递给调度算法模块。
  • 负载均衡算法模块:实现LVS支持的所有调度算法(如轮询、最少连接),根据真实服务器的负载状态(连接数、权重)计算最优目标服务器,返回结果给IP包处理模块。
  • 系统配置和管理模块:接收ipvsadm工具的配置命令(如添加集群服务、修改真实服务器权重),将配置同步到内核规则表,维护规则的持久化。
  • 虚拟服务器与真实服务器链表:存储集群服务(虚拟服务器)与真实服务器的配置信息,是ipvs的数据核心。
(2)核心特性
  • 支持同时定义多个集群服务(如同时提供HTTP服务与HTTPS服务),但过多服务可能增加调度器计算开销,影响性能,需根据硬件配置合理规划。
  • 每个集群服务至少需关联1台真实服务器,否则无法提供实际服务,请求会被丢弃。

2. ipvsadm(用户空间命令行工具)

ipvsadm是LVS的用户交互工具,用于创建、修改、删除集群规则,查看集群状态,是运维人员管理LVS的主要入口。

(1)核心命令选项
命令选项功能分类具体作用
-A集群服务管理添加新集群服务,需配合-t(TCP协议)/-u(UDP协议)指定“VIP:Port”,-s指定调度算法(如rr、wrr)
-E/-D/-C集群服务管理-E修改已有集群服务配置(如调整调度算法),-D删除指定集群服务,-C清空所有集群规则(谨慎使用)
-R/-S规则备份/恢复-R从标准输入(如文件)重载规则(用于恢复配置),-S将当前规则保存到标准输出(如文件,用于备份)
-a/-e/-d真实服务器管理-a为指定集群服务添加真实服务器,-e修改真实服务器配置(如权重),-d从集群服务中删除真实服务器
-L/-l规则查看列出所有集群服务与真实服务器规则,配合-n以数字格式显示IP和端口(避免DNS反向解析延迟,提升查看效率)
-t/-u协议指定-t指定集群服务为TCP协议(格式:host[:port]),-u指定为UDP协议(格式:host[:port])
-r真实服务器地址指定真实服务器的IP和端口(格式:host[:port]),仅支持端口映射的LVS类型(如NAT模式)可使用与集群服务不同的端口
-g/-i/-m模式指定-g(默认)设置DR模式(Direct Routing),-i设置TUN模式(IP Tunneling),-m设置NAT模式(Network Address Translation)
-w权重设置为真实服务器指定权重(正整数,权重越高,分配到的请求越多),用于加权调度算法(如wrr、wlc)
(2)核心功能与语法

ipvsadm的核心功能包括集群服务管理、真实服务器管理与规则查看,常用语法示例如下:

功能语法示例
添加TCP集群服务ipvsadm -A -t 172.16.30.10:80 -s rr(VIP:80,TCP协议,轮询算法)
为集群服务添加真实服务器ipvsadm -a -t 172.16.30.10:80 -r 192.168.100.20:80 -m(NAT模式,RIP:80)
查看规则(数字格式)ipvsadm -Ln(显示VIP、RIP、协议、调度算法、连接数等)
备份规则ipvsadm -Sn > /etc/sysconfig/ipvsadm(推荐备份路径,避免重启丢失)
恢复规则ipvsadm -R < /etc/sysconfig/ipvsadmsystemctl restart ipvsadm
(3)注意事项
  • ipvsadm命令需以root用户权限执行,否则无法修改内核层的ipvs规则。
  • 备份规则时,建议使用ipvsadm -Sn(标准格式导出),而非直接复制文件,确保恢复时的兼容性。
  • 若通过systemctl restart ipvsadm重启服务,需确保/etc/sysconfig/ipvsadm文件存在且格式正确,否则服务可能启动失败。

四、LVS工作模式及原理

LVS支持三种核心工作模式,每种模式在请求转发机制、数据回传路径、网络架构要求和性能表现上差异显著,适用于不同的业务场景。以下详细解析每种模式的原理、注意事项、特点及优缺点。
请添加图片描述

1. NAT模式(Network Address Translation)

NAT模式基于网络地址转换技术实现请求调度,所有请求与响应数据包均需经过Director Server,适用于小规模内网集群

(2)工作原理

NAT模式的完整数据流向分为四个步骤,核心是通过地址转换实现请求转发与响应回传:

  1. 用户发起请求:客户端(CIP为客户端IP)向VIP发送请求,数据包源IP=CIP,目标IP=VIP,目标端口=集群服务端口(如80)。
  2. Director转发请求:Director Server接收到请求后,检查是否匹配集群规则。若匹配,按调度算法选择一台真实服务器(如RIP1=192.168.100.20),将数据包的目标IP改为RIP(目标端口可按需转换),转发至真实服务器。
  3. Real Server处理请求:真实服务器接收到数据包(目标IP=自身RIP),处理请求后生成响应数据包(源IP=RIP,目标IP=CIP)。由于真实服务器的默认网关已设置为Director的DIP,响应数据包会发送至Director Server。
  4. Director回传响应:Director Server接收到响应后,将数据包的源IP改为VIP(确保用户感知到响应来自虚拟服务器),然后回传至客户端,完成一次请求-响应流程。
(3)关键配置与注意事项
  • Real Server网关设置:必须将所有真实服务器的默认网关指向Director Server的DIP(内网IP),否则响应数据包会直接发送至客户端(而非Director),导致客户端因无法识别RIP(内网IP)而丢弃响应。
  • IP转发开启:Director Server需开启IP转发功能(net.ipv4.ip_forward = 1),否则无法转发数据包。
  • 端口转换支持:NAT模式是唯一支持端口转换的模式,例如用户请求VIP:8080,可转发至真实服务器的80端口(通过ipvsadm -a命令的-r选项指定真实服务器端口)。
(4)特点
  1. 性能瓶颈明显:所有请求与响应数据包均需经过Director Server,Director的网络带宽和处理能力成为集群瓶颈,仅支持小规模集群(通常≤20台真实服务器)。
  2. IP配置简单:仅Director需配置公网IP(VIP)和内网IP(DIP),真实服务器仅需内网IP(RIP),节省公网IP资源。
  3. 操作系统兼容性强:真实服务器可使用任何支持TCP/IP的系统(如Linux、Windows、Solaris),部署门槛低。
  4. 端口灵活性高:支持请求端口与真实服务器服务端口的映射,适用于后端服务端口不统一的场景。
(5)优缺点分析
优点缺点
真实服务器兼容性强,支持所有TCP/IP系统;仅Director需公网IP,成本低Director是性能瓶颈,集群规模受限;所有数据包经Director,延迟高
支持端口转换,后端服务端口配置灵活;真实服务器位于内网,安全性高响应数据包需经过Director二次转换,增加内核处理开销;Director单点故障风险高

2. DR模式(Direct Routing)

DR模式基于数据链路层(MAC层)地址修改实现请求转发,响应数据包由真实服务器直接回传至客户端,无需经过Director Server,是LVS性能最优的模式,适用于局域网内大规模集群。

(2)工作原理

DR模式的核心是仅修改请求数据包的目标MAC地址(不修改IP),响应直接回传,大幅降低Director负载:

  1. 用户发起请求:客户端向VIP发送请求,数据包源IP=CIP,目标IP=VIP,目标MAC=Director外网网卡的MAC地址(通过ARP协议获取)。
  2. Director转发请求:Director接收到请求后,检查集群规则,按算法选择真实服务器,将数据包的目标MAC改为真实服务器的MAC地址(源MAC保持为Director的MAC),IP层信息(源IP、目标IP、端口)不变,通过局域网转发至真实服务器。
  3. Real Server处理请求:真实服务器接收到数据包(目标MAC=自身),解析后发现目标IP=VIP(已配置在lo接口),处理请求后生成响应数据包(源IP=VIP,目标IP=CIP),通过外网网卡直接回传至客户端(无需经过Director)。
  4. 客户端接收响应:客户端确认响应来自VIP,完成请求流程。
(3)关键配置与注意事项
  • ARP抑制参数:由于所有真实服务器的lo接口均配置了VIP,需通过内核参数禁止真实服务器响应针对VIP的ARP请求(避免ARP风暴):
    # 仅响应目标IP为自身接口IP的ARP请求
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.lo.arp_ignore = 1
    # ARP请求源IP使用发送接口的IP(RIP)
    net.ipv4.conf.all.arp_announce = 2
    net.ipv4.conf.lo.arp_announce = 2
    
  • VIP配置规范
    • DR的VIP:配置在外网网卡的虚拟子接口(如ens33:0),子网掩码为32位(/32),确保VIP对外可见。
    • 真实服务器的VIP:配置在lo接口ifconfig lo:0 192.168.100.100/32 up),子网掩码32位,避免路由冲突。
  • 网络架构要求:Director与所有真实服务器必须位于同一物理局域网(同一网段),因为MAC地址仅在局域网内有效,跨网段转发时MAC地址会被网关修改,导致DR模式失效。
  • 端口限制:不支持端口转换,客户端请求端口与真实服务器服务端口必须一致(如请求80端口,真实服务器也需使用80端口)。
(4)特点
  1. 性能优异:仅请求数据包经过Director,响应直接回传,Director无性能瓶颈,支持大规模集群(≤数百台真实服务器)。
  2. 无隧道开销:相比TUN模式,无需封装IP隧道,数据包处理效率更高,延迟低。
  3. 网络依赖性强:必须部署在同一局域网,跨网段或跨地域场景无法使用,灵活性较低。
  4. 配置复杂度中等:需配置ARP抑制参数和VIP子接口,比NAT模式复杂,但比TUN模式简单。
(5)优缺点分析
优点缺点
响应不经过Director,无性能瓶颈,支持大规模集群;无隧道开销,延迟低需同一局域网,不支持跨地域部署;不支持端口转换,端口需一致
真实服务器可直接回传响应,带宽利用率高;VIP仅在局域网可见,安全性高Windows真实服务器配置复杂(需修改注册表);需ARP抑制,配置门槛高

3. TUN模式(IP Tunneling)

TUN模式基于IP隧道技术(IP-over-IP encapsulation)实现请求转发,支持Director与真实服务器跨网段、跨地域部署,适用于分布式集群。
请添加图片描述

(2)工作原理

TUN模式的核心是IP隧道封装——Director将请求数据包封装在新的IP隧道中转发,真实服务器解封装后处理请求,响应直接回传至客户端:

  1. 用户发起请求:客户端向VIP发送请求,数据包源IP=CIP,目标IP=VIP,端口=集群服务端口(如80)。
  2. Director封装隧道数据包:Director接收到请求后,检查集群规则,按算法选择真实服务器,将原请求数据包(inner数据包)封装为新的IP隧道包(outer数据包):
    • outer数据包源IP=Director的DIP,目标IP=真实服务器的RIP;
    • 协议类型=4(IP-in-IP隧道协议),标识该数据包为隧道包。
      封装完成后,通过公网或私网转发至真实服务器。
  3. Real Server解封装与处理请求:真实服务器需提前加载ipip隧道模块,配置tunl0隧道接口(IP=VIP)。接收到隧道数据包后,tunl0接口自动解封装,提取inner数据包(目标IP=VIP),处理请求后生成响应数据包(源IP=VIP,目标IP=CIP)。
  4. Real Server直接回传响应:响应数据包通过真实服务器的外网网卡直接回传至客户端,无需经过Director。
(3)关键配置与注意事项
  • ipip隧道模块
    • 临时加载:modprobe ipip
    • 永久加载:echo "ipip" >> /etc/modules-load.d/ipip.conf(系统重启后自动加载);
    • 验证:lsmod | grep ipip(输出ipip表示加载成功)。
  • 反向路径过滤(RP Filter)关闭:真实服务器需关闭RP Filter,否则内核会认为隧道数据包的源IP(CIP)与接收接口(tunl0)的IP(VIP)不匹配,丢弃数据包:
    net.ipv4.conf.all.rp_filter = 0
    net.ipv4.conf.tunl0.rp_filter = 0
    
  • VIP配置:Director与真实服务器均需在tunl0接口配置VIP(ifconfig tunl0 192.168.100.55/32 up),子网掩码32位。
  • Real Server IP要求:真实服务器需配置公网IP或可直接路由至客户端的IP(如跨地域私网IP),否则响应数据包无法回传至客户端。
(4)特点
  1. 跨地域部署支持:Director与真实服务器可跨网段、跨地域部署(通过公网或私网隧道连接),适用于分布式集群(如多地灾备集群)。
  2. Director无性能瓶颈:仅请求数据包经过Director,响应直接回传,Director负载极低,支持大规模集群。
  3. 协议依赖性强:依赖IP-in-IP隧道协议,仅支持Linux真实服务器(需ipip模块),Windows、Solaris等系统支持较差。
  4. 隧道开销存在:IP隧道封装会增加数据包大小(额外20字节IP头部),导致带宽利用率下降约10%-15%,且封装/解封装过程增加内核处理延迟。
(5)优缺点分析
优点缺点
支持跨地域部署,灵活性高;Director无性能瓶颈,支持大规模集群仅支持Linux真实服务器,兼容性差;隧道封装增加带宽开销与延迟
真实服务器可分散在不同地域,提升服务可用性(一地故障,其他地域接管)真实服务器需公网IP,IP资源成本高;需关闭RP Filter,安全性略有降低

4. 三种工作模式对比

对比维度NAT模式DR模式TUN模式
网络架构要求Director接内外网,Real Server在内网Director与Real Server同一局域网无地域限制,支持跨网段/跨地域
数据包流向请求→Director→Real Server;响应→Real Server→Director→客户端请求→Director→Real Server;响应→Real Server→客户端请求→Director→Real Server;响应→Real Server→客户端
端口转换支持支持(请求与Real Server端口可不同)不支持(端口必须一致)不支持(端口必须一致)
Real Server IP需求仅内网IP仅内网IP公网IP或可路由IP
操作系统兼容性所有TCP/IP系统(Linux、Windows等)主要支持Linux(Windows配置复杂)仅支持Linux(需ipip模块)
集群规模小规模(≤20台)中大规模(≤数百台)大规模(≤数百台)
性能(延迟/吞吐量)低(所有包经Director,延迟高)高(无隧道开销,延迟低)中(隧道开销,延迟高于DR)
适用场景小规模内网服务(如企业内部Web)局域网大规模服务(如电商核心Web)跨地域分布式服务(如多地灾备)

五、LVS调度算法

LVS调度算法决定请求如何分配到真实服务器,直接影响集群负载均衡效果与服务响应速度。根据是否考虑真实服务器的实时负载,算法分为静态调度算法(不考虑实时负载)和动态调度算法(基于实时负载调整),共10种核心算法。

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

静态算法不实时监测真实服务器的负载状态,仅按预设规则分配请求,实现简单、开销低,适用于服务器配置一致、负载稳定的场景。

(1)轮询调度(Round Robin,rr)
  • 原理:将请求按顺序依次分配给所有真实服务器,不考虑服务器的连接数、负载或配置差异。例如,2台服务器时,请求分配顺序为“RS1→RS2→RS1→RS2”。
  • 特点:公平分配,开销极低;适用于服务器配置完全一致、负载均匀的场景。
  • 局限性:若服务器配置差异大,会导致低配置服务器过载,高配置服务器资源闲置。
(2)加权轮询调度(Weighted Round Robin,wrr)
  • 原理:为每台真实服务器设置权重(正整数,权重与处理能力正相关),按权重比例分配请求。例如,RS1权重=2,RS2权重=1,请求分配顺序为“RS1→RS1→RS2→RS1→RS1→RS2”。
  • 特点:支持按处理能力分配负载,权重可动态调整(无需重启服务);适用于服务器配置存在差异的场景。
  • 局限性:权重是静态配置的,不实时考虑服务器当前负载(如高权重服务器临时过载,仍会分配大量请求)。
(3)源地址散列调度(Source Hashing,sh)
  • 原理:根据客户端源IP(CIP)通过哈希函数计算哈希值,取模后分配到对应的真实服务器。同一客户端的IP固定,因此所有请求会分配到同一服务器。
  • 特点:实现“会话粘滞”(Session Sticky),适用于需保持会话状态的服务(如未使用分布式会话的Web应用)。
  • 局限性:若某一客户端请求量极大(如爬虫),会导致对应服务器过载;服务器数量变化时,哈希结果改变,会话状态丢失。
(4)目标地址散列调度(Destination Hashing,DH)
  • 原理:根据请求的目标IP(如VIP或域名对应的IP)哈希计算,同一目标IP的请求分配到同一服务器。
  • 特点:实现“目标IP粘滞”,适用于缓存服务(如DNS缓存、Web缓存),提升缓存命中率。
  • 局限性:热门目标IP(如热门域名)会导致对应服务器过载;服务器数量变化时,缓存失效。

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

动态算法实时监测真实服务器的负载状态(如活跃连接数、响应时间),动态调整请求分配策略,适用于负载波动大、服务器配置差异大的场景。

(1)最少连接调度(Least Connections,lc)
  • 原理:将请求分配给当前活跃连接数最少的服务器(活跃连接数指正在处理的请求连接)。
  • 核心公式Overhead = 活跃连接数,选择Overhead最小的服务器。
  • 特点:动态平衡负载,避免单一服务器过载;适用于服务器配置相近、负载波动小的场景(如Web服务、API服务)。
  • 局限性:不考虑服务器配置差异,高配置服务器可能因连接数少而资源闲置。
(2)加权最少连接调度(Weighted Least Connections,wlc)
  • 原理:结合服务器权重与活跃连接数,计算“加权活跃连接数”,分配给加权活跃连接数最少的服务器。
  • 核心公式Overhead = 活跃连接数 / 权重,选择Overhead最小的服务器。
  • 特点:兼顾处理能力与实时负载,是LVS最常用的动态算法;适用于服务器配置差异大、负载波动大的场景(如电商促销、高并发API)。
  • 优势:权重可动态调整,适应服务器状态变化(如临时降低过载服务器的权重)。
(3)基于局部性的最少连接调度(Locality-Based Least Connections,lblc)
  • 原理:按请求目标IP哈希,优先分配至缓存该目标IP内容的服务器;若该服务器过载或不可用,按wlc算法选择新服务器。
  • 特点:兼顾缓存命中率与负载均衡,适用于缓存服务(如Web缓存、数据库查询缓存)。
  • 局限性:仅适用于缓存服务,普通服务使用时缓存命中率提升不明显。
(4)复杂的基于局部性最少连接调度(Locality-Based Least Connections with Replication,lblcr)
  • 原理:为每个目标IP维护多台服务器映射(而非单一映射),从映射列表中选择负载最低的服务器;若列表中服务器均过载,复制缓存内容到新服务器并加入列表。
  • 特点:避免热门目标IP导致的单点过载,支持缓存复制;适用于高并发缓存服务(如CDN、热门新闻缓存)。
  • 局限性:算法复杂度高,维护缓存复制的开销大。
(5)最少期望延迟调度(Shortest Expected Delay,sed)
  • 原理:计算服务器处理新请求的期望延迟,分配给期望延迟最小的服务器。
  • 核心公式Expected Delay = (活跃连接数 + 1) / 权重,选择期望延迟最小的服务器。
  • 特点:通过“+1”惩罚项,更倾向于分配给高权重服务器(即使有少量活跃连接),充分利用高配置服务器资源。
  • 适用场景:服务器配置差异显著(如高性能物理机与虚拟机混合部署)。
(6)永不排队调度(Never Queue,nq)
  • 原理:优先分配给活跃连接数为0的空闲服务器;若无空闲服务器,退化为sed算法。
  • 特点:避免请求排队,降低响应延迟;适用于请求量波动大、需实时响应的场景(如实时交易系统、即时通讯)。
  • 局限性:所有服务器繁忙时,退化为sed算法,仍需依赖权重与连接数分配。

3. 调度算法选择建议

业务场景推荐算法选择理由
服务器配置一致,负载稳定(如企业内网Web)rr/wrr简单高效,rr公平分配,wrr适应轻微配置差异
服务器配置差异大,负载波动(如电商Web)wlc/sedwlc兼顾负载与权重,sed优先利用高配置服务器
需保持客户端会话(如未用分布式会话)sh实现会话粘滞,避免会话丢失
缓存服务(如CDN、DNS缓存)dh/lblc/lblcrdh实现目标IP粘滞,lblc提升缓存命中率,lblcr避免热门内容过载
实时服务(如交易系统)nq优先分配空闲服务器,避免排队,确保实时响应

六、LVS实践配置

以下基于CentOS 7系统,提供NAT、DR、TUN三种模式的完整配置步骤。

1. 基础环境准备(所有主机)

# 1. 关闭防火墙与SELinux(避免网络拦截)
systemctl stop firewalld && systemctl disable firewalld
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux
setenforce 0  # 临时关闭SELinux,重启后永久生效# 2. 安装基础工具
yum -y install curl vim net-tools  # net-tools包含ifconfig、route等命令

2. 配置LVS-NAT模式(HTTP/HTTPS)

NAT模式适用于小规模内网集群,以下配置HTTP(80端口)和HTTPS(443端口)服务的负载均衡。

(1)环境信息
主机角色网卡信息IP配置安装应用
Clientens33(NAT模式)172.16.30.20/24
DR(Director)ens33(DIP,内网)、ens36(VIP,仅主机)DIP:192.168.100.10/24;VIP:172.16.30.10/24ipvsadm
RS1ens33(RIP,内网)RIP:192.168.100.20/24;网关=DIPhttpd、mod_ssl
RS2ens33(RIP,内网)RIP:192.168.100.30/24;网关=DIPhttpd、mod_ssl
(2)配置真实服务器(RS1、RS2)
① 配置网络IP

RS1配置:

# 编辑ens33网卡配置文件
vim /etc/sysconfig/network-scripts/ifcfg-ens133
# 配置内容(删除无关项)
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.100.20  # RIP
PREFIX=24
GATEWAY=192.168.100.10  # 网关指向DR的DIP(NAT模式核心)
DNS1=8.8.8.8# 重启网络服务并验证
systemctl restart network
ip a show ens33  # 确认IP与网关配置正确

RS2配置(仅IPADDR不同,其他与RS1一致):

vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=192.168.100.30  
systemctl restart network
ip a show ens33
② 部署HTTP服务(Apache)

RS1配置:

# 安装httpd
yum -y install httpd
# 创建测试页面(修正原文档的内容一致问题)
echo "RS1" > /var/www/html/index.html
# 启动服务并设置开机启动
systemctl restart httpd
systemctl enable httpd
# 本地验证
curl http://127.0.0.1  # 应输出"RS1"

RS2配置:

yum -y install httpd
echo "RS2" > /var/www/html/index.html  
systemctl restart httpd
systemctl enable httpd
curl http://127.0.0.1  # 应输出"RS2"
③ 部署HTTPS服务(自签名证书)

HTTPS服务需SSL证书,以下采用自签名证书(生产环境建议使用CA机构颁发的证书):

步骤1:在DR上创建CA根证书(证书颁发机构)
# 创建CA目录结构
mkdir -p /etc/pki/CA/{private,newcerts}
cd /etc/pki/CA
# 生成CA私钥(权限077,仅root可读写)
(umask 077; openssl genrsa -out private/cakey.pem 2048)
# 生成CA根证书(有效期1024天)
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 1024
# 填写证书信息(示例)
# Country Name (2 letter code) [XX]:CN
# State or Province Name (full name) []:HB
# Locality Name (eg, city) [Default City]:WH
# Organization Name (eg, company) [Default Company Ltd]:HY
# Organizational Unit Name (eg, section) []:Linux
# Common Name (eg, your name or your server's hostname) []:LVS-CA
# Email Address []:ca@example.com# 初始化CA数据库
touch index.txt  # 证书索引文件
echo 01 > serial  # 证书序列号(从01开始)
步骤2:在RS1上生成证书请求(CSR)并发送给DR
# 安装mod_ssl(Apache的SSL模块)
yum -y install mod_ssl
# 创建SSL证书目录
mkdir /etc/httpd/ssl
cd /etc/httpd/ssl
# 生成RS1的私钥
(umask 077; openssl genrsa -out httpd.key 2048)
# 生成证书请求文件(CSR)
openssl req -new -key httpd.key -out httpd.csr
# 填写证书信息(Common Name建议与服务器IP或域名一致)
# Country Name (2 letter code) [XX]:CN
# State or Province Name (full name) []:HB
# Locality Name (eg, city) [Default City]:WH
# Organization Name (eg, company) [Default Company Ltd]:HY
# Organizational Unit Name (eg, section) []:Linux
# Common Name (eg, your name or your server's hostname) []:192.168.100.20
# Email Address []:rs1@example.com
# 其他选项(Challenge Password、Optional company name)直接回车# 将CSR文件发送给DR
scp httpd.csr root@192.168.100.10:/root/
步骤3:在DR上签署证书并回传RS1
# 进入CA目录
cd /etc/pki/CA
# 签署证书(有效期1024天)
openssl ca -in /root/httpd.csr -out /root/httpd.crt -days 1024
# 确认签署(输入y两次)
# Sign the certificate? [y/n]:y
# 1 out of 1 certificate requests certified, commit? [y/n]:y# 将签署后的证书(httpd.crt)和CA根证书(cacert.pem)发送给RS1
scp /root/httpd.crt root@192.168.100.20:/etc/httpd/ssl/
scp cacert.pem root@192.168.100.20:/etc/httpd/ssl/
步骤4:配置RS1与RS2的HTTPS服务

RS1配置:

# 编辑Apache的SSL配置文件
vim /etc/httpd/conf.d/ssl.conf
# 修改以下三个参数(指向实际证书路径)
SSLCertificateFile /etc/httpd/ssl/httpd.crt  # RS1的证书
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key  # RS1的私钥
SSLCACertificateFile /etc/httpd/ssl/cacert.pem  # CA根证书# 重启httpd服务
systemctl restart httpd
# 本地验证(-k忽略自签名证书警告)
curl -k https://127.0.0.1  # 应输出"RS1"

RS2配置(复制RS1的证书,简化配置):

# 安装mod_ssl
yum -y install mod_ssl
# 创建SSL目录
mkdir /etc/httpd/ssl
# 从RS1复制证书文件
scp root@192.168.100.20:/etc/httpd/ssl/{httpd.crt,httpd.key,cacert.pem} /etc/httpd/ssl/
# 配置SSL(同RS1)
vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
SSLCACertificateFile /etc/httpd/ssl/cacert.pem
# 重启服务并验证
systemctl restart httpd
curl -k https://127.0.0.1  # 应输出"RS2"
(3)配置调度器(DR)
① 配置网络IP(DIP与VIP)
# 配置ens33(内网,DIP)
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.100.10  # DIP
PREFIX=24
DNS1=8.8.8.8# 配置ens36(仅主机模式,VIP)
nmcli connection add con-name ens36 ifname ens36 type ethernet  # 创建连接
vim /etc/sysconfig/network-scripts/ifcfg-ens192
TYPE=Ethernet
BOOTPROTO=static
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=172.16.30.10  # VIP(对外服务IP)
PREFIX=24
DNS1=8.8.8.8# 重启网络服务并验证
systemctl restart network
ip a show ens33  # 确认DIP
ip a show ens36  # 确认VIP
② 开启IP转发(NAT模式必需)
# 编辑内核参数配置文件(修正原文档的文件名错误)
vim /etc/sysctl.conf
# 添加以下内容
net.ipv4.ip_forward = 1# 使内核参数生效
sysctl -p
# 验证IP转发是否开启(输出1表示开启)
sysctl net.ipv4.ip_forward
③ 安装ipvsadm并配置LVS规则
# 安装ipvsadm
yum -y install ipvsadm# 配置HTTP服务规则(VIP:80,轮询算法,NAT模式)
ipvsadm -A -t 172.16.30.10:80 -s rr  # 添加HTTP集群服务
ipvsadm -a -t 172.16.30.10:80 -r 192.168.100.20:80 -m  # 添加RS1
ipvsadm -a -t 172.16.30.10:80 -r 192.168.100.30:80 -m  # 添加RS2# 配置HTTPS服务规则(VIP:443,轮询算法,NAT模式)
ipvsadm -A -t 172.16.30.10:443 -s rr  # 添加HTTPS集群服务
ipvsadm -a -t 172.16.30.10:443 -r 192.168.100.20:443 -m  # 添加RS1
ipvsadm -a -t 172.16.30.10:443 -r 192.168.100.30:443 -m  # 添加RS2# 查看LVS规则(验证配置)
ipvsadm -Ln
# 预期输出:
# TCP  172.16.30.10:80 rr
#   -> 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
#   -> 192.168.100.20:443           Masq    1      0          0         
#   -> 192.168.100.30:443           Masq    1      0          0         # 保存规则(避免系统重启后丢失)
ipvsadm -Sn > /etc/sysconfig/ipvsadm
# 重启ipvsadm服务并设置开机启动
systemctl restart ipvsadm
systemctl enable ipvsadm
(4)客户端测试
# 配置客户端IP(与VIP在同一网段,172.16.30.0/24)
#配置仅主机模式
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=172.16.30.20  # 客户端IP(原文档已配置)
PREFIX=24
DNS1=8.8.8.8
systemctl restart NetworkManager# 测试HTTP服务(多次执行,验证轮询)
curl http://172.16.30.10
# 预期输出交替出现:RS1、RS2# 测试HTTPS服务(-k忽略证书警告,多次执行验证轮询)
curl -k https://172.16.30.10:443
# 预期输出交替出现:RS1、RS2

3. 配置LVS-DR模式(HTTP)

DR模式适用于局域网内大规模集群,以下配置HTTP服务的负载均衡(HTTPS配置类似,仅需调整端口为443)。

(1)环境信息
主机角色IP配置安装应用
Client192.168.100.200/24
DRDIP:192.168.100.10/24;VIP:192.168.100.100/32(ens33:lo子接口)ipvsadm
RS1RIP:192.168.100.20/24;VIP:192.168.100.100/32(lo接口)httpd
RS2RIP:192.168.100.30/24;VIP:192.168.100.100/32(lo接口)httpd
(2)配置真实服务器(RS1、RS2)
① 配置网络IP与ARP抑制参数

RS1配置:

# 配置RIP(无需网关,DR模式响应直接回传)
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.100.20  # RIP
PREFIX=24
DNS1=8.8.8.8
systemctl restart network# 配置ARP抑制参数(避免ARP风暴,核心步骤)
vim /etc/sysctl.conf
# 添加以下参数:
net.ipv4.conf.all.arp_ignore = 1  # 仅响应目标IP为自身接口IP的ARP请求
net.ipv4.conf.all.arp_announce = 2  # ARP请求源IP使用发送接口IP
net.ipv4.conf.lo.arp_ignore = 1  # lo接口同样抑制ARP
net.ipv4.conf.lo.arp_announce = 2# 使内核参数生效
sysctl -p# 在lo接口配置VIP(32位子网掩码,避免路由冲突)
ifconfig lo:0 192.168.100.100/32 broadcast 192.168.100.100 netmask 255.255.255.255 up
# 验证VIP配置
ip a show lo  # 应显示lo:0@lo: ... inet 192.168.100.100/32 ...route add -host 192.168.100.100 dev lo

RS2配置(与RS1一致,仅RIP不同):

# 配置RIP
vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=192.168.100.30  # RIP
systemctl restart network# 配置ARP抑制参数(同RS1)
vim /etc/sysctl.conf
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
sysctl -p# 配置lo接口VIP
ifconfig lo:0 192.168.100.100/32 broadcast 192.168.100.100 netmask 255.255.255.255 up
ip a show lo  # 验证VIP
route add -host 192.168.100.100 dev lo
② 部署HTTP服务

RS1配置:

yum -y install httpd
echo "RS1 - DR Mode" > /var/www/html/index.html
systemctl restart httpd
systemctl enable httpd
curl http://127.0.0.1  # 验证,输出"RS1 - DR Mode"

RS2配置:

yum -y install httpd
echo "RS2 - DR Mode" > /var/www/html/index.html
systemctl restart httpd
systemctl enable httpd
curl http://127.0.0.1  # 验证,输出"RS2 - DR Mode"
(3)配置调度器(DR)
① 配置网络IP(DIP与VIP)
# 配置DIP(内网网卡ens33)
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.100.10  # DIP
PREFIX=24
DNS1=8.8.8.8# 配置VIP(外网网卡ens33的虚拟子接口,修正原文档的lo接口错误)
ifconfig lo:0 192.168.100.100/32 broadcast 192.168.100.100 netmask 255.255.255.255 up# 重启网络服务并验证
systemctl restart network
ip a show ens33  # 验证DIP与VIP(ens33:0子接口)#配置#开路由转发
② 安装ipvsadm并配置LVS规则
yum -y install ipvsadm# 配置DR模式规则(-g指定DR模式,轮询算法)
ipvsadm -A -t 192.168.100.100:80 -s rr  # 添加HTTP集群服务(VIP:80)
ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.20:80 -g  # 添加RS1
ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.30:80 -g  # 添加RS2# 查看规则(验证DR模式配置)
ipvsadm -Ln
# 预期输出:
# TCP  192.168.100.100:80 rr
#   -> 192.168.100.20:80            Route    1      0          0         
#   -> 192.168.100.30:80            Route    1      0          0         # 保存规则并设置开机启动
ipvsadm -Sn > /etc/sysconfig/ipvsadm
systemctl restart ipvsadm
systemctl enable ipvsadm
(4)客户端测试
# 配置客户端IP(与DR、RS在同一局域网,192.168.100.0/24)
vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=192.168.100.200  # 客户端IP
PREFIX=24
systemctl restart network# 测试HTTP服务(多次执行,验证轮询)
curl http://192.168.100.100
# 预期输出交替出现:RS1 - DR Mode、RS2 - DR Mode

4. 配置LVS-TUN模式(HTTP)

TUN模式适用于跨地域集群,以下配置HTTP服务的负载均衡,需注意隧道模块加载与RP Filter关闭。

(1)环境信息
主机角色IP配置安装应用
Client192.168.100.40/24
DRDIP:192.168.100.10/24;VIP:192.168.100.55/32(tunl0接口)ipvsadm
RS1RIP:192.168.100.20/24;VIP:192.168.100.55/32(tunl0接口)httpd
RS2RIP:192.168.100.30/24;VIP:192.168.100.55/32(tunl0接口)httpd
(2)配置真实服务器(RS1、RS2)
① 加载ipip隧道模块(永久生效)
# 临时加载ipip模块(立即生效)
modprobe ipip
# 永久加载(系统重启后自动加载)
echo "ipip" >> /etc/modules-load.d/ipip.conf
# 验证模块加载(输出ipip表示成功)
lsmod | grep ipip
② 配置网络IP与内核参数

RS1配置:

# 配置RIP(模拟跨网段,与DR的DIP不在同一网段)
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.100.20  # RIP(跨网段)
PREFIX=24
DNS1=8.8.8.8
systemctl restart NetworkManager# 配置内核参数(关闭RP Filter,抑制ARP)
vim /etc/sysctl.conf
# 添加以下参数:
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.rp_filter = 0  # 关闭反向路径过滤(隧道必需)
net.ipv4.conf.tunl0.rp_filter = 0# 使参数生效
sysctl -p# 在tunl0隧道接口配置VIP(32位子网掩码)
ifconfig tunl0 192.168.100.55/32 broadcast 192.168.100.55 netmask 255.255.255.255 up
# 验证VIP配置
ip a show tunl0  # 应显示tunl0: <POINTOPOINT,UP,LOWER_UP> ... inet 192.168.100.55/32 ...

RS2配置(与RS1一致,仅RIP不同):

# 配置RIP
vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=192.168.100.30  # RIP(跨网段)
systemctl restart network# 配置内核参数(同RS1)
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.tunl0.rp_filter = 0
sysctl -p# 配置tunl0接口VIP
ifconfig tunl0 192.168.100.55/32 broadcast 192.168.100.55 netmask 255.255.255.255 up
ip a show tunl0  # 验证VIP
③ 部署HTTP服务

RS1配置:

yum -y install httpd
echo "RS1 - TUN Mode" > /var/www/html/index.html
systemctl restart httpd
systemctl enable httpd
curl http://127.0.0.1  # 验证,输出"RS1 - TUN Mode"

RS2配置:

yum -y install httpd
echo "RS2 - TUN Mode" > /var/www/html/index.html
systemctl restart httpd
systemctl enable httpd
curl http://127.0.0.1  # 验证,输出"RS2 - TUN Mode"
(3)配置调度器(DR)
① 开启IP转发与加载隧道模块
# 开启IP转发(TUN模式必需)
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p# 加载ipip模块(同Real Server)
modprobe ipip
echo "ipip" >> /etc/modules-load.d/ipip.conf
lsmod | grep ipip  # 验证
② 配置网络IP(DIP与VIP)
# 配置DIP(与Real Server跨网段通信的IP)
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.100.10  # DIP(跨网段)
PREFIX=24
DNS1=8.8.8.8# 配置VIP(tunl0隧道接口)
ifconfig tunl0 192.168.100.55/32 broadcast 192.168.100.55 netmask 255.255.255.255 up# 重启网络服务并验证
systemctl restart network
ip a show ens33  # 验证DIP
ip a show tunl0  # 验证VIP
③ 配置LVS规则(TUN模式)
yum -y install ipvsadm# 配置TUN模式规则(-i指定TUN模式,轮询算法)
ipvsadm -A -t 192.168.100.55:80 -s rr  # 添加HTTP集群服务(VIP:80)
ipvsadm -a -t 192.168.100.55:80 -r 192.168.100.20:80 -i  # 添加RS1
ipvsadm -a -t 192.168.100.55:80 -r 192.168.100.30:80 -i  # 添加RS2# 查看规则(验证TUN模式配置)
ipvsadm -Ln
# 预期输出:
# TCP  192.168.100.55:80 rr
#   -> 192.168.200.20:80            Tunnel   1      0          0         
#   -> 192.168.200.30:80            Tunnel   1      0          0         # 保存规则并设置开机启动
ipvsadm -Sn > /etc/sysconfig/ipvsadm
systemctl restart ipvsadm
systemctl enable ipvsadm
(4)客户端测试
# 配置客户端IP(可访问DR的VIP,192.168.100.0/24)
vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=192.168.100.40  # 客户端IP
PREFIX=24
systemctl restart network# 测试HTTP服务(多次执行,验证轮询)
curl http://192.168.100.55
# 预期输出交替出现:RS1 - TUN Mode、RS2 - TUN Mode

在这里插入图片描述

七、总结

LVS作为Linux内核原生的负载均衡解决方案,凭借高性能、高稳定性与灵活的工作模式,成为构建高可用服务器集群的核心技术。本文基于原文档,系统梳理了LVS的简介、体系结构、管理工具、工作模式、调度算法及实践配置,纠正了原文档中的IP冲突、配置文件路径错误、VIP配置接口错误等问题,并补充了详细的原理说明与验证步骤。

核心要点回顾

  1. 体系结构:LVS由负载均衡层、服务器群组层、数据共享存储层组成,各层级功能解耦,确保集群透明性与可扩展性。
  2. 管理工具ipvs(内核模块)实现负载均衡核心功能,ipvsadm(用户工具)负责规则管理,二者协同工作。
  3. 工作模式
    • NAT模式:配置简单,适用于小规模内网集群,但Director是瓶颈。
    • DR模式:性能最优,适用于局域网大规模集群,但需同一网段。
    • TUN模式:支持跨地域部署,适用于分布式集群,但仅支持Linux真实服务器。
  4. 调度算法:静态算法(rr、wrr、sh、dh)适用于负载稳定场景,动态算法(wlc、lblc、sed、nq)适用于负载波动大、配置差异大的场景。
  5. 实践配置:需注意网络IP、内核参数、规则保存等细节,确保集群正常运行并通过客户端测试验证。

通过合理选择LVS工作模式与调度算法,结合健康监控(Ldirectord)与高可用方案(如Keepalived),可构建稳定、高效、自愈的负载均衡集群,满足从内网小规模服务到跨地域大规模服务的各类业务需求。

LVS三种工作模式对比:流程拆解+通俗讲解+可视化图表

LVS的NAT、DR、TUN三种模式,本质是“请求怎么分、响应怎么传”的三种不同方案。为了让大家更直观理解,我们先明确3个核心IP(类比物流中的关键地址),再拆解每种模式的完整流程,最后用流程图和表格总结差异。

一、先搞懂3个核心概念(基础必备)

就像物流需要“总仓地址、仓库地址、客户地址”,LVS也有3个关键IP,所有数据流转都围绕它们:

  • VIP(虚拟IP):对外的“总仓地址”,用户只知道这个IP,是请求的入口。
  • RIP(真实服务器IP):后端“仓库地址”,真实处理请求的服务器IP,用户看不到。
  • DIP(调度器IP):“物流调度中心地址”,负责把用户请求分给真实服务器。

二、三种模式详解:流程拆解+流程图+通俗解读

1. NAT模式(网络地址转换):“调度中心包办收发”

(1)完整工作流程(分4步)

假设用户IP(CIP)=192.168.1.100,VIP=172.16.30.10,DIP=192.168.100.10,RIP1=192.168.100.20,RIP2=192.168.100.30:

  1. 用户发请求:用户向VIP(172.16.30.10)发送HTTP请求,数据包信息:源IP=CIP(192.168.1.100),目标IP=VIP(172.16.30.10),目标端口=80
  2. 调度中心转发请求:调度器(DIP=192.168.100.10)收到请求,按轮询算法选RIP1(192.168.100.20),修改数据包的目标IP为RIP1,新数据包信息:源IP=CIP,目标IP=RIP1,目标端口=80,然后转发给RIP1。
  3. 真实服务器处理并回传:RIP1处理请求后,生成响应数据包,信息:源IP=RIP1,目标IP=CIP。由于RIP1的默认网关指向DIP,响应包会先发给调度器。
  4. 调度中心回传用户:调度器收到响应包,修改源IP为VIP,新数据包信息:源IP=VIP,目标IP=CIP,最后发给用户,完成一次交互。
(2)流程图(极简版)

请添加图片描述

graph LR
A[用户(CIP)] -->|请求:CIP→VIP| B[调度器(DIP)]
B -->|转发:CIP→RIP1(改目标IP)| C[真实服务器1(RIP1)]
C -->|响应:RIP1→CIP| B
B -->|回传:VIP→CIP(改源IP)| A
(3)通俗解读

NAT模式像“小区代收点”:用户把快递(请求)寄到代收点(调度器),代收点改地址后转给小区里的仓库(真实服务器);仓库发快递(响应)时,必须先寄回代收点,代收点改寄件人后再发给用户。所有快递都绕不开代收点,代收点忙了就会堵。

2. DR模式(直接路由):“调度中心只分单,仓库直接送货”

(1)完整工作流程(分3步)

假设CIP=192.168.1.100,VIP=192.168.100.100,DIP=192.168.100.10,RIP1=192.168.100.20,RIP2=192.168.100.30(所有设备在同一局域网):

  1. 用户发请求:用户向VIP(192.168.100.100)发请求,数据包信息:源IP=CIP,目标IP=VIP,目标MAC=DIP的MAC(调度器网卡地址)
  2. 调度中心转发请求:调度器收到请求,按轮询算法选RIP1,不改IP(仍为VIP),只改目标MAC为RIP1的MAC,新数据包信息:源IP=CIP,目标IP=VIP,目标MAC=RIP1的MAC,通过局域网发给RIP1。
  3. 真实服务器直接回传用户:RIP1的lo接口已配置VIP(192.168.100.100),看到目标MAC是自己,就处理请求;生成响应包:源IP=VIP,目标IP=CIP,直接通过外网网卡发给用户,不经过调度器。
(2)流程图(极简版)

请添加图片描述

graph LR
A[用户(CIP)] -->|请求:CIP→VIP(目标MAC=DIP的MAC)| B[调度器(DIP)]
B -->|转发:CIP→VIP(改目标MAC=RIP1的MAC)| C[真实服务器1(RIP1)]
C -->|响应:VIP→CIP(直接发送)| A
(3)通俗解读

DR模式像“外卖调度”:用户下单时填“品牌总店名”(VIP),订单先到调度中心(DIP);调度中心不改“店名”,只改“配送员电话”(目标MAC),把订单转给对应外卖店(RIP);外卖店做好餐后,直接打电话联系用户(响应直达),不用再绕回调度中心。

3. TUN模式(IP隧道):“调度中心用隧道传单,仓库直接送货”

(1)完整工作流程(分3步)

假设CIP=192.168.1.100,VIP=192.168.100.55,DIP=192.168.200.10(调度器在A地),RIP1=192.168.300.20(真实服务器在B地,有公网IP):

  1. 用户发请求:用户向VIP(192.168.100.55)发请求,数据包信息:源IP=CIP,目标IP=VIP
  2. 调度中心封装隧道转发:调度器收到请求,按轮询算法选RIP1,给原数据包套一层“隧道外壳”(新IP头部):外壳的源IP=DIP(192.168.200.10),目标IP=RIP1(192.168.300.20),通过公网把“双层数据包”发给RIP1。
  3. 真实服务器解封装并直接回传:RIP1加载了ipip隧道模块,拆开“隧道外壳”,看到内层数据包的目标IP是VIP(已配置在tunl0接口),处理请求后生成响应包:源IP=VIP,目标IP=CIP,用自己的公网IP直接发给用户,不经过调度器。
(2)流程图(极简版)

请添加图片描述

graph LR
A[用户(CIP)] -->|请求:CIP→VIP| B[调度器(DIP)]
B -->|隧道封装:外层(DIP→RIP1)+内层(CIP→VIP)| C[真实服务器1(RIP1,公网IP)]
C -->|解封装→响应:VIP→CIP(直接发送)| A
(3)通俗解读

TUN模式像“跨城快递+同城配送”:用户寄快递到“品牌总仓”(VIP),先到本地调度中心(DIP);调度中心给快递套一个“跨城专用袋”(隧道封装),写清楚“跨城收件地址”(RIP的公网IP),通过长途物流(公网)寄到异地仓库;仓库拆开“专用袋”,处理完快递后,直接用本地配送(响应直达)发给用户,不用再绕回本地调度中心。

三、三种模式核心差异表(含流程特点)

对比维度NAT模式DR模式TUN模式
数据流转特点请求→调度器→真实服务器;响应→真实服务器→调度器→用户(全绕路)请求→调度器→真实服务器;响应→真实服务器→用户(响应不绕路)请求→调度器(隧道)→真实服务器;响应→真实服务器→用户(响应不绕路)
关键修改内容修改请求的目标IP、响应的源IP(改IP)只修改请求的目标MAC地址(不改IP)给请求套隧道外壳(双层IP),不修改内层IP
真实服务器IP仅需内网IP(不用公网)仅需内网IP(同一局域网)必须公网IP(跨地域通信)
跨地域支持不支持(真实服务器在内网)不支持(需同一局域网)支持(隧道跨公网)
端口转换支持(用户请求8080→真实服务器80)不支持(端口必须一致)不支持(端口必须一致)
最大集群规模约20台(调度器是瓶颈)数百台(调度器压力小)数百台(调度器压力小)
响应速度慢(全绕路)快(无绕路、无隧道)中(无绕路、有隧道封装开销)
系统兼容性所有系统(Windows/Linux等)优先Linux(Windows配置复杂)仅Linux(需ipip隧道模块)
适用场景小规模内网服务(OA、测试环境)局域网高并发服务(电商、直播)跨地域分布式服务(CDN、多地灾备)

四、选型口诀(帮你快速决策)

  1. 小规模、内网用NAT:用户少、不用跨地域,省IP成本;
  2. 同机房、高并发用DR:速度快、能扛大规模请求,性能优先;
  3. 跨地域、分布式用TUN:需要覆盖多地用户,灵活优先。

比如:

  • 公司内部打卡系统 → NAT模式;
  • 双11电商购物页面 → DR模式;
  • 全国性视频网站的内容分发 → TUN模式。

虚拟机仅主机模式与NAT模式的区别:通俗解读+场景适配

在使用VMware、VirtualBox等虚拟机软件时,“仅主机模式”和“NAT模式”是最常用的两种网络配置,但很多人容易混淆。其实二者的核心差异在于“虚拟机能否上网”“虚拟机与外界如何通信”,下面从工作原理、通信范围、配置细节等维度拆解,结合通俗类比和场景举例,让你一次搞懂。

一、先明确2个基础概念(理解前提)

在对比前,先搞懂虚拟机网络中的两个关键“角色”,就像现实中的“路由器”和“网线”:

  • 虚拟网卡:虚拟机软件在宿主机(你正在用的电脑)上创建的“虚拟网线接口”,比如VMware的“VMnet1”(默认对应仅主机模式)、“VMnet8”(默认对应NAT模式),负责连接虚拟机和宿主机/外部网络。
  • 虚拟交换机:虚拟机软件创建的“虚拟路由器”,比如VMnet1和VMnet8各自对应一个虚拟交换机,负责转发虚拟机、宿主机、外部网络之间的数据。

二、核心区别:用“家庭网络”类比

我们把“宿主机”比作“你家的主电脑”,“虚拟机”比作“你家的副电脑”,“外网”比作“互联网”,用家庭网络场景类比两种模式的差异:

1. 仅主机模式(Host-Only):“副电脑只能连主电脑,不能上网”

(1)工作原理(像“主副电脑直连,不接路由器”)
  • 虚拟机通过“VMnet1虚拟交换机”,只与宿主机建立连接,相当于给主电脑和副电脑拉了一根“专用网线”;
  • 虚拟交换机不连接宿主机的物理网卡(相当于不接家里的路由器),所以虚拟机只能和宿主机通信,无法访问互联网,也无法被同一局域网的其他真实电脑(比如你同事的电脑)访问。
  • IP地址特点:虚拟机和宿主机的“VMnet1虚拟网卡”会在同一个私有网段(比如192.168.137.0/24),比如宿主机VMnet1的IP是192.168.137.1,虚拟机的IP是192.168.137.100,二者能互相ping通,但虚拟机ping不通百度(www.baidu.com)。
(2)通俗通信范围(画个圈就懂)
[ 互联网 ] ←×→ [ 宿主机物理网卡 ] ←×→ [ VMnet1虚拟交换机 ] ←√→ [ 虚拟机 ]↓√[ 宿主机 ]
  • 能通的:虚拟机 ↔ 宿主机(主副电脑互传文件);
  • 不通的:虚拟机 ↔ 互联网(副电脑不能上网)、虚拟机 ↔ 其他真实电脑(副电脑不能连邻居家的电脑)。
(3)优缺点
优点缺点
1. 网络隔离性好:虚拟机只连宿主机,不会被外网或其他电脑干扰,适合做安全测试(比如测试病毒、漏洞,不怕影响其他设备);
2. 配置简单:无需额外设置网关、DNS,虚拟机软件自动分配网段,开箱即用;
3. 通信稳定:不依赖外网,即使宿主机断网,虚拟机和宿主机仍能正常通信。
1. 虚拟机不能上网:无法下载软件、更新系统,只能用宿主机提前传好的文件;
2. 无法与其他真实电脑通信:比如同一办公室的同事,不能访问你虚拟机里的服务(如Web页面)。

2. NAT模式(网络地址转换):“副电脑通过主电脑上网,像手机连WiFi”

(1)工作原理(像“副电脑连家里的路由器,通过主电脑转发上网”)
  • 虚拟机通过“VMnet8虚拟交换机”连接,虚拟交换机同时关联宿主机的“VMnet8虚拟网卡”和“物理网卡”(相当于副电脑连到家里的路由器,路由器再连主电脑);
  • 虚拟机的IP是私有网段(比如192.168.233.0/24),无法直接访问外网,需要通过“NAT转换”:虚拟机的请求先发给VMnet8虚拟交换机,再由宿主机的物理网卡把“虚拟机的私有IP”转换成“宿主机的公网IP”(或内网IP),转发到外网;外网的响应则按相反路径回传给虚拟机。
  • IP地址特点:宿主机VMnet8的IP是192.168.233.1(默认网关),虚拟机的IP是192.168.233.100,虚拟机既能ping通宿主机,也能ping通百度(能上网),但同一局域网的其他真实电脑(比如同事的电脑)ping不通虚拟机(因为虚拟机是私有IP,未暴露到外网)。
(2)通俗通信范围(画个圈就懂)
[ 互联网 ] ←√→ [ 宿主机物理网卡 ] ←√→ [ VMnet8虚拟交换机 ] ←√→ [ 虚拟机 ]↓√[ 宿主机 ]
  • 能通的:虚拟机 ↔ 宿主机、虚拟机 ↔ 互联网(副电脑能上网下载软件);
  • 不通的:虚拟机 ↔ 其他真实电脑(同事的电脑看不到你的虚拟机,像手机连WiFi,外人找不到这台手机)。
(3)优缺点
优点缺点
1. 虚拟机能上网:可正常下载软件、更新系统、访问外网服务,满足大多数日常需求(比如虚拟机里装Linux系统,在线安装nginx);
2. 不占用公网IP:虚拟机用私有IP,通过宿主机NAT转换上网,不用额外申请公网IP,成本低;
3. 安全性较高:虚拟机隐藏在宿主机背后,外网或其他真实电脑无法直接访问,减少被攻击的风险。
1. 无法被其他真实电脑访问:如果想让同事访问你虚拟机里的Web服务(比如测试环境),需要额外配置“端口转发”,比较麻烦;
2. 依赖宿主机网络:如果宿主机断网,虚拟机也会跟着断网;宿主机关机,虚拟机无法与外界通信。

三、关键区别对比表(一目了然)

对比维度仅主机模式(Host-Only)NAT模式(Network Address Translation)
核心功能虚拟机仅与宿主机通信,不能上网虚拟机通过宿主机NAT转换上网,可与宿主机通信
上网能力❌ 不能访问互联网✅ 能访问互联网
与其他真实电脑通信❌ 不能(无法被其他电脑访问,也不能访问其他电脑)❌ 默认不能(需额外配置端口转发才能被访问)
依赖宿主机物理网卡❌ 不依赖(虚拟交换机不连物理网卡)✅ 依赖(虚拟交换机连物理网卡,通过物理网卡上网)
IP网段固定私有网段(如VMware的192.168.137.0/24)固定私有网段(如VMware的192.168.233.0/24)
网关配置无需配置(仅需与宿主机同网段)需配置为虚拟网卡IP(如192.168.233.1)
典型场景安全测试、离线开发(不依赖外网)日常开发、软件安装、外网访问(依赖上网)

四、场景举例:帮你选对模式

  1. 选仅主机模式的场景
    • 测试病毒/恶意软件:担心虚拟机连网上传数据,或病毒扩散到外网,用仅主机模式隔离;
    • 离线搭建内网集群:比如在虚拟机里搭LVS、K8s集群,只需虚拟机之间和宿主机通信,不用上网;
    • 保护敏感数据:虚拟机里存了涉密文件,不希望连外网,避免数据泄露。
  2. 选NAT模式的场景
    • 日常开发调试:比如在Linux虚拟机里写代码,需要在线安装gcc、python等依赖包;
    • 访问外网服务:比如虚拟机里的程序需要调用百度API、微信支付接口,必须上网;
    • 新手入门:不想折腾复杂配置,又需要虚拟机上网,NAT模式是“开箱即用”的最优选择。

五、补充:如何快速切换与验证

1. 切换方法(以VMware为例)

  1. 关闭虚拟机(部分软件支持开机切换,但建议关机操作,避免网络异常);
  2. 右键虚拟机 → 【设置】→ 【网络适配器】;
  3. 在“网络连接”中选择“仅主机模式”或“NAT模式”,点击【确定】;
  4. 启动虚拟机,通过ip addr(Linux)或“网络连接”(Windows)查看IP,确认网段是否正确。

2. 验证方法

  • 验证仅主机模式
    1. 虚拟机ping宿主机的VMnet1IP(比如ping 192.168.137.1),能通说明与宿主机连接正常;
    2. 虚拟机ping百度(ping www.baidu.com),不通说明隔离生效,符合仅主机模式特性。
  • 验证NAT模式
    1. 虚拟机ping宿主机的VMnet8IP(比如ping 192.168.233.1),能通说明与宿主机连接正常;
    2. 虚拟机ping百度(ping www.baidu.com),能通说明NAT转换生效,可正常上网。

总结

** | 固定私有网段(如VMware的192.168.137.0/24) | 固定私有网段(如VMware的192.168.233.0/24) |
| 网关配置 | 无需配置(仅需与宿主机同网段) | 需配置为虚拟网卡IP(如192.168.233.1) |
| 典型场景 | 安全测试、离线开发(不依赖外网) | 日常开发、软件安装、外网访问(依赖上网) |

四、场景举例:帮你选对模式

  1. 选仅主机模式的场景
    • 测试病毒/恶意软件:担心虚拟机连网上传数据,或病毒扩散到外网,用仅主机模式隔离;
    • 离线搭建内网集群:比如在虚拟机里搭LVS、K8s集群,只需虚拟机之间和宿主机通信,不用上网;
    • 保护敏感数据:虚拟机里存了涉密文件,不希望连外网,避免数据泄露。
  2. 选NAT模式的场景
    • 日常开发调试:比如在Linux虚拟机里写代码,需要在线安装gcc、python等依赖包;
    • 访问外网服务:比如虚拟机里的程序需要调用百度API、微信支付接口,必须上网;
    • 新手入门:不想折腾复杂配置,又需要虚拟机上网,NAT模式是“开箱即用”的最优选择。

五、补充:如何快速切换与验证

1. 切换方法(以VMware为例)

  1. 关闭虚拟机(部分软件支持开机切换,但建议关机操作,避免网络异常);
  2. 右键虚拟机 → 【设置】→ 【网络适配器】;
  3. 在“网络连接”中选择“仅主机模式”或“NAT模式”,点击【确定】;
  4. 启动虚拟机,通过ip addr(Linux)或“网络连接”(Windows)查看IP,确认网段是否正确。

2. 验证方法

  • 验证仅主机模式
    1. 虚拟机ping宿主机的VMnet1IP(比如ping 192.168.137.1),能通说明与宿主机连接正常;
    2. 虚拟机ping百度(ping www.baidu.com),不通说明隔离生效,符合仅主机模式特性。
  • 验证NAT模式
    1. 虚拟机ping宿主机的VMnet8IP(比如ping 192.168.233.1),能通说明与宿主机连接正常;
    2. 虚拟机ping百度(ping www.baidu.com),能通说明NAT转换生效,可正常上网。

总结

简单来说:仅主机模式是“封闭的内网”,只连宿主机;NAT模式是“能上网的内网”,通过宿主机连外网。日常用得多的是NAT模式,需要隔离或离线时用仅主机模式,根据“是否需要上网”和“是否需要隔离”两个核心需求,就能快速选对模式。

http://www.dtcms.com/a/396257.html

相关文章:

  • OpenSpot 2.0.3 | 国内外音乐下载免费,需要特殊网络,搜索最好用繁体中文
  • 【ROS2】Beginner: Client libraries - parameters / ros2doctor / pluginlib
  • 中文域名网站有哪些免费网站建站塔山双喜
  • 基于JavaSwing的扫雷(含操作手册和设计文档)
  • 在电脑上哪里可以做网站wordpress 安装语言设置中文
  • 算法一刷 数组(上)
  • 德州哪里做网站做网站美工
  • 甘肃省第八建设集团公司网站Wordpress 搜索热词
  • 两个网站如何做端口映射郴州网站建设软件定制开发制作
  • 天津微网站建设智慧团建注册登录入口下载
  • 第十周SSRF漏洞
  • Pyside6 + QML - 信号与槽06 - 一个信号触发多个函数
  • html5旅游网站八大员报名入口官网
  • 海外建站平台创建网站主题在哪里
  • 太阳能电池红外异常检测+光伏巡检创新+低空经济方案
  • 建阳网站建设wzjseo苏州网站优化哪家好
  • 自动化抓取谷歌AI实战
  • seo网站优化培训多少价格部署一个网站要做哪些工作
  • 如何免费注册网站域名个人注册公司的详细步骤
  • 龙华区住房和建设局网站官网钱多网站
  • 0基础如何做网站手机主页网站推荐
  • git status突然显示很多文件改动
  • 微网站免费软件互联网服务公司有哪些
  • 做婚纱摄影网站wordpress怎样添加模板
  • 成都科技网站建设咨指数
  • 化妆品销售网站的源代码好的空间网站
  • 快速构建网站网站上内容列表怎么做
  • 网站备案注销申请表深圳网站建设有没有市场
  • 通俗易懂地解释Bradley-Terry-Luce(BTL)模型
  • 互联网营销网站建设聊城网站建设报价