系统运维
lvs的四种模型和十种调度算法
lvs简介
lvs:linux virtual server,负载调度器,内核集成,章文嵩(花名 正明)
lvs的工作原理
vs根据请求报文的目标ip和目标协议及端口将其调度转发至某rs,根据调度算法来挑选rs
lvs集群类型的专业术语
vs:virtual server 虚拟的服务器
rs:real server(lvs) 真正提供服务的服务器
cip:client ip 客户端的ip
vip: virtual serve ip lvs服务器针对互联网的客户端设置的ip,是虚拟ip
dip: director ip 局域网内lvs服务器设置的ip
rip: real server ip 真实服务器的ip
lvs服务器,客户端访问流程图
lvs-nat模式
本质是多目标ip的dnat,通过将请求报文中的目标地址和目标端口修改为某挑出的rs的rip和port实现转发
(1)rip和dip应在同一个ip网络,且应使用私网地址;rs的网关要指向dip
(2)请求报文和响应报文都必须经由director转发,director易于成为系统瓶颈
(3)支持端口映射,可修改请求报文的目标port
(4)vs必须是linux系统,rs可以是任意os系统
lvs-nat的实现逻辑
如上图所示,客户端通过路由去访问lvs对外开放的vip,当lvs收到请求报文时,会将其拦截下来,通过自身的dip将请求报文传给其中的一台rs服务器(dip和rip需要在同一个局域网,同一个网段)。rs服务器收到请求报文后,发送响应报文通过lvs服务器发送给客户端(相当于怎么来的就怎么回去)。在用户访问的过程中,lvs服务器实际上是对vip进行了地址转换,转换成了正式服务器的ip,从而实现互相通讯。
nat模式ip包调度过程
nat模式内部的工作原理图
lvs服务器之所以能实现将发送给自己的数据包转交给其他主机,是因为lvs是潜伏在钩子函数input这里,一旦发现有用户访问的数据包通过prerouting后发送给input,lvs会将其截获下来,改变目标地址为真实服务器的地址,转而发给postrouting,从而发送给真实服务器,实现调度转发的功能。
lvs-nat模式的优缺点
1、nat技术将请求的报文和响应的报文都需要通过lvs进行地址改写,因此网站访问量比较大的时候lvs负载均衡调度器有比较大的瓶颈,一般要求最多之能10-20台节点
2、只需要在lvs上配置一个公网ip地址就可以了。(也可以通过iptables规则实现nat,这样私网地址也可以的)
3、每台内部的节点服务器的网关地址必须是调度器lb的内网地址。(如果lvs的dip和rip在同一个局域网并且在同一个网段,不需要指定网关)
4、nat模式支持对ip地址和端口进行转换。即用户请求的端口和真实服务器的端口可以不一致
lvs-dr模式(直接路由)
lvs-dr:direct routing,直接路由,lvs默认模式,应用最广泛,通过为请求报文重新封装一个mac首部进行转发,源mac是dip所在的接口mac,目标mac是某挑选出的rs的rip所在接口的mac地址;源ip/port,以及目标ip/port均保持不变
dr模型,请求报文,和响应报文走的不是同一个路径,请求报文经过lvs发送给rs,响应报文在回应的时候,不需要原路返回,它可以直接返回给客户端。
这种模型带来的最大的好处就是lvs服务i去的压力变小了。因为只有请求报文需要通过vs服务器发送给rs服务器,而rs服务器的响应报文是直接发送给客户端的,不需要经过lvs服务器。而且一般请求报文相对响应报文来说要小的多。这样就使得lvs的服务器的压力小了很多。
lvs-dr模式图解
因为rs服务器需要直接将请求报文发送给客户端,而客户端访问的ip是vip,只有来自vip的包客户端才会接收,所以我们需要在rs服务器上也配置vip。但是这样的话lvs和rs都有了一样的ip,这样就会带来地址冲突的问题。我们需要解决地址冲突的问题。
我们需要在rs上修改内核参数以限制arp通告及应答级别
/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/all/arp_announce
dr模型特点:lvs的压力小,通过改变mac地址来实现调度转发,不能映射端口号。
lvs-dr模式数据包流转的过程
lvs-tun模式
转发方式:不修改请求报文的ip首部(源ip为cip,目标ip为vip),而在原ip报文之外再封装一个ip首部(源ip是dip,目标ip是rip),将报文发往挑选出的目标rs;rs直接响应给客户端(源ip是vip,目标ip是cip)
(1) dip, vip, rip都应该是公网地址
(2) rs的网关一般不能指向dip
(3) 请求报文要经由director,但响应不经由director
(4) 不支持端口映射
(5) rs的os须支持隧道功能
lvs-tun体系结构
lvs-tun的ip包调度过程
lvs-fullnat模式
lvs-fullnat:通过同时修改请求报文的源ip地址和目标ip地址进行转发
cip –> dip
vip –> rip
(1) vip是公网地址,rip和dip是私网地址,且通常不在同一ip网络;因此,rip的网关一般不会指向dip
(2) rs收到的请求报文源地址是dip,因此,只需响应给dip;但director还要将其发往client
(3) 请求和响应报文都经由director
(4) 支持端口映射
lvs工作模式总结
lvs的十种调度模式
lvs的调度又分为静态方法和动态方法。
静态方法
静态方法:仅根据算法本身进行调度
1、rr:roundrobin,轮询,即按顺序分配请求,即使某个机器性能不好,或者宕机,也会将请求分配给这台主机
2、wrr:weighted rr,加权轮询,跟rr的区别再于它可以通过对每个rs服务器去设置权重,来实现依照服务器性能的优略分配任务,性能好的分配任务多点,性能差的分配任务少点。也会存在rr一样的缺点
3、sh:source hashing,实现session sticky,源ip地址hash;将来自于同一个ip地址的请求始终发往第一次挑中的rs,从而实现会话绑定。
4、dh:destination hashing;目标地址哈希,第一次轮询调度至rs,后续将发往同一个目标地址的请求始终转发至第一次挑中的rs,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商。
动态方法
动态方法:主要根据每rs当前的负载状态及调度算法进行调度overhead=value较小的rs将被调度
1、lc:least connections 适用于长连接应用
overhead=activeconns*256 inactiveconns
2、wlc:weighted lc,默认调度方法
overhead=(activeconns*256 inactiveconns)/weight3、sed:shortest expection delay,初始连接高权重优先
overhead=(activeconns 1)*256/weight
4、nq:never queue,第一轮均匀分配,后续sed
5、lblc:locality-based lc,动态的dh算法,使用场景:根据负载状态实现正向代理
6、lblcr:lblc with replication,带复制功能的lblc,解决lblc负载不均衡
问题,从负载重的复制到负载轻的rs
overhead 表示优先级、
activeconns 正处于连接的数量
inactiveconns 非活动连接的数量
weight 权重
lvs的优缺点
优点:
lvs属于内核级的功能,它的并发量是相当大的,能达到几百万的并发
缺点:
没有所谓的高可用功能,不能检查后端服务器的健康性,(后端服务器宕机了,lvs是没有办法去管理的)
未来三年浙江“新基建”投资近万亿 优先支持温州云计算大数据中心怎么给阿里云服务器转软件怎么使用Glyphr如何修改Linux字体制作网站哪家好虚拟主机php放哪WP7交互特性浅析及APP设计探究买阿里云服务器要注意什么东西对于已被SEO搜索引擎收录的文章要怎么进行修改