对于数据流量过大的网络中,往往单一设备无法承担,需要多台设备进行数据分流,而负载均衡器就是用来将数据分流到多台设备的一个转发器。
目前有许多不同的负载均衡技术用以满足不同的应用需求,如软/硬件负载均衡、本地/全局负载均衡、更高网络层负载均衡,以及链路聚合技术。
软件负载均衡器
什么是Nginx
Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 可以说Nginx 是目前使用最为广泛的HTTP软负载均衡器,其将源代码以类BSD许可证的形式发布(商业友好),同时因高效的性能、稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名于业界。像腾讯、淘宝、新浪等大型门户及商业网站都采用Nginx进行HTTP网站的数据分流。
Nginx的功能特点
1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构;
2、Nginx对网络的依赖比较小;
3、Nginx安装和配置比较简单,测试起来比较方便;
4、也可以承担高的负载压力且稳定,一般能支撑超过1万次的并发;
5、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,www.linuxidc.com 并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测;
6、Nginx对请求的异步处理可以帮助节点服务器减轻负载;
7、Nginx能支持http和Email,这样就在适用范围上面小很多;
8、不支持Session的保持、对Big request header的支持不是很好,另外默认的只有Round-robin和IP-hash两种负载均衡算法。
Nginx的原理
Nginx采用的是反向代理技术,代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。反向代理负载均衡技术是把将来自internet上的连接请求以反向代理的方式动态地转发给内部网络上的多台服务器进行处理,从而达到负载均衡的目的。
b.硬件负载均衡解决方案
直接在服务器和外部网络间安装负载均衡设备,这种设备我们通常称之为负载均衡器。由于专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。 一般而言,硬件负载均衡在功能、性能上优于软件方式,不过成本昂贵,比如最常见的就是F5负载均衡器。
硬件负载均衡器
什么是F5 BIG-IP
F5负载均衡器是应用交付网络的全球领导者F5 Networks公司提供的一个负载均衡器专用设备,F5 BIG-IP LTM 的官方名称叫做本地流量管理器,可以做4-7层负载均衡,具有负载均衡、应用交换、会话交换、状态监控、智能网络地址转换、通用持续性、响应错误处理、IPv6网关、高级路由、智能端口镜像、SSL加速、智能HTTP压缩、TCP优化、第7层速率整形、内容缓冲、内容转换、连接加速、高速缓存、Cookie加密、选择性内容加密、应用攻击过滤、拒绝服务(DoS)攻击和SYN Flood保护、防火墙—包过滤、包消毒等功能。
以下是F5 BIG-IP用作HTTP负载均衡器的主要功能:
①、F5 BIG-IP提供12种灵活的算法将所有流量均衡的分配到各个服务器,而面对用户,只是一台虚拟服务器。
②、F5 BIG-IP可以确认应用程序能否对请求返回对应的数据。假如F5 BIG-IP后面的某一台服务器发生服务停止、死机等故障,F5会检查出来并将该服务器标识为宕机,从而不将用户的访问请求传送到该台发生故障的服务器上。这样,只要其它的服务器正常,用户的访问就不会受到影响。宕机一旦修复,F5 BIG-IP就会自动查证应用已能对客户请求作出正确响应并恢复向该服务器传送。
③、F5 BIG-IP具有动态Session的会话保持功能。
④、F5 BIG-IP的iRules功能可以做HTTP内容过滤,根据不同的域名、URL,将访问请求传送到不同的服务器。
nginx和f5优缺点对比
基于硬件的方式(F5)
优点:
能够直接通过智能交换机实现,处理能力更强,而且与系统无关,负载性能强更适用于一大堆设备、大访问量、简单应用
缺点:
成本高,除设备价格高昂,而且配置冗余.很难想象后面服务器做一个集群,但最关键的负载均衡设备却是单点配置;无法有效掌握服务器及应用状态.
硬件负载均衡,一般都不管实际系统与应用的状态,而只是从网络层来判断,所以有时候系统处理能力已经不行了,但网络可能还来 得及反应(这种情况非常典型,比如应用服务器后面内存已经占用很多,但还没有彻底不行,如果网络传输量不大就未必在网络层能反映出来)
基于软件的方式(Nginx)
优点:
基于系统与应用的负载均衡,能够更好地根据系统与应用的状况来分配负载。这对于复杂应用是很重要的,性价比高,实际上如果几台服务器,用F5之类的硬件产品显得有些浪费,而用软件就要合算得多,因为服务器同时还可以跑应用做集群等。
缺点:
负载能力受服务器本身性能的影响,性能越好,负载能力越大。
综述:
对我们管理系统应用环境来说,由于负载均衡器本身不需要对数据进行处理,性能瓶颈更多的是在于后台服务器,通常采用软负载均衡器已非常够用且其商业友好的软件源码授权使得我们可以非常灵活的设计,无逢的和我们管理系统平台相结合。
基于DNS做的负载均衡
我们都是通过域名访问网站,而不是通过一串毫无意义的数字(IP地址),而服务器是通过IP地址对外提供服务,将域名和IP绑定急需要通过 DNS (Domain Name System,域名系统)。访问一个网址时,需要先通过DNS服务器将域名转换成服务器的IP地址,再通过IP地址访问页面,如下图所示:
在 DNS 中可以为一个域名绑定多个 IP地址,用户在请求 DNS 解析服务时,DNS 按照一定的策略返回给用户其中的一个 IP,可以按照权重轮询的策略返回,也可以按照线路返回。假设以test.coderxing.com
这个域名为例,如下图所示,我们可以根据联通、电信、国外等线路指定不同的IP地址,可以行为也可以为同一个新线路制定多个IP地址,比如中国移动的线路配置了两个不同的IP,很多商用DNS服务甚至可以按照用户所在的省份来设定 IP。
在 DNS 中有多种类型,其中 A 记录是最常用的,表示域名和直接和IP绑定,其他常用的还有 CNAME记录,表示讲一个域名和另外一个域名进行绑定,再有另外的域名解析提供IP地址;NS 记录,表示将域名的解析工作交给其他服务商解析。
基于这个特点,DNS 可以用户负载均衡,在用户的域名解析阶段,返回不同的IP地址,从而对整体流量进行分流,如下图所示:
使用 DNS 做负载均衡的好处是比较方便,成本低,不用单独维护负载均衡服务器,只需要在DNS服务商提供的后台进行配置即可,而且应用服务器的部署不受地理限制,可以在网络中的任意位置,不像传统集群要都集中在同一个机房内。
但 DNS 域名映射存在多级缓存的问题,各级缓存按照TTL时间(Time To Live,可以理解为过期时间)来刷新本地缓存,这就造成域名IP映射记录的变更不会立即成效,一旦某台应用服务器宕机,即使立即更新DNS记录也不会立即反馈到用户端。所以只是用 DNS 做负载均衡,会对服务的整体可用性带来一定的风险。所以一般大型互联网公司都回合其他后端负载均衡技术结合使用,比如 DNS最为一级负载均衡手段,后端应用服务器使用Nginx或者LVS方式作为二级负载均衡。