负载均衡(SLB)高可用是从系统设计、产品配置等多个方面提供了可用性保障。此外,您可以根据业务需求,配合使用云解析DNS等产品实现跨地域容灾。
SLB系统的高可用
负载均衡实例采用集群部署,可实现会话同步,以消除服务器单点故障,提升冗余,保证服务的稳定性。其中四层负载均衡通过LVS(Linux Virtual Server)+ keepalived的方式实现,七层负载均衡通过Tengine(淘宝网发起的Web服务器项目,在Nginx的基础上,针对有大访问量的网站需求进行了优化)实现。
来自公网的请求通过等价多路径路由(ECMP)到达LVS集群,LVS集群内的每台LVS通过组播报文将会话同步到该集群内的其它LVS机器上,从而实现LVS集群内各台机器间的会话同步。同时,LVS集群会对Tengine集群进行健康检查,将异常机器从Tengine集群移除,保证七层负载均衡的可用性。
最佳实践:
会话同步可以保证长连接不受集群内服务器故障的影响,但是对于短连接或连接未触发会话同步规则时(未完成三次握手),集群内的服务器故障仍可能会影响用户请求。为了防止集群中某台机器故障导致的会话中断,您可以在业务逻辑中加入重试机制,降低对用户访问造成的影响。
单SLB实例的高可用
为了向广大用户提供更稳定可靠的负载均衡服务,阿里云负载均衡已在大部分地域部署了多可用区以实现同地域下的跨机房容灾。当主可用区出现故障或不可用时,负载均衡有能力在非常短的时间内(约30秒)切换到备可用区并恢复服务;当主可用区恢复时,负载均衡同样会自动切换到主可用区提供服务。
说明 负载均衡的主备可用区是可用区级别的容灾。只有当主可用区整体不可用时,如机房整体断电、机房出口光缆中断等,负载均衡才会切换到备可用区。而并非某个实例出现故障,就切换到备可用区。
最佳实践:
- 为了更好的利用负载均衡的主备可用区机制,建议您在支持主备可用区的地域创建负载均衡实例,即在购买负载均衡实例时选择可用区类型为多可用区的地域。
- 当您选择SLB的主备可用区时,可以根据ECS实例的可用区分布进行选择。大部分ECS实例位于哪个可用区,就将哪个可用区选择为SLB的主可用区,以获取最小的访问延迟。
但是并不建议您将全部ECS实例都部署在一个可用区内,您也需要在SLB的备可用区部署少量ECS实例,以便在极端情况下(主可用区整体不可用时),切换到备可用区后仍旧可以正常处理负载均衡转发的请求。
多SLB实例的高可用
如果您对可用性的要求特别高,负载均衡实例自身的可用性保障机制可能无法满足您的需求。例如当网络攻击或配置错误等情况导致负载均衡实例不可用时,由于未出现可用区级故障,不会触发负载均衡实例的可用区切换。此时,您可以创建多个SLB实例,通过云解析DNS对访问进行调度,或通过全球负载均衡解决方案实现跨地域容灾备份。
最佳实践:
您可以在一个地域内的多个可用区或多个地域内部署负载均衡实例和后端ECS实例,然后使用云解析DNS对访问进行调度。
后端ECS实例的高可用
负载均衡通过健康检查来判断后端ECS实例的可用性。健康检查机制提高了前端业务整体可用性,避免了后端ECS异常对总体服务的影响。
开启健康检查功能后,当后端某个ECS实例健康检查出现异常时,负载均衡会自动将新的请求分发到其他健康检查正常的ECS实例上;而当该ECS实例恢复正常运行时,负载均衡会将其自动恢复到负载均衡服务中。关于健康检查的详细机制,请参见健康检查介绍 。
最佳实践:
为了使健康检查功能正常运作,您需要开启并正确配置健康检查。具体的操作流程请参见配置健康检查 。