技术架构
如下图所示,整个负载均衡系统由三部分构成:四层负载均衡、七层负载均衡和控制系统。
四层负载均衡:采用开源软件LVS(Linux Virtual Server)构建,并根据云计算需求对其进行了定制和优化。
七层负载均衡:采用开源软件Tengine构建。
控制系统:用于配置和监控负载均衡系统。
LVS技术概述
LVS是全球最流行的四层负载均衡开源软件,可以实现Linux平台下的负载均衡。
LVS是基于LinuxNetfilter框架实现的一个内核模块。IPTables是基于Netfilter基本架构实现的一个可扩展的数据报高级管理系统或核外配置工具,名称为IPVS。其钩子函数分别HOOK在LOCAL_IN和FORWARD两个HOOK点,如下图所示。
阿里云的四层负载均衡针对LVS的一些问题进行了定制和优化,如下表所示。
问题 | LVS | 阿里云四层负载均衡优化[/td] |
[td]问题1[/td] [td]LVS支持NAT/DR/TUNNEL三种转发模式。上述模式在多VLAN网络环境下部署时,网络拓扑复杂,运维成本高。[/td] [td]新增转发模式FULLNAT,实现LVS-RealServer间跨VLAN通讯。[/td] |
[td]问题2[/td] [td]和商用负载均衡设备(如F5等)相比,LVS缺少DDOS攻击防御功能。[/td] [td]新增了SYNPROXY等TCP标志位DDoS攻击防御功能。[/td] |
[td]问题3[/td] [td]LVS采用PC服务器,常用Keepalived软件的VRRP心跳协议进行主备部署,其性能无法扩展。[/td] [td]采用LVS集群方式部署。[/td] |
[td]问题4[/td] [td]LVS常用管理软件Keepalived的配置和健康检查性能不足。[/td] [td]对Keepalived的性能进行了优化。[/td] |
阿里云LVS开源地址:
https://github.com/alibaba/LVS
FULLNAT技术概述
FULLNAT主要实现方式为:
- 引入local address(内网IP地址)。cip-vip转换为lip-rip,而lip和rip均为IDC内网IP,可以跨VLAN通讯。
- IN/OUT的数据流全部经过LVS,为了保证带宽,采用万兆(10G)网卡。
- FULLNAT转发模式,当前仅支持TCP协议。
SYNPROXY技术概述
LVS针对TCP标志位DDoS攻击,采取如下策略:对于SYN flood类型攻击,利用SYNPROXY模块进行防御。
参照Linux TCP协议栈中SYN cookie的思想,LVS代理TCP三次握手。代理过程如下图所示。
Client发送SYN包给LVS。
LVS构造特殊SEQ的SYN ACK包给Client。
Client回复ACK给LVS。
LVS验证ACK包中ack_seq是否合法。
如果合法,则LVS再和RealServer建立三次握手。
集群部署方式
LVS集群部署方式实现的主要方式为:
- LVS和上联交换机间运行OSPF协议。
- 上联交换机通过ECMP等价路由,将数据流分发给LVS集群。
- LVS集群再转发给业务服务器。
集群方式部署极大地保证了异常情况下,负载均衡服务的稳定性:
- 健壮性:LVS和交换机间运行OSPF心跳。一个负载均衡IP配置在集群的所有LVS上。当一台LVS不可用时,交换机会自动发现并将其从ECMP等价路由中剔除。
可扩展性:如果当前LVS集群无法支撑某个负载均衡IP的流量时,LVS集群可以进行水平扩容。
Keepalived优化
阿里云在负载均衡中针对LVS管理软件Keepalived进行了全面优化,主要包括:
- 优化了网络异步模型,select方式改为epoll方式。
- 优化了reload过程。
阿里云四层负载均衡特点
综上所述,基于LVS的四层负载均衡具有如下特点:
- 高可用:LVS集群保证了冗余性,无单点。
- 安全:LVS自带攻击防御+云盾,提供了接近于实时防御的能力。
- 健康检查:负载均衡对后端ECS实例进行健康检查,自动屏蔽异常状态的ECS实例,待该ECS实例恢复正常后自动解除屏蔽。
Tengine技术概述
Tengine是阿里巴巴发起的Web服务器项目,是当前最流行七层负载均衡开源软件之一。在Nginx的基础上,针对大访问量网站的需求,Tengine添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。
Tengine开源地址:
http://tengine.taobao.org
针对云计算场景,Tengine定制的主要特性如下:
- 继承Nginx-1.4.6的所有特性,百分之百兼容Nginx的配置。
- 动态模块加载(DSO)支持。加入一个模块不再需要重新编译整个Tengine。
- 更加强大的负载均衡能力,包括一致性Hash模块、会话保持模块,还可以对后端的服务器进行主动健康检查,根据服务器状态自动上线下线。
- 监控系统的负载和资源占用,从而对系统进行保护。
- 展示对运维人员更友好的出错信息,便于定位出错机器。
- 更强大的防攻击(访问速度限制等)模块。
阿里云七层负载均衡特点
采用Tengine作为负载均衡基础模块的七层负载均衡,具有如下特点:
- 高可用:Tengine集群保证了冗余性,无单点。
- 安全:多维度的CC攻击防御能力。
- 健康检查:负载均衡对后端ECS实例进行健康检查,自动屏蔽异常状态的ECS实例,待该ECS实例恢复正常后自动解除屏蔽。
- 会话保持:支持七层会话保持功能。
- 一致性:支持一致性hash调度。