负载均衡(Server Load Balancer,下文简称 SLB)的引入,可以降低单台云服务器 ECS(下文简称 ECS)出现异常时对业务的冲击,提升业务的可用性。同时,结合弹性伸缩服务,通过动态调整后端服务器,可以快速对业务进行弹性调整(扩容或缩容),以快速应对业务的发展。
https://developer.aliyun.com/article/272277
SLB功能介绍 SLB(Server Load Balance)服务通过设置虚拟服务地址(IP),将位于同一地域(Region)的多台云服务器(Elastic Compute Service,简称ECS)资源虚拟成一个高性能、高可用的应用服务池;再根据应用指定的方式,
https://developer.aliyun.com/article/1803
整个SLB系统由3部分构成:四层负载均衡,七层负载均衡 和 控制系统,如下图所示;
四层负载均衡,采用开源软件LVS(linux virtual server),并根据云计算需求对其进行了定制化;该技术已经在阿里巴巴内部业务全面上线应用2年多详见第3节;
七层负载均衡,采用开源软件Tengine;该技术已经在阿里巴巴内部业务全面上线应用3年多;参见第4节;
控制系统,用于 配置和监控 负载均衡系统;
LVS是全球最流行的四层负载均衡开源软件,由章文嵩博士(当前阿里云产品技术负责人)在1998年5月创立,可以实现LINUX平台下的负载均衡。
LVS是 基于linux netfilter框架实现(同iptables)的一个内核模块,名称为ipvs;其钩子函数分别HOOK在LOCAL_IN和FORWARD两个HOOK点,如下图所示;
在云计算大规模网络环境下,官方LVS存在如下问题;
问题1:LVS支持NAT/DR/TUNNEL三种转发模式,上述模式在多vlan网络环境下部署时,存在网络拓扑复杂,运维成本高的问题;
问题2:和商用负载均衡设备(如,F5)相比,LVS缺少DDOS攻击防御功能;
问题3:LVS采用PC服务器,常用keepalived软件的VRRP心跳协议进行主备部署,其性能无法扩展;
问题4:LVS常用管理软件keepalived的配置和健康检查性能不足;
为了解决上述问题,我们在官方LVS基础上进行了定制化;
解决1:新增转发模式FULLNAT,实现LVS-RealServer间跨vlan通讯;
解决2:新增synproxy等攻击TCP标志位DDOS攻击防御功能,;
解决3:采用LVS集群部署方式;
解决4:优化keepalived性能;
注1:ali-LVS开源地址https://github.com/alibaba/LVS;
3.1 FULLNAT技术
FULLNAT实现主要思想:引入local address(内网ip地址),cip-vip转换为lip->rip,而 lip和rip均为IDC内网ip,可以跨vlan通讯;
IN/OUT的数据流全部经过LVS,为了保证带宽,采用万兆(10G)网卡;
FULLNAT转发模式,当前仅支持TCP协议;
负载均衡由以下三个部分组成:
负载均衡实例 (Server Load Balancer instances)
一个负载均衡实例是一个运行的负载均衡服务,用来接收流量并将其分配给后端服务器。要使用负载均衡服务,您必须创建一个负载均衡实例,并至少添加一个监听和两台ECS实例。
监听 (Listeners)
监听用来检查客户端请求并将请求转发给后端服务器。监听也会对后端服务器进行健康检查。
后端服务器(Backend Servers)
一组接收前端请求的ECS实例。您可以单独添加ECS实例到后端服务器池,也可以通过虚拟服务器组或主备服务器组来批量添加和管理。
https://help.aliyun.com/document_detail/27539.html?spm=5176.11065259.1996646101.searchclickresult.7cad3865V4Rx0Q
https://help.aliyun.com/document_detail/119800.html?spm=5176.11065259.1996646101.searchclickresult.7cad3865V4Rx0Q
Step1:创建负载均衡实例。负载均衡实例是一个运行的负载均衡服务实体。 Step2:添加监听和后端服务器。配置负载均衡实例,添加监听规则和后端服务器。 Step3:域名解析(可选)。使用云解析服务将一个域名解析到SLB服务地址上,提供服务。 Step4:删除负载均衡实例。如果您不需要SLB服务了,为避免不必要计费,可以将其删除。
软件化的负载均衡在此时应运而生,典型的如LVS和Nginx,LVS主要负责四层的负载均衡,Nginx主要负责七层的负载均衡。其中LVS使用Linux内核集群实现负载均衡服务器。应用范围比较广,因为其工作在4层,所以它几乎可以对所有应用做负载均衡,包括http、数据库、在线聊天室等等;Nginx工作在七层,可针对http做分流策略,适合轻量级的Web 服务
软件化的负载均衡让客户可以灵活的部署并且调整业务,但是由于这些大部分还是客户自己部署的,因此客户在部署的时候还是要去考虑和硬件性能的配套,性能难以扩展,同时负载均衡本身可靠性方案的部署,后续的功能和容量的扩展等问题都需要去思考兼顾,无法做到真正的随心所欲部署。
https://www.sohu.com/a/417054284_612370
https://ld246.com/article/1487689995537
https://iziyang.github.io/2020/04/12/5-nginx/