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

Nginx 实战系列(九)—— LVS负载均衡集群与DR模式部署指南

文章目录

  • 前言
    • 注:负载均衡技术分类一览
  • 一、集群概述
    • 1.1 集群含义
    • 1.2 集群分类
  • 二、LVS概述与工作模式
    • 2.1 LVS简介
    • 2.2 LVS的三种工作模式(重点)
      • 2.2.1 NAT模式(LVS-NAT)
      • 2.2.2 TUN模式(LVS-TUN)[IP隧道]
      • 2.2.3 DR模式(LVS-DR)[直接路由]
      • 2.2.4 LVS三种工作模式总结
  • 三、LVS调度算法
    • 3.1 固定调度算法
    • 3.2 动态调度算法
  • 四、LVS-DR模式详解
    • 4.1 LVS-DR 数据包流向分析
    • 4.2 ARP 问题的产生与解决
  • 五、LVS-DR模式部署指南
    • 5.1 环境准备
    • 5.2 部署步骤
      • 5.2.1 配置负载调度器(192.168.10.110)
        • 5.2.1.1 加载IP虚拟服务器内核模块
        • 5.2.1.2 配置VIP(虚拟 IP 地址)
        • 5.2.1.3 调整内核参数
        • 5.2.1.4 配置负载策略
      • 5.2.2 配置Web节点服务器(192.168.10.120、192.168.10.123)
        • 5.2.2.1 配置VIP
        • 5.2.2.2 添加路由记录、设置开机自启
        • 5.2.2.3 调整内核ARP响应参数
        • 5.2.2.4 为web节点服务器准备网页文档
      • 5.2.3 测试验证
  • 总结

前言

在当今高并发的网络环境中,单台服务器往往难以承受大量用户的访问请求。为了提高服务的可用性、扩展性和稳定性,负载均衡技术应运而生。LVS(Linux Virtual Server)是Linux内核自带的负载均衡解决方案,能够将请求高效地分发到多台后端服务器上,实现流量的均衡分配。

本文将详细介绍LVS的三种工作模式、调度算法、部署过程,并提供DR模式完整的配置步骤。无论你是运维工程师、架构师,还是对负载均衡技术感兴趣的开发者,都能从中获得实用的知识和操作指南。

注:负载均衡技术分类一览

分类代表产品/厂商关键特性/性能指标适用场景
① 软负载均衡Nginx, Haproxy, LVS高性能、成本低
- Nginx: 5万 ~ 20万并发
- Haproxy/LVS: 千万级并发
追求极致性能与成本控制的业务,如大型互联网公司自建集群。
② 硬负载均衡F5, 深信服, 华三, 绿盟效果最好、性能稳定
基于专用硬件设备,提供高可靠性和安全性。
对稳定性、安全性和性能有极高要求的企业级核心业务,预算充足。
③ 云负载均衡SLB (阿里云), LB (通用)便捷弹性、开箱即用
无缝集成云生态,按需付费,轻松扩展。
业务部署在公有云上的所有应用,是云上服务的首选流量入口。

一、集群概述

1.1 集群含义

  • Cluster,集群、群集
  • 由多台主机组成,但在外部表现为单一整体,仅提供一个访问入口(如域名或IP地址),功能上等同于一台大型计算机。

1.2 集群分类

  • 负载均衡集群:减少响应延迟,提高并发处理能力
  • 高可用集群 :强调系统的稳定性,减少服务之间中断时间 ,减少损失
  • 高性能运算集群:提高系统运算性能,高性能依赖于分布式运算、并行计算

二、LVS概述与工作模式

2.1 LVS简介

LVS(Linux Virtual Server)是一个基于Linux内核负载均衡器,支持多种调度算法和工作模式,能够将客户端请求转发到多台真实服务器上,提高系统的吞吐量和可用性。

2.2 LVS的三种工作模式(重点)

2.2.1 NAT模式(LVS-NAT)

原理

  • 客户端请求到达负载调度器(Director)负载调度器作为所有服务器节点的网关,Director修改请求包的目标IP和端口为后端某台真实服务器(RS)的RIP和端口。
  • RS处理完请求后,将响应包返回给Director,Director再将源IP改为VIP后返回给客户端。
  • 服务器节点使用私有IP地址,与负载调度器位于同一个物理网络,安全性要优于其他两种方式

优点

  • 支持任何支持TCP/IP的操作系统。
  • 隐藏了后端服务器的真实IP,安全。

缺点

  • 所有请求和响应都要经过Director,容易成为性能瓶颈
  • 不支持大规模集群

2.2.2 TUN模式(LVS-TUN)[IP隧道]

原理

  • 采用开放式网络结构
  • Director将请求包封装在IP隧道中发送给RS。
  • RS解封装后处理请求,并直接响应客户端

优点

  • RS可以分布在不同的地理位置。支持跨网段部署,但需要服务器支持隧道协议。
  • 响应数据不经过Director。

缺点

  • 需要RS支持IP隧道协议。
  • 配置复杂。

2.2.3 DR模式(LVS-DR)[直接路由]

原理

  • 采用半开放式网络结构
  • Director接收到请求后,只修改目标MAC地址为某台RS的MAC地址,IP层不变。
  • RS直接响应客户端,不经过Director。

优点

  • 响应数据不经过Director,性能高。
  • 支持更大规模的集群。

缺点

  • RS必须与Director在同一局域网。
  • RS需要配置VIP在lo接口上,并调整ARP参数

2.2.4 LVS三种工作模式总结

类型适用场景网络要求性能特点
nat小型规模、网络带宽要求不高的内网环境无特殊带宽要求中等性能,依赖NAT转换
tun跨区域大规模集群,公网负载均衡(如CN2线路)依赖公网带宽高灵活性,适合地理分布式场景
DR高性能、低延迟的大规模集群LVS与后端服务器需同二层网络最高性能,数据直接返回客户端

关键差异说明

  • nat:通过地址转换实现,配置简单但存在单点瓶颈。
  • tun:基于IP隧道封装,跨越复杂网络但需额外开销。
  • DR:直接路由模式,性能最优但依赖二层互通。

三、LVS调度算法

3.1 固定调度算法

  • rr(轮询):依次将请求分配给各RS。
  • wrr(加权轮询):根据权重分配请求,权重越高分配越多。
  • dh(目的地址哈希):根据目的IP分配请求到固定的RS。
  • sh(源地址哈希):根据源IP分配请求到固定的RS。

3.2 动态调度算法

  • wlc(加权最小连接数):优先分配给连接数最少且权重最高的RS。
  • lc(最小连接数):优先分配给连接数最少的RS。
  • lblc(基于地址的最小连接数):结合源IP和连接数进行调度。

四、LVS-DR模式详解

LVS-DR(Direct Routing)模式是 LVS 集群中性能最高的一种工作模式。其核心思想是通过修改数据包的 MAC 地址,将请求转发到后端的真实服务器(Real Server),而真实服务器处理完请求后,直接响应客户端,不再经过调度器(Director)。这样可以极大减轻调度器的网络负载,提高系统吞吐量。

4.1 LVS-DR 数据包流向分析

在这里插入图片描述

1、请求过程(Client → Director → Real Server

  • 客户端发送请求包(目标IP为VIP,源IP为CIP)。
  • 请求包通过路由器到达调度器(Director)
  • 调度器根据负载均衡算法选择一台真实服务器(Real Server),并修改请求帧的目标MAC地址为该服务器的MAC地址。
  • 数据包被转发到选中的真实服务器。

2、响应过程(Real Server → Client

  • 真实服务器接收到数据包后,发现目标IP是VIP(通常绑定在lo:0回环接口上),于是处理该请求。
  • 处理完成后,直接构造响应包(源IP为VIP,目标IP为CIP)。
  • 响应包通过真实服务器的默认路由(通常为网关)直接返回给客户端,不经过调度器

4.2 ARP 问题的产生与解决

由于调度器(Director)和所有真实服务器(RS)都配置了相同的VIP,会引发以下两种ARP问题:

1、ARP请求冲突​:当网关通过ARP广播查询VIP所对应的MAC地址时,配置了该VIP的调度器和所有真实服务器都可能收到请求并进行响应。网关会收到多个ARP回复,导致其ARP缓存被不可预测地更新,导致ARP缓存紊乱

2、ARP缓存污染​:当真实服务器处理完请求,并直接向网关返回响应数据包时,数据包的源IP为VIP,而源MAC地址则是真实服务器自身的物理MAC地址。网关收到该数据包后,会动态学习并更新本地的ARP缓存,错误地将VIP与这台真实服务器的MAC地址绑定。

这两种情况都会导致网关的ARP缓存错误地将VIP与某台真实服务器的MAC地址绑定,致使后续请求被直接发送至该服务器,绕过了调度器,从而造成负载均衡失效

解决方案:

  1. 设置 arp_ignore=1
  • 作用:系统仅响应目标IP地址为本地物理网卡IP的ARP请求,忽略目标IP为VIP(非物理网卡IP)的ARP请求。
  • 原因:防止真实服务器响应网关发出的ARP广播请求,避免网关将VIP的MAC地址误记为某台真实服务器的MAC地址。
  1. 设置 arp_announce=2
  • 作用:系统在发送ARP请求时,不使用VIP作为源IP,而是使用物理网卡的IP地址
  • 原因:防止真实服务器向外发送ARP请求时使用VIP作为源IP,导致网关更新ARP缓存,误将VIP与真实服务器的MAC地址绑定。

五、LVS-DR模式部署指南

ipvsadm是Linux Virtual Server (LVS)的用户空间管理工具,用于配置和维护内核中的IPVS(IP Virtual Server)规则,实现负载均衡。
以下是 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.1 环境准备

角色IP地址
DR服务器192.168.10.110
Web服务器1192.168.10.120
Web服务器2192.168.10.123
VIP192.168.10.180

5.2 部署步骤

5.2.1 配置负载调度器(192.168.10.110)

5.2.1.1 加载IP虚拟服务器内核模块
systemctl stop firewalld
setenforce 0
# # 加载IP虚拟服务器内核模块(LVS核心依赖)
modprobe ip_vs
cat /proc/net/ip_vs# 安装IPVS管理命令行工具
yum install ipvsadm -y

在这里插入图片描述

5.2.1.2 配置VIP(虚拟 IP 地址)
# 配置VIP(虚拟 IP 地址)
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
# 内容如下:
NAME=ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255ifup ens33:0
ifconfig ens33:0

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

5.2.1.3 调整内核参数
# 调整内核参数
#由于 LVS 负载调度器和各节点需要共用 VIP 地址,需要关闭 icmp 的重定向,不充当路由器。
vim /etc/sysctl.conf
net.ipv4.ip_forward = 0   # 禁用 ​IPv4 数据包转发​(路由功能)
net.ipv4.conf.all.send_redirects = 0  # 禁止所有网络接口发送 ​ICMP 重定向包
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0sysctl -p

在这里插入图片描述

5.2.1.4 配置负载策略
# 配置负载策略
ipvsadm-save > /etc/sysconfig/ipvsadm  # 将当前内存中的 ​IPVS 负载均衡规则保存到文件 /etc/sysconfig/ipvsadm
systemctl start ipvsadm
ipvsadm -C  # 清空所有现有的 IPVS 规则​
# 添加一个虚拟服务(VIP)​,使用轮询
ipvsadm -A -t 192.168.10.180:80 -s rr
#若隧道模式,-g替换为-i
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.120:80 -g  
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.123:80 -g
ipvsadm -ln   #查看节点状态,Route代表 DR模式

在这里插入图片描述

5.2.2 配置Web节点服务器(192.168.10.120、192.168.10.123)

5.2.2.1 配置VIP
systemctl stop firewalld
setenforce 0# 配置VIP
#此地址仅用作发送 Web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚接口 lo∶0 来承载 VIP 地址,并为本机添加一条路由记录,将访问 VIP 的数据限制在本地,以避免通信紊乱。
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
# 内容如下:
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255ifup lo:0

在这里插入图片描述

5.2.2.2 添加路由记录、设置开机自启
# 添加一条路由记录
route add -host 192.168.10.180 dev lo:0
#route: 这是用来管理系统路由表的命令,可以添加、删除或显示网络路由。
#add: 这是 route 命令的一个子命令,用于添加一个新的路由规则。
#-host 192.168.10.180: 这个选项指定了要添加的路由目标是一个单独的主机(而非整个网络)。192.168.10.180 是目标主机的 IP 地址。
#dev lo:0: 这个选项指定了数据包应该通过哪个网络接口来传输。lo:0 是一个网络接口设备,在这个它是一个虚拟的网络接口(lo 表示回环接口,通常用于本地主机通信)

在这里插入图片描述

# 设置开机自启
echo "/sbin/route add -host 192.168.10.180 dev lo:0" >> /etc/rc.local
chmod +x /etc/rc.d/rc.local

在这里插入图片描述

5.2.2.3 调整内核ARP响应参数
# 调整内核的ARP响应参数以阻止更新 VIP 的 MAC 地址,避免发生冲突
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1			#系统只响应目的IP为本地IP的ARP请求
net.ipv4.conf.lo.arp_announce = 2		#系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p

在这里插入图片描述

5.2.2.4 为web节点服务器准备网页文档
echo "<h1>192.168.10.120</h1>" > /usr/local/nginx/html//index.html
echo "<h1>192.168.10.123</h1>" > /usr/local/nginx/html//index.html

5.2.3 测试验证

在客户端访问 http://192.168.10.180/,观察负载均衡效果。

在这里插入图片描述

在这里插入图片描述


总结

LVS作为Linux平台下的高性能负载均衡解决方案,通过NAT、DR、TUN三种模式满足了不同场景下的需求。NAT模式配置简单,适合小规模集群;DR模式性能更高,适合对吞吐量要求较高的环境;TUN模式则适用于跨机房部署。

在实际部署中,需根据网络环境和业务需求选择合适的模式和调度算法。本文提供了NAT和DR模式的详细部署步骤,希望能为你在构建高可用集群时提供参考。如果你对LVS还有其他疑问或想要深入了解,欢迎在评论区留言讨论。


注意:本文所有配置均在CentOS 7环境下测试通过,其他发行版可能需适当调整命令。生产环境中请务必提前做好备份和测试


文章转载自:

http://a6h52j74.jnbsx.cn
http://2T1SOm6R.jnbsx.cn
http://WQNoXsPG.jnbsx.cn
http://HnHrUbSx.jnbsx.cn
http://MCpX5X0K.jnbsx.cn
http://sSpzZ1l5.jnbsx.cn
http://ZanKantt.jnbsx.cn
http://KFZUfmyU.jnbsx.cn
http://Ry7hd46F.jnbsx.cn
http://lu7KrJnw.jnbsx.cn
http://BpSp8RZQ.jnbsx.cn
http://TW48vuQH.jnbsx.cn
http://5AaktvET.jnbsx.cn
http://NUW1TCRR.jnbsx.cn
http://eZpj4fph.jnbsx.cn
http://7n7z49C2.jnbsx.cn
http://lL19YnXs.jnbsx.cn
http://bY0tRP6e.jnbsx.cn
http://nhdgCusT.jnbsx.cn
http://jqH2ZNyV.jnbsx.cn
http://igF0sCcq.jnbsx.cn
http://RULo9Xma.jnbsx.cn
http://1nh3Pnyg.jnbsx.cn
http://SkUcathL.jnbsx.cn
http://9zKaTLxn.jnbsx.cn
http://13WgvDNH.jnbsx.cn
http://0m34l0FH.jnbsx.cn
http://8Is1aDy6.jnbsx.cn
http://2Ash0vWA.jnbsx.cn
http://VylYg49x.jnbsx.cn
http://www.dtcms.com/a/377702.html

相关文章:

  • 利用美团龙猫用libxml2编写XML转CSV文件C程序
  • NJet支持使用json格式的配置文件了
  • 平时只会CRUD,没有高质量项目经验,我该怎么办
  • Vue项目创建方式(多种)
  • PMM:一款开源的数据库监控与管理工具
  • pyinstaller打包多个文件成一个exe
  • JavaScript逆向非对称加密算法
  • 基于EB_S32K3XX芯片的EMIOS_PWM的输出_1
  • 计算机毕设 java 高校会议信息管理系统的设计与实现 基于 SSM 框架的高校会议服务平台 Java+MySQL 的会议室预约与管理系统
  • Git 初识
  • 安全用电管理系统助力银行以全链路监测
  • 3.远程控制网络编程的设计上
  • 存算一体芯片生态评估:从三星PIM到知存科技WTM2101
  • 智联未来 点赋科技
  • SpringBoot项目健康检查端点返回为down排查思路
  • yolov8(yolov11)目标识别使用Tensorrt推理-2.0(C++Api)
  • 《Java中的IO流》
  • sql语句练习
  • 《深度学习的核心公式》
  • 划痕缺陷检测:3类成因,对应3套打光方案
  • 摆动序列:如何让数组“上下起伏”地最长?
  • 模型 公地悲剧
  • 深入理解 Android targetSdkVersion:从 Google Play 政策到依赖冲突
  • DDNS动态域名解析服务:原理与工具详解全攻略,外网畅访内网设备用自定义固定域名
  • 【系统分析师】第20章-关键技术:信息物理系统分析与设计(核心总结)
  • 批量更新数据:Mybatis update foreach 和 update case when 写法及比较
  • 九、瑞萨发布RZT/N认证的PROFINET-IRT和PROFIdrive软件协议栈
  • Linux系统学习之注意事项及命令基本格式
  • MoE架构训练系统设计:专家并行与门控网络优化策略
  • 深入分析神马 M56S+ 202T 矿机参数与性能特点