Lvs原理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lvs原理相关的知识,希望对你有一定的参考价值。
官方文档:
http://www.linuxvirtualserver.org/zh/lvs1.html
http://www.linuxvirtualserver.org/zh/lvs2.html
http://www.linuxvirtualserver.org/zh/lvs3.html
http://www.linuxvirtualserver.org/zh/lvs4.html
名称 | 缩写 | 说明 |
虚拟IP地址(Virtual IP Address) | VIP | VIP为Director用于向客户端计算机提供服务的IP地址 |
真实IP地址(Real Server IP Address) | RIP | 在集群下面节点上使用的IP地址,物理IP地址 |
Director的IP地址(Director IP Address) | DIP | Director用于连接内外网络的IP地址,物理网卡上的地址。是负载均衡器上的IP |
客户端主机IP地址(Client IP Address) | CIP | 客户端用户计算机请求集群服务器的IP地址,该地址用作发送给集群的请求的源IP地址 |
如下图:
LVS集群的3种工作模式介绍与原理
NAT(Network Address Translation)、TUN(Tunneling)、DR(Direct Routing)、FULLNAT(Full Network Address Translation)
- DR模式-直接路由模式
Virtual Server via Direct Routing (VS/DR)
VS/DR模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器将响应后的处理结果直接返回给客户端用户。同VS/TUN技术一样,VS/DR技术可极大地提高集群系统的伸缩性。而且,这种DR模式没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器LB与真实服务器RS都有一块网卡在同一物理网段上,即必须在同一个局域网环境。
- 通过在调度器LB上修改数据包的母的MAC地址实现转发。注意,源IP地址仍然是CIP,目的IP地址仍然是VIP。
- 请求的报文经过调度器,而RS香型处理后的报文无需经过调度器LB,因此,并发访问量大时使用效率很高(和NAT模式比)
- 因DR模式是通过MAC地址的改写机制实现的转发,因此,所有RS节点和调度器LB只能在一个局域网LAN中(小缺点)
- 需要注意RS节点的VIP的绑定(lo:vip,lol:vip)和ARP抑制问题。
- 强调下:RS节点的默认网关不需要是调度器LB的DIP,而直接使IDC机房分配的上级路由器的IP(这是RS带有外网IP地址的情况),理论讲:只要RS可以出网即可,不是必须要配置外网IP。
- 由于DR模式的调度器仅进行了目的MAC地址的改写,因此,调度器LB无法改变请求的报文的目的端口(和NAT要区别)
- 当前,调度器LB支持几乎所有的UNIX、LINUX系统,但目前不支持windows系统。真是服务器RS节点可以是windows系统
- 总的来说DR模式效率很高,但是配置比较麻烦,因此访问量不是特别大的公司可以用haproxy/nginx取代之。这符合运维原则:简单、易用、高效。日2000W PV或并发请求1万一下都可以考虑用haproxy/nginx(LVS NAT模式)
- 直接对外的访问业务,例如:web服务做RS节点,RS最好用公网IP地址。如果不直接对外的业务,例如:mysql,存储系统RS节点,最好只用内部IP地址。
NAT模式
- NAT技术将请求的报文(DNAT)和相应的报文(SNAT),通过调度器地址重写然后在转发发给内部的服务器,返回时改写成原来的用户请求的地址。
- 只需要在调度器LB上配置WAN公网IP即可,调度器也要有私有LAN IP和内部RS节点通信
- 每台内部RS节点的网关地址,必须要配置成调度器LB的私有LAN内物理网卡地址(LDIP),这样才能确保数据报文返回仍然经过调度器LB。
- 由于请求与响应的数据报文都经过调度器LB,因此,网站访问量大时调度器LB有较大瓶颈,一般要求最多10-20台节点。
- NAT模式支持对IP及端口的转换,即用户请求10.0.0.1:80,可以通过调度器转换到RS节点的10.0.0.2:8080(DR和TUN模式不具备的)。
- 所有NAT内部RS节点只需要配置私有LAN IP即可。
- 由于数据包来回都需要经过调度器,因此,要开启内核转发net.ipv4.ip_forward=1,当然也包括iptables防火墙的forward功能(DR和TUN模式不需要)。
LVS的调度算法
- 轮叫调度(Round-Robin Scheduling)
- 加权轮叫调度(Weighted Round-Robin Scheduling)
- 最小连接调度(Least-Connection Scheduling)
- 加权最小连接调度(Weighted Least-Connection Scheduling)
- 基于局部性的最少链接(Locality-Based Least Connections Scheduling)
- 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)
- 目标地址散列调度(Destination Hashing Scheduling)
- 源地址散列调度(Source Hashing Scheduling
Director调度器可用于做出该决定的调度方法分成两个基本类型:
固态调度方法:rr,wrr,dh,sh
动态调度算法:wlc,lc,lblc,lblcr,SED,NQ(后面两种官方站点没有提到,编译LVS,make过程可以看到rr|wrr|wlc|lblc|lblcr|dh|sh|sed|nq)。
rr 轮叫调度(Round-Robin Scheduling),它将请求依次分配不同的RS节点,也就是在RS节点中均摊请求。这种算法简单,但是只适合于RS节点处理性能相差不大的情况。
wrr 加权轮询调度(Weighted Round-Robin Scheduling),它将依据不同RS节点的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值较低的RS节点更多。相同权值的RS得到相同数目的连接数。
wlc 加权最小连接数调度(weighted Least-Connection)假设各台RS的权值依次为Wi(I=1..n),当前的TCP连接数依次为Ti(I=1..n),依次选取Ti/Wi为最小的RS作为下一个分配的RS。
LVS的调度算法的生产环境选型
- 一般的网络服务,如HTTP、Mail、MySQL等,常用的LVS调度算法为:
- 基本轮叫调度rr算法
- 加权最小连接调度wlc
- 加权轮叫调度wrr算法
2.基于局部性的最小链接LBLC和带复制的基于局部性最少链接LBLC主要适用于Web Cache 和Db Cache集群,但是我们很少这样用。
3.源地址散列调度SH和目标地址散列调度DH可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出入口。
4.最短预期延时调度SED和不排队调度NQ主要是对处理时间相对比较长的网络服务。
以上是关于Lvs原理的主要内容,如果未能解决你的问题,请参考以下文章