ALICloud SLB(负载均衡)
1.1 基础架构
四层采用开源软件LVS(Linux Virtual Server)+ keepalived的方式实现负载均衡,并根据云计算需求对其进行了个性化定制。
七层采用Tengine实现负载均衡。Tengine是由淘宝网发起的Web服务器项目,它在Nginx的基础上,针对有大访问量的网站需求,添加了很多高级功能和特性。
LVS集群内癿每台LVS都会迕行会话,通过组播报文同步到该集群内癿其它LVS机器上,从而实现LVS集群内各台机器间癿会话同步。
注意:对于连接未建立(三次握手未完成),或者已建立连接但未触发会话同步机制,热升级不保证连接不中断,需要依靠客户端重新发起连接。
1.2 SLB功能
✓ 协议支持:当前提供四层(TCP协议和UDP协议)和七层(HTTP和HTTPS协议)的负载均衡服务。
✓ 健康检查:支持对后端ECS实例进行健康检查。负载均衡服务会自动屏蔽异常状态的ECS实例,待该ECS实例恢复正常后自动解除屏蔽。
✓ 会话保持:提供会话保持功能。在会话的生命周期内,可以将同一客户端的会话请求转发到同一台后端ECS实例上。
✓ 调度算法:支持轮询、加权轮询(WRR)、加权最小连接数(WLC)三种调度算法。
✓ 域名URL转发:针对七层协议(HTTP协议和HTTPS协议),支持按设定的访问域名和URL将请求转发到不同的虚拟服务器组。
✓ 多可用区:支持在指定可用区创建负载均衡实例。在多可用区部署的地域还支持主备可用区,当主可用区出现故障时,负载均衡可自动切
换到备可用区上提供服务。
✓ 访问控制:通过添加负载均衡监听的访问白名单,仅允许特定IP访问负载均衡服务。
✓ 安全防护:结合云盾,可提供5G以下的防DDoS攻击能力。
✓ 证书管理:针对HTTPS协议,提供统一的证书管理服务。证书无需上传到后端ECS实例,解密处理在负载均衡上进行,降低后端ECS实例
的CPU开销。
✓ 带宽控制:支持根据监听设置其对应服务所能达到的带宽峰值。
✓ 实例类型:提供公网和私网类型的负载均衡服务。您可以根据业务场景来选择配置对外公开或对内私有的负载均衡服务,系统会根据您的
选择分配公网或私网服务地址。公网类型的负载均衡默认使用经典网络;私网类型的负载均衡服务可以选择使用经典网络或专有网络。
✓ 监控:提供丰富的监控数据,实时了解负载均衡运行状态。
✓ 管理方式:提供控制台、API、SDK多种管理方式。
1.3 使用场景
场景一:应用于高访问量的业务
场景二:横向扩张系统
场景三:消除单点故障
场景四:同城容灾 (多可用区容灾)
为了提供更加稳定可靠的负载均衡服务,阿里云负载均衡已在各地域部署了多可用区以实现同地域容灾。当主可用区出现机房故障或不可用时,负载均衡仍然有能力在非常短的时间内(大约30s中断)切换到另外一个备可用区恢复服务能力;当主可用区恢复时,负载均衡同样会自动切换到主可用区提供服务。
场景五:跨地域容灾
你可以在不同地域下部署负载均衡实例,并分别挂载相应地区内不同可用区的ECS。
上层利用云解析做智能DNS,将域名解析到不同地域的负载均衡实例服务地址下,可实现全局负
载均衡。当某个地域出现不可用时,暂停对应的解析就能实现所有用户访问不受影响。
1.4 负载均衡支持的算法
轮询、加权轮询(WRR)、加权最小连接数(WLC)
轮询:按照访问次数依次将外部请求依序分发到后端ECS实例上
加权轮询:你可以对每台后端的实例设置权重值,权重值越高的服务器,被轮询到的次数(几率)也越高
加权最小连接数:除了根据每台后端实例设定的权重值来进行轮询,同时还要考虑后端实例的实际负载(即连接数)。当权重值相同时,当前连接数越小的后端实例被轮询到的次数(概率)也越高
1.5 两种负载均衡模式
公网负载均衡就是对公网提供服务,实例创建后的服务器地址是公网IP地址
私网负载均衡仅可以在阿里云内部使用,实例创建后的服务地址是内网IP地址。
三种类型的负载均衡实例:
经典网络公网负载均衡实例
经典网络私网负载均衡实例
专有网络私网负载均衡实例
1.6 负载均衡知识点
1、不可以更改负载均衡的模式,因为负载均衡系统会根据负载均衡实例类型来分配不同的服务地址(公网IP或私网IP),所以当你进行负载均衡类型切换操作时,必须通过先删除后创建的方式,在新建实例时重新选择负载均衡实例类型。
2、负载均衡和后端ECS实例之间是通过内网进行通信的,所以ECS实例无需配置外网带宽
3、添加不同可用区的ECS实例作为负载均衡实例的后端服务器,从而提供本地可用性
4、在同一地域创建多个负载均衡实例,通过DNS轮询的方式对外提供服务,从而提高本地可用性
5、在不同地域创建多个负载均衡实例,通过DNS轮询的方式对外提供服务,从而提供跨地域的可用性
6、目前负载均衡在配置ECS数量上面没有限制
7、负载均衡不支持跨地域部署,一个负载均衡实例后端的ECS实例必须同属于同一个账号且同一地域才可以配置
8、负载均衡目前支持服务器证书和CA证书的上传,服务器证书需要上传证书内容和私钥,CA证书只需要上传证书内容;这两种类型的证书都只支持PEM编码格式的上传。
9、HTTP/HTTPS监听访问后端ECS服务器HTTP协议的版本是HTTP1.0协议。
每个监听限制10条转发规则。
10、在您进行负载均衡服务监听配置时就可以选择是否开启会话保持。您可以针对不同的监听配置不同的会话保持策略。会话保持的最长时间是86400秒(24小时)。
11、7层(HTTP/HTTPS协议)服务,负载均衡系统是基于cookie癿会话保持。植入cookie癿会话保持的最长时间是86400秒(24小时)
12、HTTP/HTTPS监听可使用植入cookie和重写cookie来进行会话保持。
植入cookie: 此种方法下,您只需要指定cookie的过期时间。客户端第一次访问时,负载均衡服务在返回请求中植入cookie(即在HTTP/HTTPS响应报文中插入SERVERID字串),下次客户端携带此cookie访问,负载均衡服务会将请求定向转发给之前记录到的ECS实例上。
重写cookie:此种方式下,您可以根据需要指定HTTPS/HTTP响应中插入的cookie。您需要在后端ECS上维护该cookie的过期时间和生存时间。负载均衡服务发现用户自定义了cookie,将会对原来的cookie进行重写,下次客户端携带新的cookie访问,负载均衡服务会将请求定向转发给之前记录到的ECS实例上。
13、SLB支持针对不同的域名配置不同的会话保持规则
1.7 负载均衡计费
负载均衡目前只对出流量计费,入流量不计费。 _
健康检查产生的流量不会被计费
按流量计费
按使用流量计费只有在实例停止、被释放、或无仸何访问的情况下才不会产生流量费用。
负载均衡是放置于ECS之前的负载均衡服务设备,通过服务地址的方式提供服务。负载均衡实例的所有后端ECS停止,但负载均衡实例本身服务幵未停止,当有请求发生时,入流量还是会到负载均衡的服务地址,负载均衡健康检查发现后端没有可用的ECS实例,会迕行响应
对于四局负载均衡服务,响应的仅是三次握手的包。对于七局负载均衡服务,由于负载均衡七局服务是通过Tengine提供的,因此响应的是一个Tengine的503错误页。如果不停地有访问进来,负载均衡不停地响应,返些响应流量会被计费。 对于没有挂载ECS的负载均衡实例也是返样的情况。因此,为避免返种情况下被计费,您不使用负载均衡实例的时候,可以停止这个负载均衡实例。
按固定宽带计费
按固定带宽计费时,费用和实例状态及使用流量无关,只要开通就按固定带宽迕行计费,只有在实例被释放后才丌会被计费。
变更计费
预付费模式下,您可以变更购买实例的带宽规格,但只支持升级带宽,不支持降低带宽:单击更多>变更带宽规格。
后付费模式下,您可以在按使用流量和按公网带宽两种计费方式间切换,单击更多>变更计费方式
变更配置
负载均衡服务提供预付费(包年包月)和后付费(挄量付费)两种购买方式。
后付费实例支持挄流量计费和挄带宽计费。您可以变更后付费实例癿计费方式,计费方式癿变更会在次日零点生效。
1.8 后端服务器
在添加ECS作为后端服务器时,请注意:
负载均衡不支持跨地域部署,确保ECS实例的所属地域和负载均衡实例的所属地域相同。
负载均衡本身不会限制后端ECS实例使用哪种操作系统,只要您的两台ECS实例中的应用服务部署是相同的且保证数据的一致性即可。建议您选择相同操作系统的ECS实例作为后端服务器,以便日后管理和维护。
一个负载均衡实例最多支持添加50个监听,每个监听对应后端ECS实例上的一个应用。负载均衡监听的前端端口对应后端ECS实例上的应用服务端口。
您可以指定后端服务器池内各ECS实例的转发权重。权重越高的ECS实例将被分配到更多的访问请求,您可以根据后端ECS实例的对外服务能力和情况来区别设定。 注意:如果您同时开启了会话保持功能,那么有可能会造成对后端应用服务器的访问并不是完全相同的。如果出现了访问不均衡的情况,建议您可以暂时关闭会话保持功能,观察一下是否依然存在这种情况。
1.9 管理后端服务器
负载均衡服务通过设置虚拟服务地址,将添加的同一地域的多台ECS实例虚拟成一个高性能、高可用的应用服务池。
默认后端服务器是在实例维度上维护的,即负载均衡实例下的所有监听都只能够将流量转发到相同服务器的相同端口上。 您也可以通过服务器组的方式添加ECS。不同的监听可以关联不同的服务器组,这样一个负载均衡实例的不同监听就可以将请求转发给不同的服务器组内不同端口的ECS。
注意:如果您在配置监听时,选择使用服务器组,那么该监听会将请求转发到关联的服务器组中的ECS,而不会再将请求转发给后端服务器池中的ECS。
1.10 添加后端服务器
单击目标ECS实例对应的添加,或者勾选多个目标ECS实例,然后单击页面下方的批量添加。
注意: ECS实例的网络类型要和该负载均衡实例的类型匹配。
经典网络的公网负载均衡实例,可添加经典网络类型的ECS或者同属于同一VPC的ECS;
专有网络的私网负载均衡实例,仅能添加和负载均衡实例相同VPC内的ECS;
经典网络的私网负载均衡实例,仅能添加经典网络类型的ECS。
创建虚拟服务器组
使用限制
虚拟服务器组只能添加监听所在地域的后端服务器。
一个后端服务器可以属于多个虚拟服务器组。
一个虚拟服务器组可绑定在一个实例的多个监听上。
虚拟服务器组由服务器+端口组成。
1.11 监听配置
负载均衡提供四层(TCP/UDP协议)和七层(HTTP/HTTPS协议)监听,
选择您要使用的服务器组类型:
虚拟服务器组:一个虚拟服务器组(VServer group)由多个后端服务器组成,且后端服务器的端口可以不同。您可以为不同的监听配置不同的虚拟服务器组,这样就可以将请求转发至不同的后端服务器。详情参考创建虚拟服务器组。
主备服务器组:一个主备服务器组由两台后端服务器组成,即一台主服务器,一台备服务器。当您有传统的主备需求时,可以使用主备服务器组。当主机工作正常时,将流量转发至主服务器;当主机宕机时,会将流量转发至备服务器,避免服务中断。
1.12 健康检查机制
HTTP/HTTPS监听
针对七层(HTTP或HTTPS协议)监听,健康检查通过HTTP HEAD探测来获取状态信息,
如下图所示。 对于HTTPS监听,证书在负载均衡系统中进行管理。负载均衡与后端ECS之间的数据交互(包括健康检查数据和业务交互数据),不再通过HTTPS进行传输,以提高系统性能。
七层监听的检查机制如下:
Tengine节点服务器根据监听的健康检查配置,向后端ECS的内网IP+【健康检查端口】+【检查路径】发送HTTP HEAD请求(包含设置的【域名】)。
后端ECS收到请求后,根据相应服务的运行情况,返回HTTP状态码。
如果在【响应超时时间】之内,Tengine节点服务器没有收到后端ECS返回的信息,则认为服务无响应,判定健康检查失败。
如果在【响应超时时间】之内,Tengine节点服务器成功接收到后端ECS返回的信息,则将该返回信息与配置的状态码进行比对。如果匹配则判定健康检查成功,反之则判定健康检查失败。
TCP监听
针对四层TCP监听,为了提高健康检查效率,健康检查通过定制的TCP探测来获取状态信息,如下图所示。
TCP监听的检查机制如下:
LVS节点服务器根据监听的健康检查配置,向后端ECS的内网IP+【健康检查端口】发送TCP SYN数据包。
后端ECS收到请求后,如果相应端口正在正常监听,则会返回SYN+ACK数据包。
如果在【响应超时时间】之内,LVS节点服务器没有收到后端ECS返回的数据包,则认为服务无响应,判定健康检查失败;并向后端ECS发送RST数据包中断TCP连接。
如果在【响应超时时间】之内,LVS节点服务器成功收到后端ECS返回的数据包,则认为服务正常运行,判定健康检查成功,而后向后端ECS发送RST数据包中断TCP连接。
UDP监听
针对四层UDP监听,健康检查通过UDP报文探测来获取状态信息,如下图示。
UDP监听的检查机制如下:
LVS节点服务器根据监听的健康检查配置,向后端ECS的内网IP+【健康检查端口】发送UDP报文。
如果后端ECS相应端口未正常监听,则系统会返回类似返回 “port XX unreachable”的ICMP报错信息;反之不做任何处理。
如果在【响应超时时间】之内,LVS节点服务器收到了后端ECS返回的上述错误信息,则认为服务异常,判定健康检查失败。
如果在【响应超时时间】之内,LVS节点服务器没有收到后端ECS返回的任何信息,则认为服务正常,判定健康检查成功。
1.13 设置白名单访问控制
白名单是一种访问控制方式,可以为负载均衡监听设置仅允许哪些IP访问,适用于应用只允许特定IP访问的场景。
1个评论
深度好文