LVS集群之工作原理和调度算法(2)
LVS的工作机制
LVS里Director本身不响应请求,只是接受转发请求到后方,Realservers才是后台真正响应请求。
LVS 工作原理基本类似DNAT,又不完全相像,它是一种四层交换,默认情况下通过用户请求的地址和端口来判断用户的请求,从而转发到后台真正提供服务的主机,而判断这种请求的是通过套接字来实现,所以四层就可以实现。
而且这个转发的过程对用户而言是透明的(简单的讲,就是用户访问DR的IP,而DR转发给RSS,而用户不知道这个过程)
LVS的工作模式:
1.DNAT
2.直接路由(DR)
3.隧道(tunnel)
2、提供的优点:
1.高并发
2.高冗余
3.适用性,扩展服务器,缩减服务器,方便服务器扩展和收缩
LVS 的IP地址类型
1.VIP:虚拟IP地址,并不提供服务,而是将用户的请求转发到后方(冗余网关的IP)
2 RIP:真正IP地址,客户端真正提供服务的IP地址(后端真实机的IP)
3.DIP:调度IP地址,通常是和RIP相连的LVS的IP地址(进行调度服务的IP)
4.CIP:客户端IP地址,用户请求时,用户的IP(客户端IP)
流程:如下图
LVS集群的类型:
1.LVS-NAT DNAT
2.LVS-DR 直接路由
3.LVS-TUN 隧道
下面我们详细说明这三种类型:
LVS-NAT模型原理
用户的请求和响应都需要经过Director
源地址,目标地址都需要经过转换,而目标地址转换是透明的
这种架构的扩展有限调度器,Director将处理所有的请求,压力比较大,扩展到10个结点就不行了
要求:
1.集群节点必须在同一个物理网络中,同一个子网或者VLAN
2.DIP和RIP只能在同一个网络(子网)中,不能跨越网段,跨网段的话 ,中间会断开,不能中继
3.RIP地址通常是私有地址,
4.所有的RIP,必须以DIP为网关(地址转换),
5.NAT的地址可以做端口转换(比如80--8080)
6.任何操作系统都可以做RIP,只要后端有服务
7.Director有可能成为整个系统的瓶颈
数据传输:
客户端访问VIP的服务(CIP->VIP),VIP根据调度算法把数据转发给一台后端RSS,进行数据包重写(IP头改为:VIP->RIP,MAC帧改为:Mvip->Mrip),RIP收到数据包后,进行解包,发现是给自己的,然后就根据收到的数据包中的内容进行回复,回复给VIP,同样进行数据包重写,给VIP后直接回复给CIP。
LVS-DR模型原理
用户的请求必须经过Director,而realserver在响应的使用直接返回请求(图有问题,有可能设的网关不同,还存在一台路由器)
需要配置iptables规则,拒绝响应MAC地址转换,或者通过修改LINUX内核响应
优点:由于它比NAT少了一个地址转换,响应速度更快
特点
1.必须处于同一个物理网络中(连在同一个交换机上)
2.RIP可以使用公网地址(建议使用)
3.Director只转发请求,而realserver直接响应请求
4.集群节点的网关,不能指向DIP
5.不能做端口转换(不支持)
6.绝大多数的操作系统都可以实现realserver,而realserver需要同一个网卡配置多个Ip地址
7.DR模式的Director比NAT模式能够带动更多的节点
数据传输:
解决数据进入:
为了避免RS直接响应,给服务器的lo:0设置VIP地址,给本地网卡设置成CIP,这样RS就不会直接响应了,隐藏了RS
解决数据出去:
而默认情况下,Linux设置数据包从哪块网卡出去,源地址设为该网卡地址,通过添加一条特殊路由信息,如果目标地址是lo的VIP地址,那么出去的时候源地址设置为lo的地址。
路由信息的原理:
添加一条主机路由,将VIP的地址自己设置成一个网段,既子网掩码为255.255.255.255,这样VIP出去的时候没有比VIP更优的了,就成为最佳IP
在互联网上性能最佳的就是DR应用,但是有一个缺点,必须要求主机间距离比较近(比如一个机房),如果发生天灾人祸,集群就完了,所以我们为了实现异地分布,要采用隧道比如VPN
LVS-TUN模型原理:
虚拟隧道实现:
1.专线(加密)
2.二层:在MAC之外再加一层MAC
3.三层:源IP目标IP之外再加一层IP
隧道目的: 隐藏意图,通过转换来(ip套ip)隐藏目的
特征:
1.集群节点和Director不必在同一个网络,也可以位于不同网段。
2.RIP必须使用公网地址
3.Director只需要处理进来的请求,不需要处理出去的请求
4.响应的请求一定不能经过Direcor.
5.只能使用那些支持IP 隧道协议的操作系统做realserver
优点:LVS-TUN可以实现基于网络的集群,这样就脱离了LVS-DR和realserver之间的距离限制。
调度算法
LVS的负载均衡要依赖算法(Scheduling methods :调度方法)来实现,根据特点它们分为如下两类:
1.fiexd scheduling 静态(固定)
2.dnamic scheduling 动态
FIEXD SCHEDULING静态算法
特点:不考虑后端realserver的连接状态,而动态的要考虑后端的链接数为标准
1. Round-robin (RR) 轮询
既第一次访问A,第二次访问B,第三次再访问A…..循环下去
2. Weighted Round-Robin WRR
加强论调:提高后台服务器的响应能力
根据后方服务器的响应能力,来定义权重,根据权重来转发请求,权重大的优先访问
3.Destination hashing DH
目的:实现针对目标地址的请求做固定转发,基于目标
将来自同一个用户的特定请求转发到固定的指定的主机(比如提供web服务),以提高缓存(网页文件缓存)利用率(命中率)。
4.Souce hashing SH
目的:将来自同一个用户的地址,始终转发到router或者firewall,基于源
应用场景:
将用户的请求按照平均指定到不同的防火墙,实现平均内网负载,通过特定防火墙(网关)出去(上网)
静态算法的缺陷:不考虑后台real-server的负载,连接状态
动态算法:Dynamic Scheduling Mehtod
这里有两个概念:
活动连接:后台real-server当前处于活动状态(active)和ESTABLISHED state(想关联)的连接,像ssh,或者telnet会一直处于活动状态。
非活动连接:非活动的状态(inactive)或者非FIN的数据包,比如httpd(未开启keepalive), 而httpd除非启用keepalive, 发送完成后直接断开,处于inactive的状态
相关动态算法 :
1. LC least-connection 最少连接
LC同时检查一台主机上的活动连接数和非活动连接数,连接数最少(活动状态的连接数少)的将会接受下一个连接请求。
LC同时考察活动连接和非活动连接,它用活动连接*256+非活动连接作为 overhead 通过overhead谁的小,转发给谁
但是非活动链接也会影响连接,当活动连接的比数比较大的时候,会影响结果
2.WLC Weighted Least-Connection 加权最少连接数
加权按照机器的性能划分。Overhead/加权请求要转发给小得那个
加权算法,是集群应用上的最好的算法之一,比较公平
2. SED Shortest Expected Delay 最短延迟
在WLC基础上改进
Overhead = (ACTIVE+1)*256/加权
不再考虑非活动状态,把当前处于活动状态的数目+1来实现,数目最小的,接受下次请求
+1的目的是为了考虑加权的时候,非活动连接过多
缺陷:当权限过大的时候,会导致空闲服务器一直处于无连接状态
3.NQ算法永不排队
保证不会有一个主机很空闲。在SED基础上无论+几,第二次一定给下一个,保证不会有一个主机不会很空闲
不考虑非活动连接,才用NQ,SED要考虑活动状态连接
对于DNS的UDP不需要考虑非活动连接,而httpd的处于保持状态的服务就需要考虑非活动连接给服务器的压力
4.LBLC 基于本地的最少连接算法
和DH的区别:考虑后台的负载能力和连接情况
支持权重,它在WLC基础上改进
5.LBLCR 基于本地的带复制的最少连接数
是对LBLC的一个改进,能够在LBLC的基础上实现负载均衡
判断后端,到底谁的连接少,当A的连接很多,而B的很空闲,会将A的部分连接分配到B上(打破原有规则,避免大范围的不公平)
LVS集群之工作原理和调度算法(2)的更多相关文章
- [Elasticsearch] 集群的工作原理 - 第一部分
本文翻译自Elasticsearch官方指南的life inside a cluster一章. ES就是为高可用和可扩展而生的. 扩展能够通过购置性能更强的server(垂直扩展或者向上扩展,Vert ...
- LVS集群体系和调度算法
集群体系和调度算法 LVS集群体系架构 1)使用LVS架设的服务器集群系统有三个部分组成: 最前端的负载均衡层,用Load Balancer表示, 中间的服务器群组层,用Server Array表示, ...
- 负载均衡之LVS集群
h3 { color: rgb(255, 255, 255); background-color: rgb(30,144,255); padding: 3px; margin: 10px 0px } ...
- LVS集群之NAT模式实现
LVS集群之NAT模式实现 一.集群的种类 集群系统主要分为 1.HA:高可用集群,又叫双机热备. (a)原理 2台机器A,B,正常是A提供服务,B待命闲置,当A宕机或服务宕掉,会切换至 ...
- LVS集群简介及使用
什么是集群 一组通过高速网络互联的计算组,并以单一系统的模式加以管理 将很多服务器集中在一起,提供一种服务,在客户端看来就象是只有一个服务器 可以在付出较低成本的情况下获得在性能,可靠性,灵活性方面的 ...
- 转载-lvs官方文档-LVS集群中的IP负载均衡技术
章文嵩(wensong@linux-vs.org) 2002 年 4 月 本文在分析服务器集群实现虚拟网络服务的相关技术上,详细描述了LVS集群中实现的三种IP负载均衡技术(VS/NAT.VS/TUN ...
- LVS集群的负载调度
LVS集群的负载调度 章文嵩 (wensong@linux-vs.org) 转自LVS官方资料 2002 年 5 月 本文主要讲述了LVS集群的IP负载均衡软件IPVS在内核中实现的各种连接调度算法. ...
- LVS集群中的IP负载均衡技术
LVS集群中的IP负载均衡技术 章文嵩 (wensong@linux-vs.org) 转自LVS官方参考资料 2002 年 4 月 本文在分析服务器集群实现虚拟网络服务的相关技术上,详细描述了LVS集 ...
- LVS集群
集群: 将许多小的,性能较低的服务器做成一个大的性能高的超级服务器 集群分为负载均衡集群,高可用集群,高性能运算集群 LVS体系结构与工作原理描述 LVS集群负载均衡器接受服务的所有入站客户端计算机请 ...
随机推荐
- TextMesh Pro 超链接解析失败
前言 软件环境 Unity3D 5.3.7p4 TextMesh Pro 1.0.555.0b11(Jul 06.2017) UGUI做为UI解决方案 文档资料 TextMesh Pro的资料,可以参 ...
- Java加密与解密笔记(三) 非对称加密
非对称的特点是加密和解密时使用的是不同的钥匙.密钥分为公钥和私钥,用公钥加密的数据只能用私钥进行解密,反之亦然. 另外,密钥还可以用于数字签名.数字签名跟上文说的消息摘要是一个道理,通过一定方法对数据 ...
- python中对象、类型和元类之间的关系
在python中对象.类型和元类构成了一个微妙的世界. 他们有在这个世界里和平共处,相辅相成.它们遵循着几条亘古不变的定律: 1.python中无处不对象 2.所有对象都有三种特性:id.类型.值 3 ...
- Intellij 如何在新窗口中打开项目
好多程序员都使用intelliJ idea开发项目,由于不小心设置了不在提示打开项目项目方式,所以只能打开一个窗口,而且只能同时打开一个项目,特别郁闷,分享下设置后的效果 工具/原料 Intell ...
- Laravel学习笔记(一)
根据国外的调查,Laravel是最流行的框架,最近公司需要PHP的开发人员,但是一直招不到人,只好亲自上阵研究一下.由于以前对PHP只是大致了解,这次学习开始的时候也挺挠头的,到今天稍微入了 ...
- webpack 3.X学习之多页面打包
简介 我们开发不可能只写一个页面,每次都要写很多页面,这时为了开发效率,我们使用前端自动化工具webpack,那么webpack是如何打包页面的呢?又是如何打包多页面的呢? 单页面打包 我们知道要打包 ...
- 通过C#来开启、关闭、重启Windows服务
通过C#开启服务需要这个C#程序有相应权限,比如服务的账户是Local System的就必须以管理员权限运行C#程序才能开启或关闭. 这里只写重启的方式(就是先关闭,后开启): // Security ...
- Android Weekly Notes Issue #288
Android Weekly Issue #288 December 17th, 2017 Android Weekly Issue #288 本期内容主要包括介绍Kotlin DSL使用kotlin ...
- IDA分析脱壳后丢失导入表的PE
1. 问题 一些程序经过脱壳后(如用OD的dump插件),一些导入表信息丢失了,导致拖入IDA后看不到API的信息(如右图所示,第一个红圈处实际是GetCurrentProcessId),给分析造成极 ...
- js功能代码大全
1.日期格式化 //化为2017-08-14 function formatDate (date) { var y = date.getFullYear(); var m = date.getMont ...