一文学会LVS:概念、架构、原理、搭建过程、常用命令及实战案例
引言
随着互联网技术的飞速发展,服务器负载均衡技术变得越来越重要。LVS(Linux Virtual Server)作为一种高效的负载均衡解决方案,广泛应用于各大企业的生产环境中。本文将深入探讨LVS的概念、架构、工作原理,详细讲解其搭建过程,介绍常用命令,并通过实战案例帮助读者更好地理解和应用LVS。
一、LVS概念
1.1 什么是LVS?
LVS(Linux Virtual Server)是一个基于Linux操作系统的虚拟服务器技术,用于实现负载均衡和高可用性。LVS通过将客户端的请求分发到多台后端服务器上,从而提高整体服务的处理能力和可靠性。LVS主要有两个组件:IPVS(IP Virtual Server)和LVS-NAT、LVS-DR、LVS-TUN三种工作模式。
1.2 LVS的优势
高性能:LVS工作在内核层,性能高效,能够处理大量并发请求。
高可用性:通过配置Keepalived等工具,LVS可以实现高可用性,确保服务的持续运行。
灵活性强:支持多种负载均衡算法和工作模式,适应不同的应用场景。
二、LVS架构
2.1 LVS整体架构
LVS的整体架构主要包括负载均衡器(Load Balancer)、后端服务器(Real Server)和客户端三部分。客户端的请求首先到达负载均衡器,然后由负载均衡器根据一定的调度算法将请求转发到后端服务器进行处理,处理结果再返回给客户端。
2.2 LVS的工作模式
LVS支持三种主要的工作模式:
LVS-NAT(Network Address Translation):在该模式下,负载均衡器不仅需要修改请求报文的目标地址,还需要修改响应报文的源地址,适用于小规模集群。
LVS-DR(Direct Routing):在该模式下,负载均衡器只修改请求报文的目标MAC地址,而不修改IP地址,后端服务器直接将响应报文发回客户端,适用于大规模集群。
LVS-TUN(IP Tunneling):该模式通过IP隧道将请求转发到后端服务器,后端服务器直接将响应报文发回客户端,适用于地理位置分散的集群。
2.3 LVS的调度算法
LVS提供了多种调度算法,以适应不同的应用需求:轮询调度(Round Robin):将请求依次分配给每个后端服务器。
加权轮询调度(Weighted Round Robin):根据服务器的权重将请求分配给后端服务器。
最少连接调度(Least Connections):将请求分配给当前连接数最少的后端服务器。
加权最少连接调度(Weighted Least Connections):根据服务器的权重和当前连接数分配请求。
基于局部性的最少连接调度(Locality-Based Least Connections):优先将请求分配给最近使用的服务器。
三、LVS工作原理
3.1 LVS-NAT工作原理
在LVS-NAT模式下,负载均衡器通过NAT(网络地址转换)技术将客户端的请求报文目标地址修改为后端服务器的IP地址,同时记录会话信息。当后端服务器处理完请求后,负载均衡器将响应报文的源地址修改为负载均衡器的IP地址,再返回给客户端。
3.2 LVS-DR工作原理
在LVS-DR模式下,负载均衡器仅修改请求报文的目标MAC地址,而不修改IP地址。负载均衡器将请求发送到后端服务器后,后端服务器直接将响应报文发回客户端。由于不修改IP地址,该模式具有较高的处理效率。
3.3 LVS-TUN工作原理
在LVS-TUN模式下,负载均衡器通过IP隧道将请求报文发送到后端服务器。后端服务器解封装后处理请求,并直接将响应报文发回客户端。该模式适用于地理位置分散的集群。
四、LVS搭建过程
4.1 准备工作
在开始搭建LVS之前,需要准备以下环境:两台或多台服务器:一台作为负载均衡器,其余作为后端服务器。
操作系统:推荐使用CentOS或其他基于Linux的操作系统。
网络环境:确保服务器之间能够互相通信。
4.2 安装LVS
在负载均衡器上安装IPVSADM工具:
yum install ipvsadm -y |
4.3 配置LVS-NAT
在负载均衡器上,配置LVS-NAT模式:
启动IPVSADM:
systemctl start ipvsadm |
systemctl enable ipvsadm |
添加虚拟服务器:
ipvsadm -A -t 192.168.1.100:80 -s rr |
添加后端服务器:
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.101:80 -m | |
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.102:80 -m |
4.4 配置LVS-DR
在负载均衡器上,配置LVS-DR模式:
启动IPVSADM:
systemctl start ipvsadm | |
systemctl enable ipvsadm |
添加虚拟服务器:
ipvsadm -A -t 192.168.1.100:80 -s rr |
添加后端服务器:
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.101:80 -g | |
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.102:80 -g |
4.5 配置LVS-TUN
在负载均衡器上,配置LVS-TUN模式:
启动IPVSADM:
systemctl start ipvsadm | |
systemctl enable ipvsadm |
添加虚拟服务器:
ipvsadm -A -t 192.168.1.100:80 -s rr |
添加后端服务器:
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.101:80 -i | |
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.102:80 -i |
4.6 配置后端服务器
在每台后端服务器上,配置IP地址和路由:
ifconfig eth0:1 192.168.1.100 netmask 255.255.255.255 up | |
route add -host 192.168.1.100 dev eth0:1 |
五、LVS常用命令
5.1 查看LVS配置
ipvsadm -L -n |
5.2 添加虚拟服务器
ipvsadm -A -t <Virtual IP>:<Port> -s <Scheduling Method> |
5.3 删除虚拟服务器
ipvsadm -D -t <Virtual IP>:<Port> |
5.4 添加后端服务器
ipvsadm -a -t <Virtual IP>:<Port> -r <Real Server IP>:<Port> -<Forwarding Method> |
5.5 删除后端服务器
ipvsadm -d -t <Virtual IP>:<Port> -r <Real Server IP>:<Port> |
5.6 清空LVS配置
ipvsadm -C |
5.7 保存LVS配置
ipvsadm-save > /etc/sysconfig/ipvsadm |
5.8 恢复LVS配置
ipvsadm-restore < /etc/sysconfig/ipvsadm |
六、LVS实战案例(续)
假设有两台后端服务器192.168.1.101和192.168.1.102,它们都运行着HTTP服务。我们将使用LVS来实现HTTP服务的负载均衡。
6.1.1 环境准备
确保以下环境:
负载均衡器的IP:192.168.1.100
后端服务器的IP:192.168.1.101和192.168.1.102
后端服务器安装并运行HTTP服务(如Apache或Nginx)
6.1.2 配置负载均衡器
在负载均衡器上安装并配置LVS。
安装ipvsadm:
yum install ipvsadm -y |
配置LVS-DR模式:
# 启动IPVSADM服务
systemctl start ipvsadm | |
systemctl enable ipvsadm |
# 添加虚拟服务器
ipvsadm -A -t 192.168.1.100:80 -s rr |
# 添加后端服务器
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.101:80 -g | |
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.102:80 -g |
查看LVS配置:
ipvsadm -L -n |
6.1.3 配置后端服务器
在每台后端服务器上进行以下配置:
设置虚拟IP地址:
ifconfig eth0:1 192.168.1.100 netmask 255.255.255.255 up |
配置路由:
route add -host 192.168.1.100 dev eth0:1 |
禁用ARP响应:在/etc/sysctl.conf中添加以下内容:
net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.eth0.arp_ignore = 1 net.ipv4.conf.eth0.arp_announce = 2 |
使配置生效:
sysctl -p |
6.1.4 验证负载均衡
在客户端浏览器中访问http://192.168.1.100,可以看到请求被分发到不同的后端服务器。
6.2 实现HTTPS负载均衡
假设有两台后端服务器192.168.1.103和192.168.1.104,它们都运行着HTTPS服务。我们将使用LVS来实现HTTPS服务的负载均衡。
6.2.1 环境准备
确保以下环境:
负载均衡器的IP:192.168.1.105
后端服务器的IP:192.168.1.103和192.168.1.104
后端服务器安装并运行HTTPS服务(如Apache或Nginx)
6.2.2 配置负载均衡器
在负载均衡器上安装并配置LVS。
安装ipvsadm:
yum install ipvsadm -y |
配置LVS-DR模式:
# 启动IPVSADM服务
systemctl start ipvsadm | |
systemctl enable ipvsadm |
# 添加虚拟服务器
ipvsadm -A -t 192.168.1.105:443 -s rr |
# 添加后端服务器
ipvsadm -a -t 192.168.1.105:443 -r 192.168.1.103:443 -g | |
ipvsadm -a -t 192.168.1.105:443 -r 192.168.1.104:443 -g |
查看LVS配置:
ipvsadm -L -n |
6.2.3 配置后端服务器
在每台后端服务器上进行以下配置:
设置虚拟IP地址:
ifconfig eth0:1 192.168.1.105 netmask 255.255.255.255 up |
配置路由:
route add -host 192.168.1.105 dev eth0:1 |
禁用ARP响应:
在/etc/sysctl.conf中添加以下内容:
net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.eth0.arp_ignore = 1 net.ipv4.conf.eth0.arp_announce = 2 |
使配置生效:
sysctl -p |
6.2.4 验证负载均衡
在客户端浏览器中访问https://192.168.1.105,可以看到请求被分发到不同的后端服务器。
6.3 实现TCP负载均衡
假设有两台后端服务器192.168.1.106和192.168.1.107,它们都运行着TCP服务(如数据库服务)。我们将使用LVS来实现TCP服务的负载均衡。
6.3.1 环境准备
确保以下环境:
负载均衡器的IP:192.168.1.108
后端服务器的IP:192.168.1.106和192.168.1.107
后端服务器安装并运行TCP服务(如MySQL)
6.3.2 配置负载均衡器
在负载均衡器上安装并配置LVS。
安装ipvsadm:
yum install ipvsadm -y |
配置LVS-DR模式:
# 启动IPVSADM服务
systemctl start ipvsadm | |
systemctl enable ipvsadm |
# 添加虚拟服务器
ipvsadm -A -t 192.168.1.108:3306 -s rr |
# 添加后端服务器
ipvsadm -a -t 192.168.1.108:3306 -r 192.168.1.106:3306 -g ipvsadm -a -t 192.168.1.108:3306 -r 192.168.1.107:3306 -g |
查看LVS配置:
ipvsadm -L -n |
6.3.3 配置后端服务器
在每台后端服务器上进行以下配置:
设置虚拟IP地址:
route add -host 192.168.1.105 dev eth0:1 |
ifconfig eth0:1 192.168.1.108 netmask 255.255.255.255 up
配置路由:
route add -host 192.168.1.105 dev eth0:1 |
route add -host 192.168.1.108 dev eth0:1
禁用ARP响应:
在/etc/sysctl.conf中添加以下内容:
net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.eth0.arp_ignore = 1 net.ipv4.conf.eth0.arp_announce = |
使配置生效:
sysctl -p |
6.3.4 验证负载均衡
使用数据库客户端连接192.168.1.108,可以看到请求被分发到不同的后端服务器。
七、总结
通过本文,我们详细介绍了LVS的概念、架构、工作原理、搭建过程、常用命令及实战案例。LVS作为一种高效的负载均衡解决方案,在处理大量并发请求和实现服务高可用性方面表现优异。掌握LVS的使用,可以大大提升系统的性能和可靠性。
相关文章:
一文学会LVS:概念、架构、原理、搭建过程、常用命令及实战案例
引言 随着互联网技术的飞速发展,服务器负载均衡技术变得越来越重要。LVS(Linux Virtual Server)作为一种高效的负载均衡解决方案,广泛应用于各大企业的生产环境中。本文将深入探讨LVS的概念、架构、工作原理,详细讲解其…...

[Go 微服务] Kratos 使用的简单总结
文章目录 1.Kratos 简介2.传输协议3.日志4.错误处理5.配置管理6.wire 1.Kratos 简介 Kratos并不绑定于特定的基础设施,不限定于某种注册中心,或数据库ORM等,所以您可以十分轻松地将任意库集成进项目里,与Kratos共同运作。 API -&…...

【unity实战】使用旧输入系统Input Manager 写一个 2D 平台游戏玩家控制器——包括移动、跳跃、滑墙、蹬墙跳
最终效果 文章目录 最终效果素材下载人物环境 简单绘制环境角色移动跳跃视差和摄像机跟随效果奔跑动画切换跳跃动画,跳跃次数限制角色添加2d物理材质,防止角色粘在墙上如果角色移动时背景出现黑线条方法一方法二 墙壁滑行实现角色滑墙不可以通过移动离开…...

【实战】EasyExcel实现百万级数据导入导出
文章目录 前言技术积累实战演示实现思路模拟代码测试结果 前言 最近接到一个百万级excel数据导入导出的需求,大概就是我们在进行公众号API群发的时候,需要支持500w以上的openid进行群发,并且可以提供发送openid数据的导出功能。可能有的同学…...
Graalvm配置文件与Feature和Substitute机制介绍
GraalVM介绍 GraalVM提前将Java应用程序编译成独立与机器码二进制文件(可执行文件、动态库文件),如windows系统中的exe文件和dll文件。与在Java虚拟机(JVM)上运行的应用程序相比,这些二进制文件更小,启动速…...

Appium adb 获取appActivity
方法一(最简单有效的方法) 通过cmd命令,前提是先打开手机中你要获取包名的APP adb devices -l 获取连接设备详细信息 adb shell dumpsys activity | grep mFocusedActivity 有时获取到的不是真实的Activity 方法二 adb shell monkey -p …...

调整分区失败致盘无法访问:深度解析与数据恢复全攻略
调整分区失败盘打不开的困境 在计算机的日常维护与管理中,调整磁盘分区是常见的操作之一,旨在优化存储空间布局、提升系统性能或满足特定应用需求。然而,当这一操作未能如预期般顺利进行,反而导致分区调整失败,进而使…...

试用笔记之-汇通计算机等级考试软件一级Windows
首先下载汇通计算机等级考试软件一级Windows http://www.htsoft.com.cn/download/htwork.rar...

Java的NIO体系
目录 NIO1、操作系统级别下的IO模型有哪些?2、Java语言下的IO模型有哪些?3、Java的NIO应用场景?相比于IO的优势在哪?4、Java的IO、NIO、AIO 操作文件读写5、NIO的核心类 :Buffer(缓冲区)、Channelÿ…...
自下而上的选股与自上而下的选股
一起学习了《战胜华尔街》,不知道大家有没有这么一种感受:林奇的选股方法是典型的自下而上的选股方法。虽然这一点没有单独拎出来讨论过,但在《从低迷中寻找卓越》《如何通过财务指标筛选股票?》《边逛街边选股?》《好…...

Tech Talk:智能电视eMMC存储的五问五答
智能电视作为搭载操作系统的综合影音载体,以稳步扩大的市场规模走入越来越多的家庭,成为人们生活娱乐的重要组成部分。存储部件是智能电视不可或缺的组成部分,用于保存操作系统、应用程序、多媒体文件和用户数据等信息。智能电视使用eMMC作为…...

scikit-learn教程
scikit-learn(通常简称为sklearn)是Python中最受欢迎的机器学习库之一,它提供了各种监督和非监督学习算法的实现。下面是一个基本的教程,涵盖如何使用sklearn进行数据预处理、模型训练和评估。 1. 安装和导入包 首先确保安装了…...

CentOS 7 搭建rsyslog日志服务器
CentOS 7 搭建rsyslog日志服务器 前言一、IP地址及主机名称规划1.修改主机名 二、配置rsyslog日志服务器1.安装rsyslog服务2.编辑/etc/rsyslog.conf 文件3.启动并启用rsyslog服务4.验证端口是否侦听 三、在rsyslog日志服务器上配置firewalld防火墙四、配置rsyslog日志客户端1.编…...
使用Spring Boot Actuator监控应用健康状态
使用Spring Boot Actuator监控应用健康状态 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何利用Spring Boot Actuator来监控和管理应用程序的…...

leetcode刷题:vector刷题
🔥个人主页:guoguoqiang. 🔥专栏:leetcode刷题 1.只出现一次的数字 这道题很简单,我们只需要遍历一次数组即可通过异或运算实现。(一个数与自身异或结果为0,任何数与0异或还是它本身) class Solut…...
CGI面试题及参考答案
什么是CGI?它在Web服务器与应用程序之间扮演什么角色? CGI(Common Gateway Interface) 是一种标准协议,它定义了Web服务器与运行在服务器上的外部程序(通常是脚本或应用程序)之间的通信方式。简单来说,CGI充当了一个桥梁,使得Web服务器能够将用户的请求传递给后端程序…...
论文调研_物联网漏洞检测综述
A Review of IoT Firmware Vulnerabilities and Auditing Techniques 研究背景:物联网设备在工业、消费类等各个领域得到了广泛应用,实现了更高的自动化和生产率。然而,这些连网设备的高度依赖也带来了一系列网络安全威胁,特别是…...

Java学习【IO流:深入理解与应用(上)】
Java学习【IO流:深入理解与应用(上)】 🍃1.IO流体系结构🍃2.FileOutputStream🍁2.1FileOutputStream写数据的三种方式🍁2.2换行和续写 🍃3.FileInputStream🍁3.1每次读取…...
干货系列:SpringBoot3第三方接口调用10种方式
环境:SpringBoot.3.3.0 1、简介 在项目中调用第三方接口是日常开发中非常常见的。调用方式的选择通常遵循公司既定的技术栈和架构规范,以确保项目的一致性和可维护性。无论是RESTful API调用、Feign声明式HTTP客户端、Apache HttpClient等调用方式&…...

KVM性能优化之CPU优化
1、查看kvm虚拟机vCPU的QEMU线程 ps -eLo ruser,pid,ppid,lwp,psr,args |awk /^qemu/{print $1,$2,$3,$4,$5,$6,$8} 注:vcpu是不同的线程,而不同的线程是跑在不同的cpu上,一般情况,虚拟机在运行时自身会点用3个cpus,为保证生产环…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

五子棋测试用例
一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...