AWS云计算助手级架构师认证之ElasticLoadBalancer

        在介绍负载均衡器之前,我们先想象一个应用场景,比如说,我有一个实例,上面搭建了一个网站,当访问流量变大的时候,一个实例不能满足需求了,我们得多加几个实例让客户访问,可是万一有个实例出错了,由于不想影响用户体验,所以我们是不希望有人访问到这个出错的实例上的,或者有的实例有很多人访问,可是有的实例却没人访问,就很不均衡。这时候利用负载均衡器能够高效的管理所有的实例,更方便的分配实例之间的流量。

        负载均衡器有外部负载均衡器和内部负载均衡器之分,利用外部负载均衡器可以对从客户端外部流入实例的流量进行流量分配以及运行状况检查的管理,利用内部负载均衡器可以在私有子网内部的实例之间均衡流量。

        内部负载均衡器的一般利用场景,比如说我有个网站,使用两层架构,一层是从外部接受访问网站的流量,一层接受从网站到后台数据库的访问请求。网站这一层启动了很多的实例,有很多人来访问,使用外部负载均衡器将访问的流量平均的分配到所有正常实例上。同时这个网站使用的数据库这一层的实例,启动在私有子网中,因为后端的数据库没有必要向外部开放,所以就放在私有子网中,只接受从网站来的访问请求就可以了,当从网站上来的访问请求过多的时候,需要启动多个数据库实例来承担数据请求的负载,这时我们就需要使用内部负载均衡器把这些从网站到数据库的流量平均分配给各个数据库的实例。内部负载均衡器是不对外部开放的,只路由私有子网间的流量。

        负载均衡器不可以跨区域,可以跨可用区,即可以在多个可用区之间均匀分配流量。要在所有可用区中的所有注册实例间平均分配流量,需要在负载均衡器上启用跨可用区区域负载均衡。要提高负载均衡器的可用性,就选择多个公有子网。比如某个区域内发生了自然灾害,其中的1个可用区数据中心被毁坏,如果配置的时候选择了多个可用区,那么ELB会将流量路由到其他能够正常使用的可用去上,来保证系统的可用性。

        负载均衡器能够在多个可用区中的多个目标 (例如 EC2 实例) 间分配应用程序的传入流量。他的主要作用就是均衡地将流量分到该均衡器相关联的主机实例上。

        ELB还能通过通过健康检查判断相关联的实例是否能够接受流量,当ELB相关联的EC2实例变得Unhealthy不健康时,ELB会拒绝向不健康的实例上分配流量。

        当ELB和实例关联并且实例能够在ELB中正常运行之后,ELB会生成自己的DNS记录,可以通过ELB的DNS直接访问到和该ELB相关联的所有正常实例。

        使用负载均衡器的流程是:先生成一个负载均衡器,然后向它注册我们的实例,然后负载均衡器会负责检查这些注册的实例是否是正常的,如果正常,则把从客户端收到的流量路由到这些实例上,如果不正常,会停止路由流量到该实例。当实例恢复正常状态时,负载均衡器将恢复向该实例路由流量。

        在配置ELB的时候,需要注意的几个设置:

        运行状况检查:Ping协议定义了利用哪种协议来检查,Ping端口定义了利用哪种端口,Ping路径指定默认路径下存在的文件。如果设置成HTTP协议,80端口,index.html路径的话,就是是当这个负载均衡器对ec2实例进行安全检查的时候,它会先对ec2实例的80端口ping一下,并且同时检查这个实例上是否存在index.html,主要是确认负载均衡器和ec2实例是否能够正常通信,同时检查能访问到这个文件,这个index.html文件只是一个例子,可以是任何文件,index.php或其他名字的文件,或者不检查这个文件,那么可以只选择tcp协议,这样它只检查是否可以相互通信。

        响应超时:负载均衡器在端口上向已经注册的所有实例发送一个请求,如果在这个响应超时的时间内得到一个200的响应代码,那就认为这个实例运行状况是良好的,

        运行状况检查间隔:负载均衡器会每这个间隔的时间内,向注册的所有实例发送一个请求来检查运行状况。

        不正常阈值:如果运行状况检查结果超出这个不正常阈值,那么负载均衡器会认为这个实例是不健康的,以后的流量便不会路由到这个不健康的实例上

        正常阈值:如果运行状况检查结果超出这个正常阈值,那么负载均衡器会认为这个实例是健康的,会使这个实例恢复运行,也就是说,这个负载均衡器会每30秒向所有注册的实例上发送一个运行状况检查,在2秒内如果没有接到实例返回来的正常信息,或是接受到的返回信息是异常的,那么就认为这个实例在这次的运行状况检查中失败了,如果失败的次数超过了这里设置的2两次,那么负载均衡器就认为这个实例是不健康的,流量请求就不会被发送到这个实例上。如果负载均衡器在2秒内接受到了正常的返回信息,就认为实例的运行状况检查成功了,并且成功的次数超过10次,负载均衡器就会把这个实例当作健康的,以后会接着运行这个实例。

        跨区域负载均衡:默认情况下,负载均衡器会将流量平均的分配到各个可用区上,比如说有两个可用区,一个可用区内有10个实例,另一个只有2个实例,这时负载均衡器会把流量平均的安可用区分配而不是按实例分配,每个可用区分到的流量是相同的,但各个实例上分到的自然就不同了,启用垮区域负载均衡之后呢,它会把流量平均的分配到实例上,是按照实例分配而不是按照可用区分配。

        Connection Drainning:实例可以自由的被添加到负载均衡器中,或移出去,移出去之后,这个实例就接受不到负载均衡器的流量了。当我正在通过负载均衡器访问某个实例,而这个实例由于运行状况不好,或正在被移出这个负载均衡器,那么和实例之间的数据请求就会马上断开,为了提高用户体验,可以启动这个,可以通过设置一个值,从1到3600秒,默认是300秒,就是5分钟,在这期间呢,负载均衡器会保持与这个实例之间的连接,当时间达到最大限制或数据的请求已经完成了,那么这个连接就会被断开。

        正常情况下,ELB能够对逐渐增加的流量进行操作,也就是将它们平均的分配到不同的正常实例上,但是这个过程是需要消耗时间的。如果在短时间内,预计流量会激增,建议联系AWS Support来对自己的EBL进行Prewarm一下,来应对突然增加的流量。

        当利用ELB时,它会建立两个连接,一个是从客户端到ELB的,还有一个是从ELB到运行的实例的,对于每个连接,负载均衡器管理空闲超时,当在指定时间段内没有通过连接发送任何数据时,将触发空闲超时。超过空闲超时期限后,如果没有发送或接收任何数据,负载均衡器将关闭连接。

        总结:ELB可以将从外部(或内部)接收的流量平均的分配到正在正常运行的实例上。

你可能感兴趣的:(AWS云计算助手级架构师认证之ElasticLoadBalancer)