首页 > 代码库 > linux集群服务之负载均衡
linux集群服务之负载均衡
负载均衡集群(LB)
负载均衡集群工作原理
当用户发送请求时,该请求不是立即发送给后端的真实服务器(realservers),而是先发送给调度器或者分发器(director),然后director根据某种调度算法,在将该请求发送给后端真实的服务器(realservers)。服务器处理请求完成后,再直接响应给客户端。
负载均衡设备
刚刚所说的调度器或者分发器是一种负载均衡设备,这种设备有硬件和软件之分:
常见的硬件负载均衡设备:
1、F5 BIG-IP
2、Citrix NetScale
3、A10
常见的软件负载均衡设备:
四层负载均衡设备:
LVS:全称Linux Virtual Server,LVS是由电子科技大学的章文嵩博士创立的基于LINUX内核的负载均衡技术。。LVS可以兼容目前大多数的网络服务,具备高可用性和高伸缩性的特征,易于管理。LVS应用非常广泛。
七层负载均衡设备:
nginx、haproxy。一般用在反向代理功能
由于LVS在开源界使用比较广泛,因此本文主要使用的LVS这种负载均衡设备,来实现负载均衡功能
实现LVS集群有三种方式:
一、网络地址转换(NAT),其工作模型如下:
这种方式的工作原理和DNAT的工作原理非常相似。首先,当客户端发送的报文请求到达调度器director时,调度器director根据连接调度算法从一组真实的服务器组中选择一个真实服务器进行响应,并将其报文的目标ip由VIP改为RIP,报文的目标端口,改为服务器的目标端口。当后端的真实服务器响应报文时,将其报文的源ip由RIP改为VIP,其报文的源端口也改为相应的端口。最后由调度器director将响应报文返回给客户端。整个过程对于用户来说,只知道调度器对外的VIP,其后端的真实服务器地址是不知道,因此,对于用户来说,整个集群系统是透明的。
该方式下的数据报文流向为:
CIP→VIP→DIP→RIP→DIP→VIP→CIP
基于NAT实现集群功能具有如下特性:
1、集群节点必须和director在同一个IP网络中
2、RIP通常是私有IP,用于各集群节点之间的通信
3、director位于client和real server之间,负责所处理进出的所有通信
4、real server必须将网关指向DIP
5、支持端口映射
6、real server可以使用任意OS
7、较大规模场景中,由于director处理所有的通信,承载压力较大,因此,director易成为系统瓶颈。
二、直接路由DR
该方式是实现LVS负载均衡集群最广泛的方式,其工作模型如下:
其工作原理为:首先客户端发送的请求会达到调度器director时,director根据各服务器的负载能力,动态的选择后端一台真实服务器进行响应,调度器既不修改报文ip,也不封装ip,而是修改报文的目标MAC地址,并将刚刚选择的那台服务器的MAC地址作为目标MAC地址,然后在局域网中传输。因此,各个服务器节点与director必须在同一个物理网段中。当后端的真实服务器响应报文请求时,使用该服务器隐藏的VIP作为源ip,CIP作为目标ip,直接响应给客户端。因此,在后端的每一个服务器上面都有一个VIP,这个VIP不接受任何请求,仅仅只是在响应报文时,作为源IP响应客户端而已。
该方式下的数据报文流向为:
CIP→VIP→RIP→CIP
这种方式实现的集群具有如下特性:
1、各个服务器节点和director必须在同一个物理网段中
2、RIP可以是公网地址,可以便捷的远程管理和监控
3、director仅仅负责处理入站请求报文,响应报文由real server直接返回给客户端
4、real server不能将网段指向DIP
5、不支持端口映射
三、TUN,IP隧道方式
实现这种方式的集群,各个服务器必须处于不同的网段中
其工作模型如下:
工作原理是:首先,客户端发送的请求会到达调度器director,然后调度器会动态的选择一台后端服务器进行响应。然后调度器与该服务器动态的建立隧道(不是静态的建立),并且此时调度器会重新封装该报文请求(即有2个ip首部)。当服务器收到请求后,拆去外层封装,并对该报文进行响应,响应报文直接由real server返回给客户端。响应时源ip为VIP,目标ip为CIP。因此,此时各个服务器上面必须要有隐藏的VIP。
该方式下的数据报文流向为:
CIP→VIP→RIP→CIP
这种方式实现的集群具有如下特性:
1、集群节点可以跨越Internet
2、RIP必须是公网ip
3、director仅负责处理入站请求报文,响应报文由real server直接返回给客户端
4、real server不能将网关指向DIP
5、只有支持隧道功能的OS才可以当做real server
6、不支持端口映射
调度算法
上面每一种方式实现的集群功能,请求报文都要发送到调度器director,那么调度器又是根据什么条件来选择相应的后端真实服务器来响应请求报文的呢?这就要根据调度器director选择的调度算法来选择了。
调度算法一共有10种。其中有4种为静态调度算法,有6种为动态调度算法
4种静态调度算法:
1、循环调度:Round-Robin Scheduling,简称RR
这种调度算法是将请求报文按照顺序发送给后端真实的服务器进行处理。这种调度模型和循环 DNS相似,但是它更粗糙些,因为它是基于网络连接的而不是基于主机的。
2、加权循环调度:Weight Round-Robin Scheduling ,简称WRR
这种调度算法也是将请求按照顺序发送给后端的真实服务器进行响应处理。但是每个服务器的响应能力由所占权重的比例来决定的,权重越大,处理报文能力越强。适用于各个集群节点的处理能力大相径庭的场景。
3、源散列调度:Source Hash Scheduling,简称SH
4、目标散列调度:Destination Hash Scheduling,简称DH
6种动态调度算法:
1、最少连接:Least-Connection,简称LC
这种调度算法是根据服务器中的活跃连接数来决定的,服务器活跃连接数(active)越小,则由该服务器进行响应。计算法则为active*256+inactive。该调度算法适用于各个集群节点的处理能力大致相同。
2、加权最少连接法:Weight Least-Connections,简称WLC
这种调度算法是根据服务器的连接数和他们的权重来决定将请求发送给那台服务器来进行响应的。计算法则为(active*256+inactive)/256,哪个服务器的值最小,则有那台服务器进行响应。
3、基于地区的最少连接调度:Locally-Base Leaset-Connection Scheduling,简称LBLC
4、带有复制调度的基于地区的最少连接调度:Locally-Base Leaset-Connection Scheduling with Replication Scheduling,简称LBLCR
5、最短的期望的延迟:Shortest Expected Delay Scheduling,简称SED
6、最少队列调度:Never Queue Scheduling,简称NQ
本文出自 “linux学习之路” 博客,请务必保留此出处http://xslwahaha.blog.51cto.com/4738972/1587182
linux集群服务之负载均衡