标签:des com class http blog img style size ext width strong
1. 负载均衡概述
负载均衡的基本思路是:在一个服务器集群中尽可能的平衡负载量。通常的做法是在服务器前端设置一个负载均衡器(一般是专门的硬件设备)。然后负载均衡器将请求的连接路由到最空闲的可用服务器。下图显示了一个典型的大型网站负载均衡设置,其中一个负载均衡器用于HTTP流量,另一个用于MySQL访问。
负载均衡有5个常见的目的。
(1)可扩展性:负载均衡对于某些扩展策略有所帮助,例如读写分离时从备库读数据。
(2)高效性:负载均衡有助于更有效的使用资源,因为它能够控制请求被路由到何处。
(3)可用性:一个灵活的负载均衡解决方案能够使用时刻保持可用的服务器。
(4)透明性:客户端无须知道是否存在负载均衡设置,也不需要关心在负载均衡器的背后有多少机器,名字是什么。负载均衡器给客户端看到的只是一个虚拟的服务器。
(5)一致性:如果应用是有状态的(数据库事务、网站会话等),那么负载均衡器就应将相关的查询指向同一个服务器,以防止数据丢失。应用无须去跟踪到底连接哪一个服务器。
2. 四层/七层负载均衡
服务器负载均衡,顾名思义就是对一组服务器提供负载均衡业务。这一组服务器一般来说都处于同一个局域网络内,并同时对外提供一组(或多组)相同(或相似)的服务。服务器负载均衡是数据中心最常见的组网模型。
服务器负载均衡分为四层(L4)服务器负载均衡和七层(L7)服务器负载均衡两种:
NAT方式L4服务器负载均衡的组网灵活,后端服务器可以位于不同的物理位置,不同的局域网内。NAT方式下,LB设备分发服务请求时,进行目的IP地址转换(目的IP地址为实服务的IP),通过路由将报文转发给各个实服务。NAT方式L4服务器负载均衡的典型组网如图所示。
NAT方式L4服务器负载均衡包括以下几个基本元素:
客户端将到VSIP的请求发送给服务器群前端的负载均衡设备,负载均衡设备上的虚服务接收客户端请求,依次根据持续性功能、ACL策略、调度算法,选择真实的服务器,再通过网络地址转换,用真实服务器地址重写请求报文的目标地址后,将请求发送给选定的真实服务器;真实服务器的响应报文通过负载均衡设备时,报文的源地址被还原为虚服务的VSIP,再返回给客户端,完成整个负载调度过程。
NAT方式L4服务器负载均衡的工作流程图如图所示。
流程简述如下:
步骤 |
说明 |
备注 |
(1) |
Host发送服务请求报文 |
源IP为Host IP、目的IP为VSIP |
(2) |
LB Device接收到请求报文后,借助持续性功能或调度算法计算出应该将请求分发给哪台Server |
- |
(3) |
LB Device使用DNAT技术分发报文 |
源IP为Host IP、目的IP为Server IP |
(4) |
Server接收并处理请求报文,返回响应报文 |
源IP为Server IP、目的IP为Host IP |
(5) |
LB Device接收响应报文,转换源IP后转发 |
源IP为VSIP、目的IP为Host IP |
从以上一系列的说明可以看出——在负载均衡时使用网络地址转换技术,NAT方式因此而得名。
组网灵活,对服务器没有额外要求,不需要修改服务器配置,适用于各种组网。
相对于NAT方式,DR方式L4服务器负载均衡中只有客户端的请求报文通过LB,服务器的响应报文不经过LB,从而减少了LB的负载,有效的避免了LB成为网络瓶颈。DR方式下,LB设备分发服务请求时,不改变目的IP地址,而将报文的目的MAC替换为实服务的MAC后直接把报文转发给实服务。DR方式L4服务器负载均衡的典型组网如图所示。
DR方式L4服务器负载均衡包括以下几个基本元素:
DR方式L4服务器负载均衡时,除了LB设备上配置了VSIP,真实服务器也都配置了VSIP,配置的VSIP要求不能响应ARP请求,例如在环回接口上配置VSIP。实服务除了VSIP,还需要配置一个真实IP,用于和LB通信,LB设备和真实服务器在同一个链路域内。发送给VSIP的报文,由LB分发给相应的真实服务器,从真实服务器返回给客户端的报文直接通过交换机返回。
DR方式L4服务器负载均衡的工作流程图如图所示。
流程简述如下:
步骤 |
说明 |
备注 |
(1) |
Host发送服务请求报文 |
源IP为Host IP、目的IP为VSIP |
(2) |
General Device收到请求后转发给LB Device |
Server上的VSIP不会响应ARP请求 |
(3) |
LB Device接收到请求报文后,借助持续性功能或调度算法计算出应该将请求分发给哪台Server |
- |
(4) |
LB Device分发报文 |
源IP为Host IP,目的IP为VSIP,目的MAC为Server的MAC地址 |
(5) |
Server接收并处理请求报文,返回响应报文 |
源IP为VSIP、目的IP为Host IP |
(6) |
General Device收到响应报文后,直接将报文转发给Host |
- |
从以上一系列的说明可以看出——负载均衡设备没有采用传统的转发方式(查找路由表)来分发请求报文,而是通过修改目的MAC直接路由给服务器,DR方式也因此而得名。
只有单边报文经过负载均衡设备,负载均衡设备负担小,不易成为瓶颈,转发性能更强。
L7服务器负载均衡的典型组网如图所示。
L7服务器负载均衡包括以下几个基本元素:
客户端首先与服务器群前端的负载均衡设备建立TCP连接,然后将到VSIP的请求发送给负载均衡设备。负载均衡设备上的虚服务接收客户端请求,依次根据持续性功能、实服务组匹配策略、调度算法,选择真实的服务器。然后,负载均衡设备先用客户端地址与真实服务器建立TCP连接,再用真实服务器地址重写客户端请求报文的目标地址,并将请求发送给真实服务器。真实服务器的响应报文通过负载均衡设备时,报文的源地址被还原为虚服务的VSIP,再返回给客户端,完成整个负载调度过程。
L7服务器负载均衡的工作流程图如图所示。
流程简述如下:
步骤 |
说明 |
备注 |
(1)~(3) |
Host发起TCP连接请求,与LB Device建立TCP连接 |
TCP连接请求的源IP为Host IP、目的IP为VSIP |
(4) |
Host发送服务请求报文 |
源IP为Host IP、目的IP为VSIP |
(5) |
LB Device收到请求后,根据匹配策略为该请求选择一个合适的实服务组,再借助调度算法计算出应该将请求分发给该实服务组中的哪台Server,并缓存该请求报文 |
- |
(6) |
LB device向Server发SYN报文,序列号为Host的SYN报文序列号 |
源IP为Host IP、目的IP为Server IP |
(7) |
Server发送SYN ACK报文 |
源IP为Server IP、目的IP为Host IP |
(8) |
LB device接收Server的SYN ACK报文后,回应ACK报文 |
源IP为Host IP、目的IP为Server IP |
(9) |
修改步骤(5)中缓存的请求报文的目的IP和TCP序列号,然后发给Server |
源IP为Host IP、目的IP为Server IP |
(10) |
Server发送响应报文到LB device |
源IP为Server IP、目的IP为Host IP |
(11) |
LB device修改响应报文的源地址和TCP序列号后转发给Host |
源IP为VSIP、目的IP为Host IP |
(3) 技术特点
对报文进行深度解析获取报文载荷中携带的信息,实现按内容进行分发,拓宽了负载均衡业务的适用范围。适用于不同的服务器提供不同功能的组网。
3. LVS
基于LVS的服务器集群主要由两部分组成,即负载调度器(Load Balancer,简称LB)和真正提供服务的服务器(Real Server,简称RS)。RS对外是不可见的,用户需要通过访问LB来获得服务,所以LB也称为虚拟服务器(Virtual Server),它对外公开的IP称为VIP(Virtual IP)。
LB接收到用户的请求后,会根据设置的转发模式和负载均衡调度算法将请求转发给RS,RS再将结果返回给LB或用户(返回给谁跟转发模式有关)。
3.1 转发模式
LVS的转发模式主要有三种:网络地址转换(NAT,Network Address Translation)、IP隧道(TUN,IP Tunneling)和直接路由(DR,Direct Routing)。
NAT模式
网络地址转换技术应该都不陌生,就是将一个IP地址转换为另一个IP地址的技术。通常当一个内部网络中的主要要访问Internet或被Internet访问时,就需要采用NAT技术,将内部地址(10.0.0.0/255.0.0.0、172.16.0.0/255.240.0.0、192.168.0.0/255.255.0.0)转化为在Internet上可用的外部地址。
下面是LVS采用NAT模式的部署图:
假设一个IP为200.200.200.2的用户来访问我们的虚拟服务器,VIP为200.200.200.1。集群使用的内部IP是10.10.10.0网段。那么请求和响应的过程可以用下图表示:
DR模式
NAT模式中,请求和响应的数据包都需要通过LB,当RS的数目过多时,LB可能成为整个集群的新瓶颈。因为大多数Internet服务都有这样的特点:请求报文较短而响应报文往往包含大量的数据。如果能将请求和响应分开处理,即LB只负责调度请求而响应直接返回给客户,将极大地提高整个集群的吞吐量。
DR模式的部署图
DR模式有几点和NAT不同:
1. 不仅LB上配置了VIP,RS上也都配置了VIP
2. LB和RS都只需要一个真实网卡,LB的VIP配置在eth0:0上,RS的VIP配置在lo:0上
3. LB和RS上真实网卡的IP都需要是公网IP
4. LB不需要开启路由转发功能
5. 响应报文不经过LB
当用户通过VIP访问集群时,LB会收到这个请求,再按照设置的调度算法选择一个RS,并在一个hash表中存储这次连接。然后将请求报文的目的MAC地址改为所选择的RS的MAC并转发给它。RS收到请求后,发现报文的目的IP为VIP,而自己的lo:0上配置了这个IP,RS就处理这个请求并将响应报文直接发送给用户。当该用户再次发送请求时,LB就根据hash表找到对应的RS,并再次将请求转发给它。
TUN模式
IP隧道技术是将一个IP数据报封装成另一个IP数据报的技术,使得被封装的数据报可以被转发到另一个IP地址。
TUN模式与DR模式基本相同。不同的是:
1. TUN模式中,LB和RS必须支持“IP Tunneling”或者“IP Encapsulation”协议
2. LB和RS的VIP配置在tunl0虚拟网卡上
3. LB将请求报文封装成一个新的IP报文,新的IP包的目的IP是某一RS的IP,然后转发给RS,RS收到报文后解封装,取出用户的请求报文,发现目的IP是VIP,而自己的tunl0网卡上配置了这个IP,从而处理请求并将结果直接发送给客户。DR模式中LB修改的是目的MAC
4. LB与真实服务器不必在同一网段,只要路由可达即可。如果不再同一网段,不会存在arp问题
3.2 调度策略
现在LVS已实现了10种调度策略(man ipvsadm可以查看)。
(1)轮询调度(Round Robin,rr)
调度器通过“轮询”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
(2)加权轮询(Weighted Round Robin,wrr)
调度器通过“加权轮询”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器能处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
(3)最少链接(Least Connections,lc)
调度器通过“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较好地均衡负载。
(4)加权最少链接(Weighted Least Connections,wlc)
在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
(5)基于局部性的最少链接(Locality-Based Least Connections,lblc)
“基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接” 的原则选出一个可用的服务器,将请求发送到该服务器。
(6)带复制的基于局部性最少链接(Locality-Based Least Connections with Replication,lblcr)
“带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
(7)目标地址散列(Destination Hashing,dh)
“目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
(8)源地址散列(Source Hashing,sh)
“源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
(9)最短的期望的延迟(Shortest Expected Delay Scheduling SED,sed)
基于wlc算法。这个必须举例来说了
ABC三台机器分别权重123,连接数也分别是123。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用sed算法后会进行这样一个运算
A(1+1)/1
B(1+2)/2
C(1+3)/3
根据运算结果,把连接交给C。
(10)最少队列调度(Never Queue Scheduling,nq)
如果有台real server的连接数=0就直接分配过去,不需要在进行sed运算
参考文献:
1. 《高性能MySQL》第11章 可扩展的MySQL
2. 《负载均衡技术白皮书》杭州华三通信技术有限公司
http://www.h3c.com.cn/Products___Technology/Technology/Dependability/Other_technology/Technology_book/200906/637219_30003_0.htm
标签:des com class http blog img style size ext width strong
原文地址:http://www.cnblogs.com/yuyue2014/p/3693924.html