生产环境该如何选择lvs的工作模式,和哪一种算法?
在生产环境中我们应该如何选择lvs的工作模式以及算法呢?首先咱们先了解下lvs都有哪些工作模式和算法。
lvs的工作模式:
1.nat模式
工作原理:当请求到来时,Director Server上处理的程序将数据报文中的目标地址(VIP)改成具体的某台Real Server,端口也改成Real Server的端口,然后把报文发给Real Server。Real Server处理完数据后,需要返回给Director Server,然后Director Server将数据包中的源地址和源端口改成VIP的地址和端口,最后把数据发送出去。
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。
缺点:扩展性有限。当服务器节点(普通PC服务器)数据增长到20个或更多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过负载均衡器再生。
2.ip tunnel模式
工作原理:调度器把请求报文通过IP隧道转发至后台集群节点Real Server服务器,而Real Server服务器将响应直接返回给客户,跟DR模型类似调度器只处理请求报文,与DR模型不同的是在此模型中调度器跟Real Server之间通讯是基于IP隧道实现的。
优点:负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。
缺点:这种方式需要所有的服务器支持"IP Tunneling"(IP Encapsulation)协议。
3.dr模式
工作原理:客户端发出的请求数据包经过层层路由发送到调度器的VIP,调度器再将请求包通过forward分发给后台集群节点Real Server,Real Server接收到请求包后将通过地址设置为VIP的别名网卡来封装响应报文并直接发送给客户端,不再经过调度器转发,从而加快了响应速度。
优点:和LVS-TUN一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与LVS-TUN相比,LVS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。
缺点:要求负载均衡器的网卡必须与物理网卡在一个物理段上。
lvs的调度算法:
1.rr 轮寻(Round Robin):将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
2.wrr 加权轮寻(Weighted Round Robin):根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
3.lc 最少链接(Least Connections):动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用”最小连接”调度算法可以较好地均衡负载。
4.wlc 加权最少链接(Weighted Least Connections):在集群系统中的服务器性能差异较大的情况下,调度器采用”加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
5.lblc 基于局部性的最少链接(Locality-Based Least Connections):针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用”最少链接” 的原则选出一个可用的服务器,将请求发送到该服务器。
6.lblcr 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication):针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法是维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按”最小连接”原 则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
7.dh 目标地址散列(Destination Hashing):根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
8.sh 源地址散列(Source Hashing):根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
至此我们已经了解到了lvs的工作原理以及相关的调度算法,下面列举一些针对不同环境个人采用的模式和调度算法:
1.如果后端服务器的配置相同,而且台数不多的话,可以使用lvs三种模式中的任意一种,调度算法可以是rr
2.如果后端服务器的配置相同,但是台数很多的话,可以使用lvs/dr或者lvs/tun模式,调度算法可以是rr
3.如果后端服务器的配置相同,但是台数很多,而且服务器分布在不同的局域网中,那么使用lvs/tun模式,调度算法可以是rr
4.如果后端服务器的配置不同,而且台数不多的话,可以使用lvs三种模式中的任意一种,调度算法可以是wrr
5.如果后端服务器的配置不同,但是台数很多的话,可以使用lvs/dr或者lvs/tun模式,调度算法可以是wrr
6.如果后端服务器的配置不同,但是台数很多,而且服务器分布在不同的局域网中,那么使用lvs/tun模式,调度算法可以是wrr
7.如果后端服务器使用了cache系统,可以使用lvs/dr或者lvs/tun模式,调度算法可以是lblc或者lblcr
8.如果后端服务器使用了cache系统,并且架构体系庞大,使用lvs/tun模式,调度算法是lblcr
9.如果后端服务器为集群且性能差异大,使用lvs/dr或者lvs/tun模式,调度算法采用wlc
10.如果后端服务器为集群且性能差异不大,使用lvs/dr或者lvs/tun模式,调度算法采用lc
以上几种情况只是个人的理解,并不是很全面,建议还是大家根据实际环境、需求等众多因素,采用适合的模式及调度算法,毕竟这个是仁者见仁,智者见智的,每个公司的体系、环境、需求是不一样的,只有灵活的运用才能找到合适的体系,so:没有最好的只有最适合的
隋老师,我回复不了帖子,电脑出问题了,我发了一篇文章冲下数~~~~~
转载于:https://blog.51cto.com/jokerlishuo/1078733