一文学会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,为保证生产环…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
Windows 下端口占用排查与释放全攻略
Windows 下端口占用排查与释放全攻略 在开发和运维过程中,经常会遇到端口被占用的问题(如 8080、3306 等常用端口)。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口,帮助你高效解决此类问题。 一、准…...
