一文学会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,为保证生产环…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
