LVS 集群技术详解与实战部署

目录

引言

一、实验环境准备

二、理论基础:集群与 LVS 核心原理

2.1 集群与分布式

2.2 LVS 核心原理

LVS 的 4 种工作模式

LVS 调度算法

三、LVS 部署工具:ipvsadm 命令详解

四、实战案例:LVS 部署详解

案例 1:NAT 模式集群部署

环境说明

配置步骤

案例 2:DR 模式集群部署

环境说明

配置步骤

1.在客户端主机中为nat模式网卡:

2. 在路由主机中设定双网卡,eth0为nat网卡,eth1为仅主机网卡

3.对于dr调度器设定网卡为仅主机模式  

 4.对于RS1的设定网卡为仅主机模式

 5.对于RS2中的网络设定

解决vip响应问题

配置详情

1.配置要点

 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 启用内核路由
[root@lvs ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.d/99-ip_forward.conf
[root@lvs ~]# sysctl --system # 生效配置

 

​ 

【解释】:NAT 模式需要 VS 转发报文,需开启 IP 转发。

  1. 安装 ipvsadm
[root@lvs ~]# yum install ipvsadm -y
[root@lvs ~]# systemctl enable --now ipvsadm # 开机自启
  1. 配置集群服务和 RS
# 添加集群服务(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. 测试验证

在测试机执行多次请求,观察轮询效果:

for N in {1..6};do curl 192.168.2.100;done

预期结果:交替返回 RS1 和 RS2 的响应。

案例 2:DR 模式集群部署

环境说明
主机名IPVIP角色
DR_client192.168.2.111null测试主机
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调度器
RS1192.168.186.10, GW:192.168.186.100lo:192.168.186.254web服务器1
RS2192.168.186.20, GW:192.168.186.200lo:192.168.186.254web服务器2
配置步骤
1.在客户端主机中为nat模式网卡

[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. 在路由主机中设定双网卡,eth0nat网卡,eth1为仅主机网卡
#对于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调度器设定网卡为仅主机模式  
[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的设定网卡为仅主机模式
[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中的网络设定
[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
#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

#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

#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.RS1RS2中解决响应问题
#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 

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/89789.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/89789.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端vue3获取excel二进制流在页面展示

excel二进制流在页面展示安装xlsx在页面中定义一个div来展示html数据定义二进制流请求接口拿到数据并展示安装xlsx npm install xlsx import * as XLSX from xlsx;在页面中定义一个div来展示html数据 <div class"file-input" id"file-input" v-html&qu…

android 信息验证动画效果

layout_check_pro <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:id"id/parent"android:layout_width"wrap_content"android:layout_…

【iOS】继承链

文章目录前言什么是继承链OC中的根类关于NSProxy关键作用1.方法查找与动态绑定2. 消息转发3. **类型判断与多态**继承链的底层实现元类的继承链总结前言 在objective-c中&#xff0c;继承链是类与类之间通过父类&#xff08;Superclass&#xff09;关系形成的一层层继承结构&am…

论文阅读:Instruct BLIP (2023.5)

文章目录InstructBLIP&#xff1a;迈向通用视觉语言模型的指令微调研究总结一、研究背景与目标二、核心方法数据构建与划分模型架构训练策略三、实验结果零样本性能消融实验下游任务微调定性分析可视化结果展示四、结论与贡献InstructBLIP&#xff1a;迈向通用视觉语言模型的指…

Elasticsearch+Logstash+Filebeat+Kibana部署【7.1.1版本】

目录 一、准备阶段 二、实验阶段 1.配置kibana主机 2.配置elasticsearch主机 3.配置logstash主机 4.配置/etc/filebeat/filebeat.yml 三、验证 1.开启Filebeat 2.在logstash查看 3.浏览器访问kibana 一、准备阶段 1.准备四台主机kibana、es、logstash、filebeat 2.在…

Vue开发前端报错:‘vue-cli-service‘ 不是内部或外部命令解决方案

1.Bug: 最近调试一个现有的Vue前端代码&#xff0c;发现如下错误&#xff1a; vue-cli-service’ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 2.Bug原因&#xff1a; 导入的工程缺少依赖包&#xff1a;即缺少node_modules文件夹 3.解决方案&#xff1…

AI生态,钉钉再「出招」

如果说之前钉钉的AI生态加持更多的围绕资源和商业的底层助力&#xff0c;那么如今这种加持则是向更深层次进化&#xff0c;即真正的AI模型训练能力加持&#xff0c;为垂类大模型创业者提供全方位的助力&#xff0c;提高创业成功率和模型产品商业化确定性。作者|皮爷出品|产业家…

XSS GAME靶场

要求用户不参与&#xff0c;触发alert(1337) 目录 Ma Spaghet! Jefff Ugandan Knuckles Ricardo Milos Ah Thats Hawt Ligma Mafia Ok, Boomer Exmaple 1 - Create Example 2 - Overwrite Example 3 - Overwrite2 toString Ma Spaghet! <h2 id"spaghet&qu…

Unity学习笔记(五)——3DRPG游戏(2)

添加更多的敌人 编辑EnemyController&#xff0c;解决报错导致敌人无法注册观察者模式&#xff0c;从而无法执行敌人庆祝动画 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; public enum EnemyStatus { GUARD,PATROL…

2025测绘程序设计国赛实战:一轮终章 | 单向后方交会C#实现

前言本文是小编对六道国赛试题中的最后一个试题&#xff0c;单向后方交会的一篇学习日志。本文的整体架构&#xff0c;依旧首先拿训练数据跟大家介绍本题涉及到的数据的属性含义&#xff0c;涉及到算法的原理、执行流程和终极目的。然后附上小编用C#来实现的程序&#xff0c;从…

基于Echarts的气象数据可视化网站系统的设计与实现(Python版)

本系统旨在构建一个基于Echarts的气象数据可视化系统&#xff0c;本系统能够从中国天气网爬取实时天气数据&#xff0c;并进行存储、分析和可视化展示。用户可以通过网页界面查看不同地区的天气情况&#xff0c;以及历史天气数据的变化趋势。 技术栈&#xff1a;Python语言、My…

HarmonyOS 启动提速秘籍:懒加载全链路实战解析

摘要 随着移动应用功能越来越复杂、界面越来越丰富&#xff0c;应用启动慢、内存占用高等问题也越来越普遍。特别是在 HarmonyOS NEXT 应用开发中&#xff0c;如果不加优化&#xff0c;用户打开页面时可能要等好几秒&#xff0c;体验就很差了。 懒加载&#xff08;Lazy Loading…

全新安装Proxmox VE启动时卡在Loading initial ramdisk

原因&#xff1a; 使用了Ventoy启动盘装载 Proxmox ISO 文件安装。 要用Ventoy优盘启动&#xff0c;选择Advance Option里的Rescue Boot&#xff0c; 修改文件/etc/default/grub.d/installer.cfg&#xff0c;删除rdinit/vtoy/vtoy运行 update-grub 更新grub配置&#xff0c;重启…

【Java项目安全基石】登录认证实战:Session/Token/JWT用户校验机制深度解析

目录 1.前言 2.正文 2.1Cookie—Session机制 2.1.1核心原理图解&#xff1a; 2.1.2四步核心流程&#xff1a; 2.1.3存储架构对比 2.1.4集群部署方案&#xff08;Spring Session Redis&#xff09; 2.2Token令牌 2.2.1核心原理图解&#xff1a; 2.2.2四步核心流程&am…

融合优势:SIP 广播对讲联动华为会议 全场景沟通响应提速​

SIP 广播对讲与华为视频会议融合解决方案&#xff0c;是基于 SIP 协议将广播对讲系统与华为视频会议系统进行整合&#xff0c;实现通信资源共享与业务流程联动&#xff0c;可提升应急响应效率与沟通协作能力。融合原理&#xff1a;SIP 是一种基于文本的应用层协议&#xff0c;具…

Milvus Dify 学习笔记

目录 docker方式&#xff1a; 模式一&#xff1a;Milvus Lite linux docker方式&#xff1a; 下载yml文件&#xff0c; https://github.com/milvus-io/milvus/releases docker启动&#xff1a; docker compose up -d from pymilvus import connections connections.conne…

汽车ECU控制器通信架构

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

【Linux】基本指令(入门篇)(上)

目录 前言 1.目录操作指令 1.1指令 1.2理论 1.2.1文件 1.2.2目录与路径 2.文件操作指令 2.1指令 2.2理论 2.2.1输出与输入 2.2.2一切皆文件 前言 这是Linux学习下的第一篇文章&#xff0c;后续Linux的学习也会持续更新分享。 Linux的基本指令是使用Linux操作系统的基础…

正向代理与反向代理理解

问&#xff1a; 应用a请求ng&#xff0c;然后ng根据不同请求路径将请求转发到不同的服务器&#xff0c;对于应用a来说这个ng是正向代理角色还是反向代理呢&#xff1f; 答&#xff1a; 在这个场景中&#xff0c;Nginx 扮演的是反向代理的角色&#xff0c;而不是正向代理。以下是…

【Kafka】深入理解 Kafka MirrorMaker2 - 实战篇

文章目录一、把“家伙事儿”都备齐二、部署其实很简单三、配置 MirrorMaker2四、修改启动脚本五、集群启动与验证六、这集群“结实”吗&#xff1f;聊聊它的高可用它没有“大脑”&#xff0c;但活得很好极限测试&#xff1a;干掉两个节点会怎样&#xff1f;写在最后最近在跟 Ka…