LVS (Linux虚拟服务器)模型及算法
LVS(Linux Virtual Server)Linux虚拟服务器
LVS集群采用IP负载均衡技术和基于内容请求分发技术。
用户请求发给负载均衡调度器,由负载均衡调度器根据设定的调度算法将请求发给真实服务器。对用户而言,集群是透明的。
LVS集群采用三层结构,其主要组成部分为:
1、负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
2、服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
3、共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
模型
1. Virtual Server via Network Address Translation(VS/NAT)
将用户请求报文的目的地址改写为由调度器根据调度算法计算得出的服务器ip。服务器响应报文同理在调度器将网络地址转换。缺点是所有报文都需要经过调度器,对调度器的压力较大。

2. Virtual Server via IP Tunneling(VS/TUN)
将用户请求报文进行封装并添加新的ip头,目的地址为由调度器根据调度算法计算得出的服务器ip。服务器响应直接返回给客户端,无需经过调度器。解决了NAT对调度器的压力。

3. Virtual Server via Direct Routing(VS/DR)
将用户请求的mac地址改写为真实服务器mac地址,直接通过mac寻址将请求转发到真实服务器。服务器将响应直接发给客户端。这种模型需要调度器和服务器在同一局域网,且服务器需要配置lo ip为vip,并且设置non-arp模式。前者为了服务器能够收到处理这个请求,后者是为了避免arp请求mac出错。这个模式优于上面两种,个人认为DR模式只对mac进行处理,上面均需要对网络层数据进行一定操作,开销上mac应该较少。

4. fullnat
与nat对比,fullnat 对目的ip、源ip都进行了地址转换(dnat,snat)。缺点是改变了源ip,获取不到客户端的真实信息。
调度算法
1 轮叫(Round Robin)简称RR
均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
2 加权轮叫(Weighted Round Robin) 简称WRR
处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
3 最少链接(Least Connections)简称LC
调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。
4 加权最少链接(Weighted Least Connections)简称WLC
具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。最少链接的扩展,加上权值的最少链接。
5 基于局部性的最少链接(Locality-Based Least Connections)简称LBLC
主要用于Cache集群系统。该算法找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务器,将请求发送到该服务器。
6 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)简称LBLCR
它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按"最小连接"原则从服务器组中选出一台服务器。
7 目标地址散列调度(Destination Hashing)简称DH
一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。
8 源地址散列调度(Source Hashing)简称SH
算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器。
9 最短的期望的延迟(shortest expected delay scheduling)简称sed
基于wlc算法
10 最少队列调度(never queue scheduling)简称nq
无需列队,如果有台realserver的连接数=0 就直接分配,不需要进行sed运算。
小结
问题
- 需要多次连接,缓存,数据保存在不同服务器上。
- TUN模式需要设置lo IP?怎么实现拆包后被自己处理而不是丢弃。
NAT 调度器如何知道服务器返回报文要发给哪个具体客户端。当请求数大于服务器数,如何判断。 (nat网络地址转换只将目标IP和端口修改为真实服务器IP端口,对源没有修改。)
- nat模型,是否可以直接在真实服务器中将响应报文修改为VIP?(直接使用隧道模型即可。若在服务器修改,增加服务器开销,只需使用隧道模型即可)
- 如何保证真实服务器可用
- 如何确定真实服务器的负载
- DR模式跨地区如何扩展(DNS + DR)
- ds对应多个网段
RS健康检测
keepalived
其他
QPS比Nginx提升60%,阿里Tengine负载均衡算法揭秘
参考链接
LB 简单比较 – F5、NetScaler、LVS、Nginx、Haproxy
https://www.cnblogs.com/gaoxu387/p/7941381.html
https://blog.csdn.net/libaineu2004/article/details/79062529
https://blog.csdn.net/sr_1114/article/details/80256626
https://blog.csdn.net/weixin_40470303/article/details/80541639
https://www.cnblogs.com/pigdragon/p/6564442.html
https://blog.csdn.net/weixin_33704234/article/details/86332145
https://www.xuebuyuan.com/3214658.html
https://www.cnblogs.com/Csir/p/6754077.html
https://blog.csdn.net/qq_41772936/article/details/80146464
https://www.cnblogs.com/yaboya/p/9109745.html
PPT




























LVS (Linux虚拟服务器)模型及算法的更多相关文章
- LVS (Linux虚拟服务器)-不同的负载均衡方法
随着Internet用户的增长,基于Web的公司处理的通信量急剧增加.有各种解决方案来应对这种不断增长的流量. 一种解决方案是垂直扩展服务器(即:简单地向服务器添加更多的CPU和内存资源.)当然在一定 ...
- Linux虚拟服务器--LVS
LVS 百科名片 LVS是一个开源的软件,由毕业于国防科技大学的章文嵩博士于1998年5月创立,可以实现LINUX平台下的简单负载均衡.LVS是Linux Virtual Server的缩写,意思是L ...
- Go 语言开发的基于 Linux 虚拟服务器的负载平衡平台 Seesaw
负载均衡系统 Seesaw Seesaw是由我们网络可靠性工程师用 Go 语言开发的基于 Linux 虚拟服务器的负载平衡平台,就像所有好的项目一样,这个项目也是为了解决实际问题而产生的. Seesa ...
- 大数据 - hadoop三台linux虚拟服务器 - 初始化部署
搭建hadoop环境 1.解压Hadoop的安装包,解压到modules文件夹中.(安装包下载地址:http://archive.apache.org/dist/hadoop/core/hadoop- ...
- 搭建Linux虚拟服务器
1.搭建Linux虚拟机环境安装VMware Workstation 14下载地址:https://www.cr173.com/soft/68480.html密钥:FF31K-AHZD1-H8ETZ- ...
- LVS (Linux Virtual Server) 负载均衡
[大型网站技术实践]初级篇:借助LVS+Keepalived实现负载均衡 一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服 ...
- LVS : Linux Virtual Server 负载均衡,集群,高并发,robust
1 LVS : Linux Virtual Server http://www.linuxvirtualserver.org/ http://www.linuxvirtualserver.org/zh ...
- LVS(Linux Virtual Server)
LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器.它是我国的章文嵩博士的一个开源项目.在linux内存2.6中,它已经成为内核的一部分,在此之前的内核版本则需 ...
- [Linux] LVS虚拟服务器四层负载均衡
随着互联网的爆炸性增长及其在我们生活中日益重要的作用,互联网上的流量急剧增加,并且每年以超过100%的速度增长.服务器上的工作负载正在迅速增加,因此服务器很容易在短时间内过载,尤其是对于流行的网站.为 ...
随机推荐
- maven warnning 'build.plugins.plugin.version' is missing
裝完maven后,package或clean时出错:[WARN] [WARN] Some problems were encountered while building the effective ...
- springboot启动时控制台不显示映射的URL
背景 今天,第一次使用 2.2.0 版本的springboot,在访问接口时发现访问不到,于是在控制台进行 URL 搜索,发现并相关没有内容 原因 springboot版本差异,切换回 2.0.5.R ...
- 8.5 NOIP模拟测试13 矩阵游戏+跳房子+优美序列
T1矩阵游戏 数学题.首先这一列这一行先乘还是后乘对最后答案没有影响.a[i][j]表示矩阵中原始的值,h[i]表示i行的累乘,l[i]表示i列的累乘.易得ans=Σa[i][j]*h[i]*l[i] ...
- Windows的一些使用技巧/设置
仅为个人记录,关闭与否还请读者斟酌 1,加速关机速度 运行gpedit.msc: 计算机管理,管理模块 - 系统 -关机选项 关闭会阻止或取消关机的应用程序的自动终止功能. 2,组策略关闭小娜后,只把 ...
- windows远程复制中断无法复制
关掉对应的rdpclip进程,再创建一个
- 禁用Chrome的“请停用以开发者模式运行的扩展程序”提示
1.前言 每次启动都会有一个烦人的“请停用以开发者模式运行的扩展程序”提示,这个提示有多烦人,接触过的人都知道,启动的时候它不立即提示,等过了几秒钟等你打开某个网页开始执行某些操作时它突然弹出来干扰你 ...
- 调用其他python脚本文件里面的类和方法
问题描述: 自己编写了若干个Python脚本. 在testC.py里面需要调用testA.py和testB.py里面的若干类和方法.要怎么办? 需要都打包.安装,再去调用吗? 其实不必那么麻烦. 这里 ...
- PostMan测试REST接口时候,如何绕过登录的验证
原文地址:https://blog.csdn.net/qq_34178998/article/details/80361315 之前测试的时候,需要页面进行登录之后,才能让访问后台程序,但是在进行接口 ...
- java基础之----cookie,session,jwt
概要 web中为什么要引入cookie.session机制,为了验证用户的身份,验证用户的身份是为了系统的安全,那如果是系统和系统之间的API调用怎么办呢?因为系统之间调用往往是没有用户系统的(用户系 ...
- linux录制终端信息并回放
我们通常会录制桌面环境视频来作为教程使用,但是视频需要大量的存储空间,而终端脚本文件仅仅是一个文本文件,其文件大小不过是KB级别 1, 开始录制终端会话 [root@VM_0_15_centos ~] ...