一文学会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的使用,可以大大提升系统的性能和可靠性。


 

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

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

相关文章

英语中have和have got区别

文章目录 探讨英语中“Have”与“Have Got”的区别1. 基本用法与定义1.1 “Have”1.2 “Have Got” 2. 语法结构的比较2.1 时态与形式2.2 否定和疑问形式 3. 语用功能的差异3.1 强调与感情色彩3.2 地域偏好 4. 使用场景 探讨英语中“Have”与“Have Got”的区别 英语中“have”…

深度学习展示交互笔记

交互库gradio https://zhuanlan.zhihu.com/p/679668818 pip install gradio import gradio as gr print(gr.__version__) # 4.15.0 import gradio as grdef greet(name):return "Hello " name "!" iface gr.Interface(fngreet, inputsgr.Textbox(), ou…

v0.9.6 开源跨平台个人知识管理工具 TidGi-Desktop

在这个信息爆炸的时代&#xff0c;知识管理变得尤为重要。太记(TidGi)&#xff0c;一款基于太微(TiddlyWiki)的知识管理桌面应用&#xff0c;正是为了满足人们对信息整理、知识管理和个人隐私保护的需求而设计的。它不仅能够帮助用户高效地管理和整理信息&#xff0c;还能够自动…

儿童悬吊训练系统的安全性介绍

儿童悬吊训练系统以其独特的优势成为了孩子们康复训练的好帮手。它不仅为孩子们提供了一个全新的锻炼方式&#xff0c;更在安全性上做了全面的考虑和设计&#xff0c;确保孩子们在享受训练乐趣的同时&#xff0c;也能得到充分的保护。 儿童悬吊训练系统的安全性介绍 高强度材料…

4.sql注入攻击(OWASP实战训练)

4.sql注入攻击&#xff08;OWASP实战训练&#xff09; 引言1&#xff0c;实验环境owasp&#xff0c;kali Linux。2&#xff0c;sql注入危害3&#xff0c;sql基础回顾4&#xff0c;登录owasp5&#xff0c;查询实例&#xff08;1&#xff09;简单查询实例&#xff08;2&#xff0…

go中的方法 func-----数据类型

本文是java学习者学go种产生的容易记混点的笔记,所以有其他编译语言的基础更好 go的方法有点像js 基础 func main() {fmt.Println("Starting")var p *string new(string)*p "hello world"demo : "demo"fmt.Println(*&demo) //这样既然也…

《饮食业油烟排放标准》:油烟净化器行业的机遇与挑战

我最近分析了餐饮市场的油烟净化器等产品报告&#xff0c;解决了餐饮业厨房油腻的难题&#xff0c;更加方便了在餐饮业和商业场所有需求的小伙伴们。 随着《饮食业油烟排放标准》的出台和严格实施&#xff0c;油烟净化器行业迎来了新的发展机遇&#xff0c;也面临着诸多挑战。…

【文献及模型、制图分享】汾河流域新型城镇化与生态韧性耦合协调时空演变及协调影响力研究

公众号新功能 目前公众号新增以下等功能 1、处理GIS出图、Python制图、区位图、土地利用现状图、土地利用动态度和重心迁移图等等 2、核密度分析、网络od分析、地形分析、空间分析等等 3、地理加权回归、地理探测器、生态环境质量指数、地理加权回归模型影响因素分析、计算…

《妃梦千年》第十二章:层层迷雾

第十二章&#xff1a;层层迷雾 苏珊遭遇险境的消息让林清婉感到紧张。她知道&#xff0c;宫中有些人对她的势力感到威胁&#xff0c;试图通过伤害苏珊来打击她。林清婉决定采取更谨慎的措施保护自己和苏珊&#xff0c;同时查明幕后黑手的身份。 几天后&#xff0c;林清婉收到…

mysql查询2个日期之间的数据,表字段只有年和月,无日期字段查询的解决

1.核心mysql查询 SELECT * FROM 表名 WHERE CONCAT(year, -, LPAD(month, 2, 0)) > 2022-02-08 AND CONCAT(year, -, LPAD(month, 2, 0)) < 2024-06-06;2.表结构 CREATE TABLE ys_datezzq (id int(10) NOT NULL AUTO_INCREMENT,bid int(10) NOT NULL DEFAULT 0 COMMEN…

使用单调队列求滑动窗口最大值

单调队列&#xff1a;队列元素之间的关系具有单调性&#xff08;从队首到队尾单调递增/递减&#xff09;&#xff0c;队首与队尾进行插入与删除操作&#xff0c;使队列保持单调递增/递减&#xff0c;由双端队列deque实现。 通过例题对单调队列进行分析掌握&#xff1a; 使用单…

力扣随机一题 6/26 哈希表 数组 思维

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 题目一&#xff1a; 2869.收集元素的最少操作次数【简单】 题目&#xff…

深度学习31-33

1.负采样方案 &#xff08;1&#xff09;为0是负样本&#xff0c;负样本是认为构造出来的。正样本是有上下文关系 负采样的target是1&#xff0c;说明output word 在input word之后。 2.简介与安装 &#xff08;1&#xff09;caffe:比较经常用于图像识别&#xff0c;有卷积网…

小脚本:文件保存后,自动上传到git

闲来无事写写小脚本 假设已经有一个脚本 echo off:START :: 获取当前脚本的路径 cd /d %~dp0:: 清空提交注释变量的值 set commit_msg:: 提示用户输入提交注释 set /p commit_msg请输入提交注释&#xff08;输入 n 退出&#xff09;::: 如果用户输入内容为 n&#xff0c;则退出…

Yolo v5实现细节(2)

Yolo v5代码实现细节 IOU系列损失 在之前的yolo v3中我们使用的定位损失主要使用的是差值平方的形式&#xff0c;通过预测边界框的参数和真实边界框的参数来进行计算求解的。 定位损失 L loc ( t , g ) ∑ i ∈ pos ( σ ( t x i ) − g ^ x i ) 2 ( σ ( t y i ) − g ^ …

云服务器部署LNMP Web环境教程合集(多版linux系统安装方法)

LNMP环境包括Linux、Nginx、MySQL和PHP&#xff0c;Nginx是一款小巧而高效的Web服务器软件&#xff0c;使用阿里云服务器搭建LNMP Web网站环境很简单&#xff0c;支持多种LNMP环境部署教程&#xff0c;可使用ROS模板部署、LNMP镜像以及基于不同Linux操作系统手动部署LNMP全流程…

MySQL进阶——触发器

目录 1介绍 2语法 3案例 3.1 insert插入数据类型 3.2 update修改数据类型 3.3 delete删除数据类型 4视图/存储过程/触发器—小结 1介绍 触发器是与表有关的数据库对象&#xff0c;指在insert/update/delete之前(BEFORE)或之后(AFTER)&#xff0c;触发并执行触发器中定义…

【设计模式】【创建型5-5】【原型模式】

文章目录 原型模式代码示例 原型模式 代码使用&#xff1a;spring框架里 bean的作用域 用途&#xff0c;以原型为模板&#xff0c;源源不断的创建&#xff08;克隆 clone&#xff09;对象。当直接创建对象的代价比较大时&#xff0c;则采用这种模式。 代码示例 public class…

字节发布Depth Anything V2深度模型,比 Depth Anything V1 更精细的细节。

欢迎点击关注下方公众号并加入官方读者交流群&#xff0c;一个有趣有AI的AIGC公众号:关注AI、深度学习、计算机视觉、AIGC、Stable Diffusion、Sora等相关技术&#xff0c;欢迎一起交流学习&#x1f497;&#xff5e; 字节发布Depth Anything V2深度模型。比 Depth Anything V1…

idea使用maven打包报错GBK不可映射字符

方法一&#xff1a;设置环境变量 打开“控制面板” > “系统和安全” > “系统”。点击“高级系统设置”。在“系统属性”窗口中&#xff0c;点击“环境变量”。在“系统变量”部分&#xff0c;点击“新建”&#xff0c;创建一个新的变量&#xff1a; 变量名&#xff1a;…