首页 » 开发 » 阿里云大学:超大流量网站负载均衡的原理和实现学习笔记

阿里云大学:超大流量网站负载均衡的原理和实现学习笔记

 

为什么要实现负载均衡
网络业务增长,越来越多的流量要处理
大部分网站24小时都需要运作
服务器的处理速度和内存增长速度低于宽带和服务的增长
单机模式,导致网络会不稳定(云)

两种方式
向上拓展:单服务器能力提升
向外拓展:服务器数量提升

概念示意:
人工坐席忙的解决办法,通过400的服务,进行分配到不同的客服。
负载均衡也是一样的,用一个负载分配的服务来让多个服务器帮忙处理网络请求
001.jpg
002.jpg

云负载均衡的使用。
云负载均衡就是将原来的负载均衡器以服务的方式提供给用户。
随开随用,但是应该只能用于阿里云自家的。,。
003.jpg

和传统的对比
拓展性:云上随时更换,反应速度快,传统的硬件更换,反应速度慢。
安全性:公有云永远比私有云不安全,但是成本确实极小
成本:云上按量付费,可以有效减少企业现金支出,保护现金流。传统的需要一次配齐,而且需要专业人员,公司现金流挑战很大。
灵活:云上只能用自家的服务器,自己搭建可以随便用。
004.jpg

阿里云的服务叫slb
使用场景:和ecs结合使用。
公网实例和私网实例。可以搭建微服务的架构
005.jpg
后端服务器只能用于ecs

云负载均衡的基本方案:
支持公网/私网类型的负载均衡服务:
公网:slb的访问地址是公网的ip。需要被用户外部访问的时候,使用。
私网:只能用于阿里云内部产品的访问,针对某个内部服务使用这个

流量分发支持4层 tcp/udp 和7层 http/https 这两个不能一起用。
流量调度:slb接收到请求后,以什么样的方式将请求转发给后端服务器。目前支持加权轮询 和加权最小连接数
加权轮询wrr:依次转发给后端
加权最小连接数wlc:当前连接数最小的服务器分配给用户

会话保持:相同的请求,会让相同的后端来服务。在session的生命周期内,可以将同一客户端请求转发到同一台后端ecs上。
健康检查:自动屏蔽异常状态的后端。

转发方式的工作原理:
006.jpg

会话保持和权重设置的工作原理
007.jpg
四层看ip。七层看cookie
权重越高,分发的量越高。适合大服务器和小服务器一起使用的情况。

下面就是操作了。
slb基础架构
008.jpg
使用负载均衡时候的注意事项
009.jpg

下面是阿里云提供的试验手册

1.1 背景知识

阿里云负载均衡

简介

负载均衡(Server Load Balancer)是将访问流量根据转发策略分发到后端多台 ECS 的流量分发控制服务。负载均衡可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。

架构

负载均衡服务主要有三个核心概念:

1)LoadBalancer:负载均衡实例。

2)Listener:用户定制的监听器,定义了负载均衡策略和转发规则。

3)BackendServer:后端的一组ECS。

特点

1)负载均衡服务通过设置虚拟服务地址(IP),将位于同一地域(Region)的多台云服务器(Elastic Compute Service,简称ECS)资源虚拟成一个高性能、高可用的应用服务池;根据应用指定的方式,将来自客户端的网络请求分发到云服务器池中。

2)负载均衡服务会检查云服务器池中ECS的健康状态,自动隔离异常状态的ECS,从而解决了单台ECS的单点问题,同时提高了应用的整体服务能力。在标准的负载均衡功能之外,负载均衡服务还具备TCP与HTTP抗DDoS攻击的特性,增强了应用服务器的防护能力。

3)负载均衡服务是ECS面向多机方案的一个配套服务,需要同ECS结合使用。

阿里云负载均衡健康检查

简介

负载均衡通过健康检查来判断后端 ECS 上的业务可用性。用户开启健康检查功能后,当后端某台 ECS 健康检查出现异常时,负载均衡会自动将新的请求分发到其它健康检查正常的 ECS 上;而当该 ECS 恢复正常运行时,负载均衡会将其自动恢复到对外或对内的服务中。
负载均衡健康检查机制提高了前端业务整体可用性,避免了后端 ECS 异常对总体服务的影响。
如果用户业务对负载有高敏感性,高频率的健康检查探测可能会对用户正常业务访问造成影响。用户可以结合业务情况,通过降低健康检查频率、增大健康检查间隔、7层检查修改为4层检查等方式,来降低对业务的影响。但为了保障业务的持续可用,不建议关闭健康检查。

处理原理

负载均衡通过健康检查来探测后端 ECS 的可用性。开启健康检查功能后,当后端某个 ECS 健康检查出现异常时,来自 Client 的新请求将不会再被转发到该 ECS,直到健康检查检测到该 ECS 上业务恢复正常。

LVS 集群或 Tengine 集群内的相关节点服务器同时承载了数据转发及健康检查职责。

当前集群服务器 IP 段为负载均衡系统IP地址段包括:10.159.0.0/16,10.158.0.0/16,10.49.0.0/16、100.109.0.0/16和100.97.0.0/16。如果后端 ECS 启用了 iptables 等访问控制,需要在内网网卡上针对上述 IP 段做访问放行。

根据负载均衡转发策略,客户端相关访问请求被均分到 LVS 集群内不同服务器(如果是 7 层服务,则如前述说明所述,相关请求被进一步转发到 Tengine 集群)。

LVS 集群内不同服务器分别【独立、并行的】根据负载均衡策略进行数据转发和健康检查操作。

如果某一台 LVS 节点服务器对后端某一台 ECS 健康检查失败,则该 LVS 节点服务器将不会再将新的客户端请求分发给相应的异常 ECS 服务器;LVS 集群内所有服务器同步进行该操作,相互之间没有关联及影响。

7层服务健康检查机制(HTTP或HTTPS协议)

对7层(HTTP或HTTPS协议)服务,负载均衡的健康检查通过 HTTP HEAD 探测来获取状态信息。相关机制如下图所示:
注:使用 HTTPS 协议时,证书在负载均衡上完成处理后完结。负载均衡与后端ECS之间的数据交互(包括健康检查数据和业务交互数据),不再通过 HTTPS 进行传输,以提高系统性能。

使用说明如下:

1)Tengine 节点服务器根据负载均衡实例健康检查属性设置,向后端 ECS 的内网 IP+【健康检查端口】+【检查路径】发送 HTTP HEAD 请求(包含【域名】属性)。
2)后端 ECS 服务器收到请求后,根据相应服务的运行情况,返回 HTTP 状态码。
3)如果在【响应超时时间】之内,Tengine 节点服务器没有收到后端 ECS 返回的上述信息,则认为服务无响应,判定健康检查失败。
4)如果在【响应超时时间】之内,Tengine 节点服务器成功接收到后端 ECS 返回的上述信息,则将该返回信息与【正常状态码】属性所勾选的状态码进行比对。如果匹配则判定健康检查成功,反之则判定健康检查失败。
5)健康检查间隔和重试次数根据相应负载均衡实例属性设置进行相应设定。

策略配置

用户可以通过控制台或 API 设置负载均衡服务监听的健康检查策略。当前健康检查可选方式包括 TCP、UDP 和 HTTP(注:HTTPS协议采用 HTTP 方式进行健康检查),不同检查方式下支持的策略属性有所不同。通过管理控制台配置如下图:

1)域名:只有 HTTP 检查方式时才有。非必填属性。配置后,负载均衡会将相应值以 domain 属性传递到后端服务器,以便后端服务器结合该值来配置域名访问控制。没有填写时,默认使用各后端服务器的内网 IP 为域名进行传递。

2)检查端口:非必填属性。健康检查服务访问后端时的探测端口。默认值为服务监听配置时的【后端协议 [端口]】。

3)检查路径:只有 HTTP 检查方式时才有。非必填属性。用于手工指定健康检查页面文件的 URI,建议对静态页面进行检查。默认值为根目录“/”。

4)响应超时时间: 必填属性。健康检查响应的最大超时时间,输入范围 1-300 秒,默认为 5 秒。后端 ECS 在相应时间内没有正确响应,则判定为健康检查失败。

5)健康检查间隔:必填属性。进行健康检查的时间间隔; 输入范围 1-50 秒,默认为 2 秒。、注:如前文所述,LVS 集群内所有节点,都会独立、并行的遵循该属性去对后端 ECS 进行定期健康检查。由于各 LVS 节点的检查时间并不同步,所以,如果从后端某一 ECS 上进行单独统计,会发现来自负载均衡的健康检查请求在时间上并不会遵循上述时间间隔。

6)不健康阈值:必填属性。表示同一 LVS 节点服务器针对后端同一 ECS 服务器,从成功到失败的【连续】健康检查失败次数。可选值 2~10,默认为 3 次。

7)健康阈值:必填属性。表示同一 LVS 节点服务器针对后端同一 ECS 服务器,从失败到成功的【连续】健康检查成功次数。可选值 2~10,默认为 3 次。

8)正常状态码: 只有 HTTP 检查方式时才有。非必填属性。指定用户判断健康检查正常的 HTTP 状态码。可选值为 http_2xx、http_3xx、http_4xx、http_5xx,可多选。默认情况或不做任何选择时,值置为 http_2xx。

问1:将停止的那台ECS重新开启,然后访问负载均衡的IP地址,观察访问的结果。为什么会这样呢?

答:因为负载均衡中依然开启了会话保持,所以请求会被转发到某一台ECS上(在规定的会话保持时间内)。

问2:如果两台ECS在不同的可用区,能否加载到负载均衡后端?若在不同地域呢?

答:负载均衡后端的服务器要求在同一地域,但可以在不同可用区。

问3: 如果需要对负载均衡后端的某台ECS实例A中的应用服务器进行升级,如何在不影响用户使用的前提下,平滑升级?

答:将需要升级的ECS的权重修改为0,请求即不会转发到该ECS上,然后进行升级;升级完成后重新修改它的权重。

原文链接:阿里云大学:超大流量网站负载均衡的原理和实现学习笔记,转载请注明来源!

0