——————————转载——————————
负载均衡种类
DNS,硬件,软件
DNS负载均衡
DNS是最简单也是最常见的负载均衡方式,一般用来实现“地理级别”的负载均衡,比如说:北方人访问北京的机房,南方人访问广州的机房,西方人访问成都的机房。DNS负载均衡的本质是DNS解析同一个域名可以返回不同的IP地址。比如说:https://www.sina.com.cn/ 在北方的用户使用时会解析成10.210.1.12(北京机房)返回,南方的用户使用时会解析成14.213.164.27返回(广州机房)。
DNS简单示意图
优点
简单、成本低:负载均衡工作交给DNS服务处理,无须自己开发或维护负载均衡设备。
就近访问,提升访问速度:DNS解析时可以根据请求来源IP,解析成距离用户最近的服务器地址,可以加快访问速度,从而到达改善性能。
缺点
更新不及时:DNS缓存的时间比较长,修改DNS陪之后,由于缓存的原因,会导致部分用户还会继续访问修改之前的地址,毫无疑问这样的访问会失败的,不仅达不到负载均衡的效果,更严重的是用户不能正常使用。
扩展性差:DNS负载均衡的控制权限不是使用者的,而是域名商那里,无法根据业务特点针对性做一些定制化功能,更别提扩展性了。
分配策略比较简单:DNS负载均衡支持的算法不多,不能区分服务器的差异,也无法感知后端服务的状态。
针对以上DNS的优缺点,也有部分公司自己实现了HTTP-DNS,即使使用HTTP协议实现一个私有的DNS系统,但是其实和上面的DNS优缺点刚刚相反。
硬件负载均衡
硬件负载均衡是通过单独的设备来实现负载均衡的功能,这类设备和路由器交换机有那么一些类似,更或者可以理解为一个用于负载均衡的基础网络设备。目前业界主要有两款硬件负载均衡:F5和A10。这类设备性能好,功能强大,但是价格可以用昂贵来形容,一般只有银行,国企等大型有钱的企业开会考虑使用此类设备,本人也只是在银行里见识过F5。至于A10没接触过就不撤了。
以下是F5负载均衡示意图:
原理:
1.客户发出服务请求到VIP
2.BIGIP接收到请求,将数据包中目的IP地址改为选中的后台服务器IP地址,然后将数据包发出到后台选定的服务器
3.后台服务器收到后,将应答包按照其路由发回到BIGIP
4.BIGIP收到应答包后将其中的源地址改回成VIP的地址,发回客户端,由此就完成了一个标准的服务器负载平衡的流程
优点
功能强大:全面支持各层级的负载均衡,支持各种负载均衡算法,支持全局负载均衡。
性能好:一般软件负载均衡能支撑10w+并发已经很不错了,但是硬件的负载均衡却可以支持100w+以上的并发。
高稳定性:因为是商业品,所以经过了良好严格的测试,经过大规模的使用,所以稳定非常高。
安全性高:硬件负载均衡设备除了能处理负载均衡以外,还具有防火墙、防DDOS攻击等效果。
缺点
价格昂贵:我记得之前银行购买F5花了上百万,据说还有更贵的,所以价格可想而知。
扩展性不好:硬件设备可以根据业务进行配置,但无法进行扩展和定制化。
软件负载均衡
软件负载均衡是通过负载均衡软件来实现负载均衡功能的。常见的负载均衡软件有LVS和Nginx。其中LVS是Linux内核的四层负载均衡,四层和七层的区别在于他们协议和灵活性的不同。Nginx是7层负载均衡,支持HTTP,E-mail协议,而LVS是四层负载均衡,所以和协议无关,基本上所有应用都可以做到,比如说:聊天、数据库等。
以下是Nginx的负载均衡简单示意图:
原理:常用的HTTP负载均衡,主要先定义一个upstream作为backend group,然后通过proxy_pass/fastcgi_pass等方式进行转发操作
以下是LVS的负载均衡简单示意图:
原理:
1.当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间
2.PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链
3.IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链
4.POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器
优点
便宜:只要每个Linux服务器,然后装上Nginx或者其他负载均衡软件
灵活:7层和4层负载均衡可以根据业务进行选择,也可以根据业务进行比较方便的扩展,比如:由于业务特殊性需要做一些定制化的功能。
缺点
性能一般:比如说一个Nginx大约能支撑5w并发
功能没有硬件负载均衡强大(这个有点牵强,毕竟价格差距在那里)
安全性远不如硬件负载均衡。