lvs使用

1.前言

LVS(Linux Virtual Server)是一个基于 Linux 内核的负载均衡器,用于分发网络流量和将请求转发给后端服务器。LVS 提供了多种负载均衡算法和转发模式,以满足不同场景和需求的负载均衡需求,在LVS中定义虚拟服务的VIP(Virtual IP)和端口是为了将客户端的请求引导到负载均衡器,并进行负载均衡和请求转发,虚拟服务的VIP是一个虚拟的IP地址,对客户端而言,它是服务的入口地址。客户端将请求发送到虚拟服务的VIP地址,而不是直接发送到后端服务器的实际IP地址。这样,负载均衡器可以根据定义的负载均衡算法,将请求转发给后端服务器,实现负载均衡和流量分发的功能

2.lvs功能

LVS 提供了三种负载均衡的转发模式

NAT 模式(Network Address Translation):在LVS的NAT模式中,当客户端发送请求时,请求经过负载均衡器后,负载均衡器会对请求进行地址转换,并将请求转发给后端服务器。后端服务器处理请求后,将响应返回给负载均衡器,负载均衡器再将响应转发给客户端。这种模式下,负载均衡器扮演了中间转发角色,需要处理请求和响应的转发和转换,既要处理请求的接入,又要处理请求的响应,会存在较大性能瓶颈

DR 模式(Direct Routing):在LVS的DR模式中,负载均衡器通过修改网络的ARP表,将客户端请求直接路由到后端服务器。后端服务器直接与客户端进行通信,将响应直接返回给客户端,而不需要经过负载均衡器。在这种模式下,负载均衡器主要负责请求的路由和负载均衡,而不参与实际数据包的转发和响应,因为只负责转发消耗的资源小,因此性能高,存在的瓶颈小

TUN 模式(Tunneling):负载均衡器在网络层上对请求进行封装和解封,将请求转发给后端服务器,限制比较大,实际中较少使用

DR模式相对于NAT模式具有以下优势:

减少负载均衡器的工作量:DR模式下,负载均衡器不需要处理请求和响应的转发和转换,可以减轻负载均衡器的负担,提高性能和可扩展性

减少延迟:由于响应直接由后端服务器返回给客户端,无需经过负载均衡器的中转,可以减少延迟,提高响应速度

可扩展性:DR模式允许将负载均衡器和后端服务器分别部署在不同的子网中,提供更高的可扩展性和灵活性

lvs负载均衡策略

轮询(Round Robin):这是最常见的负载均衡策略之一。每个新的请求按照顺序分发给后端服务器。当所有后端服务器都参与负载均衡时,请求将按照相等的权重轮流分发给它们。这种策略适用于后端服务器配置相似、负载均匀的情况

加权轮询(Weighted Round Robin):类似于轮询策略,但每个后端服务器分配一个权重值,根据权重值分配请求。具有较高权重值的服务器将获得更多的请求。这个策略适用于后端服务器的性能不同,希望按照性能分配负载的情况

最少连接(Least Connection):根据后端服务器的当前连接数来选择最少连接的服务器来处理新请求。这种策略可以确保负载均衡,使得请求分布更加均匀,适用于长连接或有长时间处理请求的场景

源IP散列(Source IP Hash):根据客户端的源IP地址对请求进行散列,并将其路由到相应的后端服务器。相同的源IP地址将始终被路由到相同的服务器上,这对于需要保持会话一致性的应用程序很有用

最快响应时间(Least Response Time):根据后端服务器的响应时间来选择最快响应的服务器来处理新请求。这种策略尝试将请求发送到能够更快响应的服务器,以提供更好的用户体验

3.ipvsadm工具介绍

ipvsadm 是一个管理 Linux Virtual Server (LVS) 内核模块的命令行工具。它允许你配置和管理 IP 负载均衡器

-A--add-service:添加一个新的负载均衡服务

-C--clear:清除所有现有的负载均衡服务

-D--delete-service:删除指定的负载均衡服务

-E--set:设置负载均衡服务的属性

a--add-server:向负载均衡服务中添加一个后端服务器

-d--delete-server:从负载均衡服务中删除指定的后端服务器

-g--gatewaying:将负载均衡服务设置为网关模式

-e--expire-nodest:设置后端服务器的超时时间

-m--masquerading:将负载均衡服务设置为伪装模式

-r--scheduler:指定负载均衡服务的调度器算法

-w--weight:设置后端服务器的权重

-L--list:列出所有负载均衡服务及其相关配置

-S--save:将当前配置保存到文件

-R--restore:从文件中恢复配置

也可以通过以下命令查看

ipvsadm --help

4.lvs使用

以下就通过使用nat模式和dr模式分别来展示lvs的使用,负载均衡策略这里我们统一使用轮询模式

主机信息

nameipportservice
A10.1.60.115、10.1.60.116(虚拟地址)80lvs
B10.1.60.11280nginx
C10.1.60.11480nginx

nat模式

 

所有主机均关闭selinux和防火墙

在A主机执行以下配置

开启内核转发

vi /etc/sysctl.conf

net.ipv4.ip_forward = 1

执行以下命令使配置生效

sysctl -p

增加虚拟网卡(模拟真实环境中的外网ip)

ifconfig ens160:1 10.1.60.116/24

需要删除的话可以使用down参数

ifconfig ens160:1 down

安装ipvsadm工具,用于配置ipvs规则

yum -y install ipvsadm

配置lvs负载均衡服务

ipvsadm -A -t 10.1.60.116:80 -s rr

ipvsadm -a -t 10.1.60.116:80 -r 10.1.60.114:80 -m

ipvsadm -a -t 10.1.60.116:80 -r 10.1.60.112:80 -m

-m:配置为nat模式   -r:配置后端真实地址 -t:配置虚拟地址 -s:配置负载均衡策略为rr轮询策略

查看lvs策略

 在B、C主机执行以下配置

将网卡的网关配置为A主机的地址,即10.1.60.115

 vi /etc/sysconfig/network-scripts/ifcfg-ens160 

 重启网络服务

systemctl restart network

查看路由信息

route -n

更改nginx的默认页面

mv /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.bak

D主机则将C改为D即可

echo "this is C" >> /usr/share/nginx/html/index.html

启动nginx服务并配置开机启动

systemctl start nginx

systemctl enable nginx
 

使用其它主机访问可以发现访问正常,不能用同网段的主机访问

RD模式

所有主机均关闭selinux和防火墙

在A主机执行以下配置

配置一个虚拟网卡

ifconfig ens160:1 10.1.60.116/24

ip add

配置lvs规则

ipvsadm -A 10.1.60.116:80 -s rr                     #配置负载均衡服务

ipvsadm -a -t 10.1.60.116:80 -r 10.1.60.112:80 -g     #为负载均衡服务添加后端的转发地址

ipvsadm -a -t 10.1.60.116:80 -r 10.1.60.114:80 -g     #为负载均衡服务添加后端的转发地址

-g:配置为DR模式   -r:配置后端真实地址 -t:配置虚拟地址 -s:配置负载均衡策略为rr轮询策略

查看lvs规则

ipvsadm -Ln

在B、C主机执行以下配置

增加虚拟网卡配置为A主机的虚拟网卡地址,但是只用于接收客户数据,不能被外部访问,在此就引用lo网卡配置

ifconfig lo:1 10.1.60.116 netmask 255.255.255.255

ip add

优化内核arp参数配置

vi /etc/sysctl.conf

net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2

执行以下命令使配置生效

sysctl -p

配置路由

route add -host 10.1.60.116 dev lo:1

route -n

 在其它主机访问测试

curl 10.1.60.116

可以看到访问虚拟地址可以正常被轮询转发到后端的服务

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

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

相关文章

制作Visual Studio离线安装包

vs2015之后官网就不提供离线安装包了,使用离线安装包就需要自己手动制作一个; 以vs2019为例: 先去官网下载在线安装器 官网下载地址:Visual Studio 较旧的下载 - 2019、2017、2015 和以前的版本 (microsoft.com) 展开2019的标签…

#SQL常见错误信息表 mysql导入数据出错常见错误

mysql的出错代码表,根据mysql的头文件mysql/include/mysqld_error.h整理而成。错误之处,请大家指正。 1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存…

【C语言】深剖数据在内存中的存储

👦个人主页:Weraphael ✍🏻作者简介:目前正在回炉重造C语言(2023暑假) ✈️专栏:【C语言航路】 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你…

Qt面试题集合

Qt 中常用的五大模块是哪些? Qt 中常用的五大模块包括: QtCore:提供了 Qt 的核心功能,例如基本的非 GUI 类、线程和事件处理等。 QtGui:提供用户界面(UI)类,例如窗口部件、按钮、标…

免费热门的 OCR 识别类接口汇总

OCR 识别类 身份证识别OCR:传入身份证照片,识别照片文字信息并返回,包括姓名、身份证号码、性别、民族、出生年月日、地址、签发机关及有效期。 通用文字识别OCR:多场景、多语种、高精度的整图文字检测和识别服务,多…

MySQL—约束和分页(八)

1.NOT NULL约束 -- 1 NOT NULL 约束 -- 1.1 创建NOT NULL 约束 -- 1.1.2 为id添加非空约束,为name添加非空约束,并设置默认值 CREATE TABLE emp( id INT(10) NOT NULL, name VARCHAR(20) NOT NULL DEFAULT abc, sex CHAR NULL ); -- 1.2 增加NOT NULL 约…

初识react

初识react 第一步就给我出个问题版本太低 https://www.cnblogs.com/gslgb/p/16585233.html https://blog.csdn.net/xiangshiyufengzhong/article/details/124193898 第二个问题 便利生成dom 需要绑定key 不要总想着加冒号这不是vue 第三个问题 我p标签包裹 MapList组件 MapLis…

java代码实现二叉树的先序、中序、后序和层次遍历的递归和循环迭代方式

import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Deque; import java.util.LinkedList; import java.util.List; import java.util.Queue; import java.util.Stack;public class InorderTraversal {// 先序遍历// 递归实现/** public static void …

C++并发多线程--临时对象的使用

1--传递临时对象作为线程参数 当使用 detach() 分离线程时,传递参数应注意以下问题: (1)传递 int 等简单类型参数时,建议使用值传递,而不使用引用传递,避免参数回收的问题(主线程首先…

Redis相关配置(3)

⭐ 作者简介:码上言 ⭐ 代表教程:Spring Boot vue-element 开发个人博客项目实战教程 ⭐专栏内容:个人博客系统 ⭐我的文档网站:http://xyhwh-nav.cn/ 文章目录 Redis相关配置1、units2、Include3、loadmodule 加载模块4、NET…

创意网页模板免费下载,让你的网站与众不同!

今天给大家带来的网站模板素材,网站类型丰富,包含户外旅行、餐饮、个人网站等等,可以学习和参考其中的布局排版和配色。 ⬇⬇⬇点击获取更多设计资源 https://js.design/community?categorydesign&sourcecsdn&planbbqcsdn772 1、设…

uniapp日期选择器在手机上不能选择日期问题

日期选择器之前是这样写的&#xff1a; <picker mode"date" :value"date" start"" end"" change"bindDateChange"> <view class"picker"> <text class"tishi2"&…

【1++的C++初阶】之vector

&#x1f44d;作者主页&#xff1a;进击的1 &#x1f929; 专栏链接&#xff1a;【1的C初阶】 文章目录 一&#xff0c;什么是vector?二&#xff0c;构造与析构三&#xff0c;vector迭代器的实现四&#xff0c;vector部分重要接口的实现 一&#xff0c;什么是vector? vector…

使用NVIDIA FX Composer验证多纹理合成效果

最近项目上有一个需求&#xff0c;需要将4张带透明通道纹理合成为一张&#xff0c;并且每张纹理指定一个全局透明度。由于纹理过多&#xff0c;合成效果无法保证&#xff0c;为了减少项目的风险&#xff0c;领导希望我先快速验证一下我们讨论的方法是否能完成项目的要求。因此我…

Kotlin版本实现Gradle插件

Kotlin版本实现Gradle插件 本文链接&#xff1a;https://blog.csdn.net/feather_wch/article/details/131746478 创建一个Gradle项目&#xff0c;并选择Kotlin/JVM作为项目SDK。假设项目的名称为hello-plugin。在项目中创建一个新的源集&#xff0c;比如plugin&#xff0c;用…

销售易的12年与七个瞬间

导读&#xff1a;企业级没有捷径 12年对一家企业意味着什么&#xff1f; 在消费互联网领域&#xff0c;12年足够长&#xff0c;短短几年内上市的故事过去屡见不鲜。在企业服务的toB领域&#xff0c;产业成熟和企业发展的时间维度被拉长&#xff0c;但故事同样精彩。 2023年7月1…

ylb-接口5产品详情

总览&#xff1a; 1、service处理&#xff08;根据产品id &#xff0c;查询产品信息&#xff09; 在api模块下service包&#xff0c;ProductService接口添加新方法&#xff08;根据产品id &#xff0c;查询产品信息queryById(Integer id)&#xff09;&#xff1a; package …

java后端解决跨域问题(过滤器或者注解)

1。允许整个项目跨域访问&#xff0c;可通过filter来进行过虑,在文件夹下创建一个名叫&#xff1a; web过滤器的java类&#xff1a; 文件位置及文件名&#xff1a;\src\main\java\pm.lms\WebConfig\SimpleCORSFilter.java 注意这两个文件可以放在src\main\java下的任意一个子文…

Python venv 和 virtualenv 虚拟环境的基本使用

1.前言 venv 和 virtualenv 都是搭建虚拟环境的工具&#xff0c;virtualenv 是第三方开源的&#xff0c;而 venv 作为 virtualenv 的一个子集自 Python3.3 开始集成到标准库中&#xff0c;在 virtualenv 的文档中可以看到他们的区别&#xff1a; 没有 app-data 种子方法&#…

Python爬虫——urllib_post请求百度翻译

post请求&#xff1a; post的请求参数&#xff0c;是不会拼接在url后面的&#xff0c;而是需要放在请求对象定制的参数中 post请求的参数需要进行两次编码&#xff0c;第一次urlencode&#xff1a;对字典参数进行Unicode编码转成字符串&#xff0c;第二次encode&#xff1a;将字…