目录
1 背景
随着云计算和网络技术的不断发展,越来越多的业务有着上云的需求。上云后,业务能够使用云上已有的服务提升开发效率,也可以利用云平台的弹性伸缩特性,及时应对业务的负载变化。实际生产环境中,用户的服务一部分部署在云平台上,另一部分部署在自己的IDC机房。用户有从VPC访问IDC中服务的需求,且IDC内的服务需要支持负载均衡。为了实现IDC的平滑上云,必须打通VPC网络到IDC机房经典网络间的互联互通,其中最核心的设备是VXLAN网关,用来完成VXLAN网络和VLAN网络间的映射。虽然可以通过交换机完成VXLAN到VLAN的转换,但是业务的负载均衡需求无法满足。因此,360虚拟化团队根据业务需求,决定自研CLOUD-DPVS设备支持负载均衡、VXLAN隧道、BFD探活等功能,来实现VPC网络到IDC网络的互联互通。
2 CLOUD-DPVS网关整体架构
CLOUD-DPVS工作在VXLAN网络和VLAN网络的中间层,来自VPC网络的用户请求被引流到CLOUD-DPVS网关,进行VXLAN解封装和SNAT/DNAT处理后,请求被发送至IDC内服务所在的机器上。回包同样会经过CLOUD-DPVS进行SNAT/DNAT后,进行VXLAN封装发送至VPC。
2.1 CLOUD-DPVS网关整体架构选型
为了满足高性能,多主部署和负载均衡等需求,360虚拟化团队在经过调研后决定在DPVS的基础上进行开发。
DPVS是一个基于DPDK软件库加速LVS的高性能负载均衡器,通过使用网卡用户态驱动、零拷贝、大页内存和队列绑定等技术解决了LVS的性能瓶颈,同时保留LVS的负载均衡逻辑。基于DPVS,我们只需要在现有逻辑的基础上增加VPC属性,支持VXLAN封装解封装等功能,就可以为每个VPC业务提供虚拟IP来访问IDC内的服务。选型完成后随即启动了cloud-dpvs的项目,其核心架构如下:
3 CLOUD-DPVS网关方案概述
3.1 高可用方案的改进
传统的高可用方案大都采用 BGP+ECMP 的模式构建集群,用 ECMP 将数据包散列到集群中各个节点上,通过 BGP 协议保证单台机器故障后将这台机器的路由动态剔除出去,由此做到了动态 failover,组网结构如下图所示:
服务器通过 BGP 将 VIP 发布到网络中,交换机学习到 VIP,形成 BGP 等价多路径路由(ecmp),然后根据哈希因子计算得到 hash lb key,进行 ECMP 下一跳链路数(Member-count)求余计算,再与 ECMP 基值进行加法运算得出转发下一跳 index,即确定了下一跳转发路由到达服务器。
这种方式要求服务器必须部署在三层网络中,需要与交换机建立BGP连接。另外服务器集群出现问题后,其恢复时间受限于BGP协议的收敛时间,这个时间值一般是秒级,根据以往在现网环境中的经验,集群的收敛时间一般在6~9秒左右。
为了提高收敛时间和减少对环境的依赖,360虚拟化团队对上面提到的两点进行了改进,引入BFD协议将收敛时间减少到毫秒级别,并在VPC网络中增加调度器使其不再依赖底层网络就可以把流量hash到各台服务器上。