LVS入门篇(三)之LVS的工作模式和调度算法
-
1、NAT模型
(1)原理图:
①.客户端(200.10.10.1)将请求发往前端的负载均衡器(114.100.80.10),请求报文源地址是CIP(客户端IP),后面统称为CIP),目标地址为VIP(负载均衡器前端地址,后面统称为VIP)。
②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标地址改为了后端服务器的RIP地址(10.0.0.1)并将报文根据算法发送出去。
③.报文送到RealServer后,由于报文的目标地址(10.0.0.1)是自己,所以会响应该请求,并将响应报文返还给LVS。
④.然后lvs将此报文的源地址修改为本机地址(114.100.80.10)并发送给客户端。
注意:在NAT模式中,RealServer的网关必须指向LVS,否则报文无法送达客户端。
(2)IP包调度过程图:
(3)小结
①NAT技术将请求的报文和响应的报文都需要通过LB进行地址改写,因此网站访问量比较大的时候LB负载均衡调度器有比较大的瓶颈,一般要求最多之能10-20台节点
②需要在LB上配置一个公网IP地址就可以了。
③每台内部的realserver服务器的网关地址必须是调度器LB的内网地址。
④NAT模式支持对IP地址和端口进行转换。即用户请求的端口和真实服务器的端口可以不一致。
⑤优缺点:
(a)优点
集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。
(b)缺点
扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!
-
2、DR模型
(1)原理图:
①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP(200.10.10.1),目标地址为VIP(114.100.80.10)。
②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为LVS自己DIP的MAC地址,目标MAC改为了RIP的MAC地址(00:0c:29:d2),并将此包发送给RS。
③.RS发现请求报文中的目的MAC是自己,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端。
注意:需要设置lo接口的VIP不能响应本地网络内的arp请求(也叫ARP抑制)。
(2)IP包调度过程图:
(3)小结:
①通过在调度器LB上修改数据包的目的MAC地址实现转发。注意源地址仍然是CIP,目的地址仍然是VIP地址。
②请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB,因此并发访问量大时使用效率很高(和NAT模式比)
③因为DR模式是通过MAC地址改写机制实现转发,因此所有RS节点和调度器LB只能在一个局域网里面
④RS主机需要绑定VIP地址在LO接口(掩码32位)上,并且需要配置ARP抑制。
⑤RS节点的默认网关不需要配置成LB,而是直接配置为上级路由的网关,能让RS直接出网就可以。
⑥由于DR模式的调度器仅做MAC地址的改写,所以调度器LB就不能改写目标端口,那么RS服务器就得使用和VIP相同的端口提供服务。
⑦直接对外的业务比如WEB等,RS的IP最好是使用公网IP。对外的服务,比如数据库等最好使用内网IP。
⑧优缺点
(i)优点
和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。
DR模式的效率很高,但是配置稍微复杂一点,因此对于访问量不是特别大的公司可以用haproxy/nginx取代。日1000-2000WPV或者并发请求1万一下都可以考虑用haproxy/nginx。
(ii)缺点
所有RS节点和调度器LB只能在一个局域网里面。.
-
3、TUN模型
(1)原理图:
①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。
②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。
③.RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。
注意:需要设置lo接口的VIP不能在共网上出现。
(2)IP包调度过程图:
(3)小结:
①TUNNEL模式必须在所有的realserver机器上面绑定VIP的IP地址
②TUNNEL模式的vip------>realserver的包通信通过TUNNEL模式,不管是内网和外网都能通信,所以不需要lvsvip跟realserver在同一个网段内
③TUNNEL模式realserver会把packet直接发给client不会给lvs了
④TUNNEL模式走的隧道模式,所以运维起来比较难,所以一般不用。
⑤优缺点
(i)优点
负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。
(ii)缺点
隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IPTunneling”(IPEncapsulation)协议,服务器可能只局限在部分Linux系统上。
-
4、FULLNAT模型(FullNetworkAddressTranslation)
(1)原理图:
无论是DR还是NAT模式,不可避免的都有一个问题:LVS和RS必须在同一个VLAN下,否则LVS无法作为RS的网关。
这引发的两个问题是:
①.同一个VLAN的限制导致运维不方便,跨VLAN的RS无法接入。
②.LVS的水平扩展受到制约。当RS水平扩容时,总有一天其上的单点LVS会成为瓶颈。
Full-NAT由此而生,解决的是LVS和RS跨VLAN的问题,而跨VLAN问题解决后,LVS和RS不再存在VLAN上的从属关系,可以做到多个LVS对应多个RS,解决水平扩容的问题。
Full-NAT相比NAT的主要改进是,在SNAT/DNAT的基础上,加上另一种转换,转换过程如下::
在包从LVS转到RS的过程中,源地址从客户端IP被替换成了LVS的内网IP。
内网IP之间可以通过多个交换机跨VLAN通信。
当RS处理完接受到的包,返回时,会将这个包返回给LVS的内网IP,这一步也不受限于VLAN。
LVS收到包后,在NAT模式修改源地址的基础上,再把RS发来的包中的目标地址从LVS内网IP改为客户端的IP。
Full-NAT主要的思想是把网关和其下机器的通信,改为了普通的网络通信,从而解决了跨VLAN的问题。采用这种方式,LVS和RS的部署在VLAN上将不再有任何限制,大大提高了运维部署的便利性。
(2)IP包调度过程图:
(3)小结:
(i)FULLNAT模式也不需要LBIP和realserverip在同一个网段;fullnat跟nat相比的优点是:保证RS回包一定能够回到LVS;因为源地址就是LVS-->不确定
(ii)fullnat因为要更新sorceip所以性能正常比nat模式下降10%
(4)四种模式对比总结:
性能:DR>TUN>NAT>FULLNAT
由于每个模式的功能不一样,所以具体的选择还是要根据公司业务的选择,实际环境来决定。
-
5、LVS调度算法
(1)IPVS调度器实现了如下十种负载调度算法
固定调度算法:rr,wrr,dh,sh
动态调度算法:wlc,lc,lblc,lblcr,SED,NQ.
最常用的三种:RR WRR WLC
(2)固定调度算法
a、rr:轮询调度(Round Robin)
将请求依次分配不同的RS节点,RS服务器均摊请求,这种算法比较简单,但是只适合RS节点相差性能不大的情况
b、wrr:加权轮询调度(Weighted Round Robin)
它将依据不同RS节点的权值分配任务,权值高的RS将优先获得任务,并且分配的连接数比权值低的RS节点更多。相同权值的RS得到相同数目的连接数
c、dh:目标地址散列(destination hashing)
以目的地址为关键字查找一个静态hash表来获取需要的RS
d、sh:源地址散列(source hashing)
以源地址为关键字查找一个静态hash表来获取需要的RS
(3)动态调度算法:
a、wlc:加权最小连接数调度(weighted least-connection)
假设各台RS的权值依次为Wi(i=1...n) 。当前的tcp连接数依次为Ti(i=1..n),依次取TI/WI为最小的RS作为下一个分配的RS
b、LC:最少链接(Least Connections)
调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。
c、LBLC:基于局部性的最少链接(Locality-Based Least Connections)
"基于局部性的最少链接" 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务器,将请求发送到该服务器。
d、LBLCR:带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
"带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
e、SED:最短期望延迟(Shortest Expected Delay)
基于wlc算法,简单算法:(active+1)*256/weight 【(活动的连接数+1)*256/除以权重】
f、NQ:永不排队(never queue)
无需队列(改进的sed),如果有台realserver的连接数=0就直接分配过去,不需要在进行sed运算。
(4)LVS调度算法的生产环境选型
a、一般的网络服务,如http,mail,mysql等常用的LVS调度算法为:基本轮询调度RR、加权最小连接调度WLC、加权轮询调度WRR
b、基于局部性的最小连接LBLC和带复制的给予局部性最小连接LBLCR主要适用于web cache和DB cache
c、源地址散列调度SH和目标地址散列调度DH可以结合使用在防火墙集群中,可以保证整个系统的出入口唯一。
d、最短期望延迟SED和永不排队NQ调度算法主要是处理时间相对较长的网络服务。
实际适用中这些算法的适用范围很多,工作中最好参考内核中的连接调度算法的实现原理,然后根据具体的业务需求合理的选型。