《360网络负载平衡系统》要点:
本文介绍了360网络负载平衡系统,希望对您有用。如果有疑问,可以联系我们。
LVS(linux virtual server)作用一种通用的,性能强大的负载均衡技术,承接着奇虎360绝大多数的业务流量,今天我们邀请到了360公司系统部的张志强锅锅,为我们介绍介绍一下lvs在360的部署和新功能特性.
Lvs(linux virtual server)作用一种通用的,性能强大的负载均衡技术,承接着奇虎360绝大多数的业务流量,其中包括360搜索、网站卫士、花椒直播等核心业务.随着接入业务增多,对这一基础设施的性能、稳定性以及扩展性也提出了越来越多的要求,为适应公司逐步发展壮大的业务需求,经过6年多的发展360 lvs平台在部署和新功能特性方面也有了日新月异的发展.
Linux开源的lvs系统目前主要有NAT、TUNNEL、DR三种模式,各有其优缺点.
比如说DR和NAT模式要求realserver和LVS在同一个vlan中,导致部署成本过高,不可跨网段部署,且realserver端需要配置VIP等信息在大批量配置是较为繁琐.
TUNNEL模式虽然可以跨VLAN,但realserver需要部署ipip模块、绑定VIP以及配置arp_filter等操作,网络拓扑上需要联通外网,较复杂不易维护.
为了解决解决上述问题,我们在LVS上研发了一种新的转发模式:FUULNAT.
该模式与NAT模式的主要的区别是:
在packet IN 时,除了做DNAT还做SNAT ,将目标ip变为realserver ip,源ip变为内网bip(内部转发池地址),并保存对应的session信息;
在packet OUT时,通过查找之前创建的session表,重新将出方向的源ip转换为vip,目的ip 转换位客户端ip;
由于是三层通信,从而实现lvs–>realserver间可以跨网络vlan通信.为提供较好的网络负载能力,并充分利用网卡多队列特性,lvs服务器专门提供一个C的内部bip地址用于和后端realserver的通讯.
但这种模式的缺点是屏蔽了真实的客户端地址信息,使得realserver端无法获取真实的客户端IP信息,为此我们在地址转换时会将真实客户端ip保存到tcp协议的option字段中,并提供了ttm模块用于用户在realserver端获取到真实的客户端ip信息.
该模式在满足用户需求的基础上,实现了跨网段部署,并简化了realserver端的配置,作为公司目前主流的部署方式,经过公司6年多的实践证明该模式在性能和可靠性方面都是值得信赖的.
FULLNAT网络转发模型如下:
图.Fullnat转发模型
图.Fullnat地址转换模型
鉴于LVS当前的主要功能是负载均衡和失败冗余,不能对flood类型的包攻击进行防护,导致攻击流量会被转发到后端RS上,而RS对此类攻击的防护工作TCP层,防护效率不高,同时大流量的包转发也会大大消耗LVS机器的CPU,影响LVS的正常工作.
为了解决上述问题, 我们采取了以下两个措施:
增加攻击防护功能
在LVS上增加一种攻击防护功能:Syn-Proxy,该功能借鉴TCP的syn-cookie机制,代理Client和RS之间的TCP连接握手过程,在与Clinet三次握手完成后,才去和RS建立连接,从而实现对synflood攻击的防御;
采用“session不存在直接丢弃”的策略
采用“session不存在直接丢弃”的策略,实现了对ack/fin/rst 其它TCP标志位攻击的防御;
经过上述两种策略使得上述情况的异常数据包不会达到realserver那一层就被丢弃了,而lvs服务器各方面性能是要强于realserver的,并且synproxy在syn flood攻击的情况下可以有效的减少新建session的开销,所以可以有效的保证业务的正常运行.
作为信息统计和分析的重要信息来源之一,源地址透传一直是业务方强烈要求的一项功能.利用TCP协议的option字段存放真实源地址信息,并在rs端提供对应的模块用于解析到真实的客户端地址,因此FULLNAT模式对TCP协议的源地址透传功能提供了很好的支持.
不过,UDP作为一种不可靠传输协议,是没有提供对应的字段用于保存私有信息的,所以TCP的那套方式在UDP是无法工作的.为解决该问题,我们提出了一种新的lvs tunnel模式,与传统tunnel模式的不同之处在于,出入方向的数据包都会经过lvs服务器,realserver端只需加载定制的ipip模块即可,不需要在其上绑定vip,设置对应设备的arp_filter等操作,简化了大批量部署的复杂性,且通过ipip tunnel天然的解决了真实客户端透传功能.
数据包转发模型如下:
图.新型lvs tunnel模型
当数据包到达lvs服务器是创建session保留连接信息,内层数据包做DNAT将目的地址转换成rs地址,外层添加ipip头,源目的地址分别为bip和realserver地址.realserver收到数据包后解封外层ipip头并创建session保留连接信息,回包时再根据之前的session信息添加外层ipip头,使得目的地址指向lvs服务器;Lvs服务器收到数据包之后去除外层头,并将源地址NAT为vip地址转发给客户端.
目前大多数机房lvs服务器的部署方式如下,一个集群中多台lvs服务器,每台服务器上行通过ospf协议连接到外网核心,向其通告vip信息.下行直连内网核心,用于与后端rs之间通信.这种方式保证了lvs服务器之间已经realserver之间服务的冗余性.
图. lvs 部署架构
图.lvs 部署新架构
该方式在负载均衡和冗余性方面都得到了有效的提升.
lvs作为公司的重要基础设施,360 LVS团队经过多年的摸索,在功能特性、安全、稳定性以及环境部署、运维、问题定位分析方面都积累了许多弥足珍贵的经验,满足业务不断升级变化的需求.
文章来自微信公众号:HULK一线技术杂谈
转载请注明本页网址:
http://www.vephp.com/jiaocheng/4155.html