3、lvs调度方法详解

3、lvs调度⽅法详解
3、lvs类型和调度⽅法详解
集:将多台主机组织起来满⾜某⼀特定需求;
集类型:
LB:Load Balancing, 负载均衡集;
负载均衡器,调度器;
上游服务器(upstream server),后端服务器,"真"服务器(real server);
SPOF:Single Point Of Failure
HA:High Avalilability, ⾼可⽤集;
Active:活动服务器
Passive:备⽤服务器
⽀持基于TCP,UDP,SCTP,AH,EST,AH_EST等协议的众多服务;
负载均衡集中设计时的要点:
甲烷制氢(1) session保持;
session sticky绑定:缺点是如果绑定的real server宕机,则session就不存在了。
(source ip hash):ip级别将来⾃于同⼀个⽤户的请求不做负载均衡,始终调度到同⼀个real server上;
如何追踪这个⽤户?⾃⾏维护⼀个会话追踪表,根据IP地址可以追踪每⼀个请求的客户端,任何⼀个客户端请求来,在⼀个会话追踪模板中有哪个IP被分给哪个real server的记录,并会给这个IP⼀个倒计时的计时器,在倒计时器倒计时完之前,如果同⼀个IP地址请求,都可以把这个IP地址发往同⼀个
real server。这种机制就叫源地址哈希即source ip hash
(cookie ip hash):进程级别,不管IP是什么,任何⼀个会话来的时候就发⼀个cookie,是每次客户端请求时就利⽤cookie,
session cluster集 (multicast/broadcast/unicast);每⼀个real server都会把⾃⼰的session同步给另⼀个主机⼀份
session持久化:如果⼀组集全部宕机或者断电,依然可以保证session可⽤,这需要session服务器
session server服务器();把所有session都存在session服务器上
(2) 数据共享;
共享存储;
NAS:Network Attached Storage (⽂件级别);
SAN:Storage Area Network (块级别);
声音检测电路DS:Distributed Storage;
数据同步:
WIFI智能连接rsync
...
四层(lvs,内核空间)、七层(haproxy, nginx, ⽤户空间,占⽤套接字⽂件)
Director/RealServer
Client Request --> Director (schdulder)--> RS#
LVS-TYPE:
lvs-nat: MASQUERADE    RIP与DIP必须在同⼀⽹段
修改⽬标IP(可选:⽬标端⼝)实现转发;请求和响应报⽂都要经由director转发
lvs-dr:GATEWAY  director与RS必须在同⼀物理⽹络
修改MAC地址实现转发;请求报⽂经由director;
lvs-tun:IPIP    不修改请求报⽂的ip⾸部,⽽是通过在原有的IP⾸部这外再次封装⼀个IP⾸部(源IP为DIP,⽬标IP为RIP)
在原有的IP报⽂之外再次封装⼀个IP⾸部;请求报⽂经由director;
lvs-fullnat:
lvs scheduler:仅根据IP和端⼝进⾏调度
静态⽅法:仅根据算法本⾝进⾏调度,不考虑当前服务器实际负载情况;保证起点公平
RR:round robin, 轮调,轮询,轮叫:
调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集中的真实服务器上,它均等地对待每⼀台服务器,⽽不管服务器上实际的连接数和系统负载。
WRR:weighted rr, 加权轮询;
调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能⼒来调度访问请求。这样可以保证处理能⼒强的服务器处理更多的访问流量。调度器可以⾃动问询真实服务器的负载情况,并动态地调整其权值。
SH:source ip hash, 源地址哈希;将来⾃于同⼀个IP的请求始终调度⾄同⼀个RS。
智能控制方法(因为IP-VS在本地会维护⼀个哈希表,这张表把每⼀个请求的源地址K被调度到哪⼀个real server V,都会记录下来。表中的每个K-V 有可能还会有⼀个计时器,SH      实现session保持的机制,会损害负载均衡的效果,因为它会将来⾃同⼀个地址的请求将始终被调度⾄同⼀个real server)
源地址散列"调度算法根据请求的源IP地址,作为散列键(HashKey)从静态分配的散列表出对应的服务器,若该服务器是可⽤的且未超载,将请求发送到该服务器,否则返回空。
DH:desination ip hash, ⽬标地址哈希;对同⼀个⽬标的请求始终发往同⼀个RS
根据请求的⽬标IP地址,作为散列键(HashKey)从静态分配的散列表出对应的服务器,若该服务器是可⽤的且未超载,将请求发送到该服务器,否则返回空。
正向web代理,负载均衡内⽹⽤户对互联⽹的请求;
Client --> Director --> Web Cache Server(正向代理)
公司有两台公⽹出⼝(防⽕墙主机),内⽹的所有客户端都需要通过这两个接⼝出去访问外⽹,为了避免⼀台防⽕墙主机挤满了IP⽽另⼀台却很少有IP通过。那么就就对两台防⽕墙主机做负载均衡,在内⽹客户端和防⽕墙主机之间加⼀台调度器。随之带来的问题是:因为防⽕墙有链接追踪的功能,因此⼀个客户端的请求假如经过负载均衡后,通过第⼀个防⽕墙分发出去,那么就期望这个内⽹的请求依然通过同⼀个防⽕墙把数据报⽂返回进来,不然就⽆法实现链接追踪的功能,那么如何保证⼀个请求通过某⼀个防⽕墙出去,⼜经过同⼀个防⽕墙进来?这就需要在防⽕墙主机与外⽹之间再加⼀台调度器了,从不同防⽕墙出来的请求都经过调度器统⼀分发到外⽹中去,那么外⽹的响应报⽂就需要经过
调度器,调度器此时就做地址绑定,因此请求报⽂的路线:内⽹报⽂-->内⽹调度器-->防⽕墙主机-->外⽹调度器,返回报⽂的路线:外⽹报⽂-->外⽹调度器-->防⽕墙主机-->内⽹调度器-->内⽹主机,这个过程中,外⽹调度器就会与防⽕墙主机进⾏地址绑定,由哪个防⽕墙出来的求情,返回报⽂就从哪个防⽕墙进去。
同⼀个防⽕墙出去的请求依然通过同⼀个防⽕墙进来,这就可以实现会话追踪机制的实现,⽐如访问百度,那么内⽹的所有主机访问百度时
都通过同⼀个防⽕墙访问外⽹,也通过此防⽕墙主机返回报⽂。防⽕墙是代为内⽹主机请求
动态⽅法:根据算法及各RS当前的负载状态进⾏评估;保证结果公平
挑选后端real server是有挑选⽅式是有计算机制的,⾸先要把各real server的当前负载情况记录下来,
计算当前主机的负载⽅式: Overhead=
RS权重为0时,表⽰RS不可⽤
把所有权重加起来,权重之和是整体权重基数,每个服务器的权重⽐上这个权重之和,得到的⽐例⼤概就是调度这个服务器与整个集所接受的所有所有请求的⽐例。
LC:最少链接(Least Connections)
 调度器通过"最少连接"调度算法动态地将⽹络请求调度到已建⽴的链接数最少的服务器上。如果集系统的真实服务器具有相近的系统性能,采⽤"最⼩连接"调度算法可以较好地均衡负载。
Overhead=Active*256+Inactive      活动连接数*256+⾮活动链接数
Active:每⼀个服务器当前主机活动链接的数量;
Inactive:⾮活动连接数量
256:相⽐较于⾮活动(Inactive)链接的数量,活动链接将会占据更多的资源,所以权重⽐较⼤
RS1: 10, 100
RS2: 20, 10
WLC: weighted LC  加权最少连接(默认采⽤的就是这种)(Weighted Least Connections)
在集系统中的服务器性能差异较⼤的情况下,调度器采⽤"加权最少链接"调度算法优化负载均衡性能,具有较⾼权值的服务器将承受较⼤⽐例的活动连接负载。调度器可以⾃动问询真实服务器的负载情况,并动态地调整其权值。
Overhead=(Active*256+Inactive)/weight
RS1: 10, 100, 1
RS2: 20, 10, 3
缺陷是:当前10个主机,都没有响应报⽂,假如能⼒最⼩的排最前⾯,来了⼀个请求,那么只能第⼀个主机响应,所以响应的最慢,⽽后⾯响应快的主机却在空闲。
SED:Shortest Expection Delay  最短延迟调度/最短期望延迟
在WLC基础上改进,Overhead=(ACTIVE+1)*256/weight,不再考虑⾮活动状态,把当前处于活动状态的数⽬+1来实现,数⽬最⼩的,接受下次请求,+1的⽬的是为了考虑加权的时候,⾮活动连接过多缺陷:当权限过⼤的时候,会导致空闲服务器⼀直处于⽆连接状态。
Overhead=(Active+1)*256/weight
刚开始每台主机的活动链接数都为0,利⽤SED调度算法后,这⾥先不乘以256,因为不考虑⾮活动链接,就没有必要考虑⾮活动连接数第⼀台主机的Overhead=(0+1)/1=1
第⼆台主机的Overhead=(0+1)/2=1/2
第三台主机的Overhead=(0+1)/3=1/3
第四台主机的Overhead=(0+1)/4=1/4
第五台主机的Overhead=(0+1)/5=1/5
按照上述计算后,第五台链接数最少,权重最⼤,所以直接挑选第五台响应请求,这就最⼤限度利⽤了资源
缺点:总共两台服务器,第⼀台权重为1,第⼆台权重为4,那么前三个请求会全部分给第⼆台
RS1: 0, 1
RS2: 0, 9
NQ: Nerver Queue永不排队
SED算法的改进;(⾸先挑选⼀个主机分配⼀个请求,然后挑选下⼀个主机分配请求,直到把所有主机轮询⼀遍之后,再根据SED算法进⾏分配)
⽆需队列。如果有台realserver的连接数=0就直接分配过去,不需要再进⾏sed运算,保证不会有⼀个主机很空闲。在SED基础上⽆论+⼏,第⼆次⼀定给下⼀个,保证不会有⼀个主机很空闲,不考虑⾮活动连接,才⽤NQ,SED要考虑活动状态连接,对于DNS的UDP 不需要考虑⾮活动连接,⽽httpd的处于保持状态的服务就需要考虑⾮活动连接给服务器的压⼒。
LBLC:Locality-Based LC 基于局部/本地的最少链接(locality-Based Least Connections)
即为动态的DH算法;⽤到场景:只有在实现正向代理,代理本地⼤量客户端访问互联⽹时,⽤到缓存时才有⽤
正向代理情形下的cache server调度
Client --> Director --> Web Cache Server(正向代理)
基于局部性/本地的"最少链接调度算法"是针对⽬标IP地址的负载均衡,⽬前主要⽤于Cache集系统。该算法根据请求的⽬标IP地址出该⽬标IP地址最近使⽤的服务器,若该服务器是可⽤的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于⼀半的⼯作负载,则⽤"最少链接"的原则选出⼀个可⽤的服务器,将请求发送到该服务器。
LBLCR:LBLC with Replication,带复制功能的LBLC;带复制的基于局部性最少连接(Locality-Based Least-Connections with Replication)
带复制的基于局部性"最少链接"调度算法也是针对⽬标IP地址的负载均衡,⽬前主要⽤于Cache集系统。它与LBLC算法的不同之处是它要维护从⼀个⽬标IP地址到⼀组服务器的映射,⽽LBLC算法维护从⼀个⽬标IP地址到⼀台服务器的映射。该算法根据请求的⽬标IP地址出该⽬标IP地址对应的服务器组,
按"最⼩连接"原则从服务器组中选出⼀台服务器,若服务器没有超载,将请求发送到该服务器;
若服务器超载,则按"最⼩连接"原则从这个集中选出⼀台服务器,将该服务器加⼊到服务器组中,将请求发送到该服务器。同时,当该服务器组有⼀段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
ipvs的集服务:
四层交换(四层路由)
tcp, udp, sctp, ah, esp, ah_esp
(1) ⼀个ipvs主机可以同时定义多个cluster service(根据tcp或udp的端⼝进⾏定义的);
(2) ⼀个ipvs集服务⾄少应该⼀个RS;(定义时指明lvs-type,以及lvs scheduler调度⽅法)
ipvsadm的⽤法:(定义哪个协议的哪个端⼝是集服务,在相应的集服务中添加哪些RS,服务和RS都可以增删查改)管理集服务(规则默认是保存在内核中的)
ipvsadm -A|E -t|u|f service-address [-s scheduler] 对集服务增加或修改的
ipvsadm -D -t|u|f service-address  删除操作
-A:添加
-E:修改
-D:删除
木醋液service-address:
tcp:-t ip:port
udp:-u ip:port
fwm:-f MARK 防⽕墙标记:报⽂经由netfilter经由防⽕墙后,给报⽂加⼀个标记
-s scheduler:默认为wlc;
管理集服务中的RS
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower] 增(-a)和改(-e)操作
假牙生产-a:添加⼀个RS
-e:修改⼀个RS
-d:删除⼀个RS
server-address:指RS的地址
ip[:port] 有些⽀持端⼝映射,如果有端⼝映射则要给出端⼝号
lvs-type:
-g:gateway,dr模型(默认)
-i: IPIP,tun模型
-m: masquerade,nat模型
ipvsadm -d -t|u|f service-address -r server-address 删除操作查看和清理(集服务和RS都可以使⽤,且功能效果是⼀样的) ipvsadm -C 清空服务和集服务中的RS中的规则
ipvsadm -L|l [options]  查询操作
-n:numeric,数字格式显⽰地址和端⼝;
-c:connection,显⽰ipvs连接;
--stats:统计数据;
--rate:速率
--exact:显⽰精确值
保存和重载
ipvsadm -R  重载
ipvsadm  -R < /PATH/FROM/SOME_RULE_FILE
ipvsadm-restore < /PATH/FROM/SOME_RULE_FILE ipvsadm -S [-n] 保存
ipvsadm -S  > /PATH/TO/SOME_RULE_FILE
ipvsadm-save  > /PATH/TO/SOME_RULE_FILE
置零计数器
ipvsadm -Z [-t|u|f service-address]

本文发布于:2024-09-21 22:22:03,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/99132.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:服务器   请求   调度   集群   负载
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议