HAProxy前端
HAProxy是一个特别适用于高可用环境的TCP/HTTP开源的反向代理和负载均衡软件。在7层负载均衡方面的功能
很强大(支持cookie track,header rewrite等),支持双机热备,支持虚拟主机,支持健康检查(经过patch能够
支持ECV),同时还提供直观的监控页面,能够清晰实时的监控服务集群的运行情况。同时支持Linux 2.6内核中
System Epoll,经过简化系统调用,大幅的提升了网络I/O性能。web
Haproxy包括如下一些特性:
根据静态分配的cookie,分配HTTP请求。
分配负载到各个服务器,同时保证服务器经过使用HTTP Cookie实现链接保持。
当主服务器宕机时切换到备份服务器。
容许特殊端口的服务监控。
作维护时经过热配置能够保证业务的连续性,更加人性化。
添加/修改/删除HTTP Request和Response头。
经过特定表达式Block HTTP请求。
根据应用的cookie作链接保持。
带有用户验证的详细的HTML监控报告。
新的1.3版本引入了frontend,backend配置段,frontend根据任意HTTP请求头内容作规则匹配,而后把请求
定向到相关的backend,经过ACL能够实现相似与F5的irules的功能。功能很是强大。目前HAProxy支持如下算法
5种负载均衡算法,同时也支持经过weight来实现负载比率的调整和经过cookie来实现链接保持。
1. 轮询 roundrobin
2. 最少链接数 Leastconn
3. 根据原IP source
4. 根据URI uri
5. 根据URL里的参数 url_param数据库
LVS(Linux Virtual Server)是一个开源的软件,由毕业于国防科技大学的张文嵩博士于1998年5月创立,
能够实现Linux下的简单负载均衡。
在企业的IT集群应用中,最经常使用的架构除了高可用集群外,还有负载均衡集群(Load Balancing)。负载均衡
集群可实现多台服务器或应用的流量均衡分配。服务器集群对外部应用及客户表现为一个虚拟的服务器,集群
内部各服务器平均地处理由外部应用及客户端所提交的业务,实现服务器之间的负载均衡处理并提供灵活的可
扩展性,当业务压力增大时,可随时加入新的服务器以提升集群的总体性能。负载均衡集群特别适用于高并发
的网络应用,如网站、文件服务器、各类要求高并发的Socket处理等。一般负载均衡集群方案大多经过专用的
硬件——负载均衡器来实现,但此类硬件产品每每价格昂贵。目前在服务器领域千兆网络已经很是普及,可是
当前中档的百兆负载均衡器依然动辄近十万元的高价,使得很多企业望而却步。
随着LVS功能的逐渐完善及性能的不断提升,当前很多硬件负载均衡器就是经过Linux内核结合LVS来实现的。后端
1. 技术简介浏览器
LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具备很好的吞吐率,将请求均衡的转移到不一样的服
务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。
整个服务器集群的结构对客户是透明的,并且无需修改客户端和服务器端的程序。为此,在设计时须要考虑系统的
透明性、可伸缩性、高可用性和易管理性。安全
2. 集群采用三层结构服务器
负载调度器(load balancer):它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而
客户认为服务器是来自一个IP地址(称之为虚拟IP地址)。
Load Balancer是整个集群系统的前端,负责把客户端请求转发到Real Server上。
Backup是备份的Load Balancer,当Load Balancer不可用时接替他,成为实际的Load Balancer。
Load Balancer经过Ldirectord监测个Real Server的健康情况,在Real Server不可用时把它从集群中剔除,恢复
时从新加入。cookie
服务器池(server pool):是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。网络
共享存储(shared storage):为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,
提供相同的服务。
3. LVS的IP负载均衡
可伸缩网络服务的几种结构,它们都须要一个前端的负载调度器(或者多个进行主从备份)。IP负载均衡技术
在负载均衡调度器的实现技术中效率最高。LVS集群中实现的三种IP负载均衡技术,分别是:
VS/NAT(Virtual Server via Network Address Translation):端口映射NAT,其目标是将一组服务器构成一个
高性能的、高可用的虚拟服务器。由于这种技术容易造成单点故障,从而形成网络没法访问,而且存在带宽瓶
颈。因此LVS又提供了下面两种实现。
VS/TUN(Virtual Server via IP Tunneling):经过IP隧道实现虚拟服务。
VS/DR(Virtual Server via Direct Routing):直接路由实现虚拟服务器的方法,负载能力最强,要求真实服务
器直接将结果返回到客户端。
下面是一个采用VS/DR的拓扑图。
4. 调度器
调度器是服务器集群系统的惟一入口点,它能够采用IP负载均衡技术、基于内容请求分发技术或者二者相结合。
在IP负载均衡技术中,须要服务器池拥有相同的内容提供相同的服务。当客户端请求到达时,调度器只根据服务
器负载状况和设定的调度算法从服务器池中选出一个服务器,将该请求转发到选出的服务器,并记录这个调度。
当这个请求的其它报文到达时,也会被转发到前面选出的服务器。
在基于内容请求分发技术中,服务器能够提供不一样的服务。当客户端请求到达时,调度器能够根据请求的内容
选择服务器执行请求。由于全部的操做都是在Linux内核空间中完成的,它的调度开销很小,因此它具备很高的
吞吐率。服务池的节点数是可变的。当整个系统收到的负载超过目前全部节点的处理能力时,能够在服务器池
中增长服务器来知足不断增加的请求负载。
对大多数网络服务来讲,请求间不存在很强的相关性,请求能够在不一样的节点上并行执行,因此整个系统的性
能基本上能够随着服务器池的节点数目增长而线性增加。共享存储一般是数据库、网络文件系统或者分布式文
件系统。服务器节点须要动态更新的数据通常存储在数据库系统中,同时数据库会保证并发访问时数据的一致
性。静态的数据能够存储在网络文件系统中(如NFS/CIFS),但网络文件系统的伸缩能力有限,通常来讲,
NFS/CIFS服务器只能支持3~6个繁忙的服务器节点。对于规模较大的集群系统,能够考虑用分布式文件系统,
如AFS、GFS、Coda和Intermezzo等。分布式文件系统能够为服务器提供共享的存储区,它们访问分布式文件
系统就像访问本地文件系统同样,同时分布式文件系统能够提供良好的伸缩性和可用性。
5. 分布式锁管理器
当不一样服务器上的应用程序同时读写访问分布式文件系统上同一资源时,应用程序的访问冲突须要消解才能使
资源处于一致状态。这须要一个分布式锁管理器(Distributed Lock Manager),它多是分布式文件系统内
部提供的,也多是外部的。开发者在写应用程序时,可使用分布式锁管理器来保证应用程序在不一样节点上
并发访问的一致性。
负载调度器、服务池和共享存储系统经过高速网络相链接,如100Mbps交换网络、Myrinet和Gigabit网络等。
使用高速的网络,主要为避免当系统规模扩大时互联网络成为整个系统的瓶颈。
6. 监视器
Graphic Monitor是系统管理员提供整个集群系统的监视器,它能够监视系统的状态。Graphic Monitor是基于
浏览器的,因此不管管理员在本地仍是在异地均可以监视系统的情况。为了安全的缘由,浏览器要经过HTTPS
(Secure HTTP)协议和身份认证后,才能进行系统监测,并进行系统的配置和管理。
7. heartbeat
高可用集群是指一组经过硬件和软件链接起来的独立计算机,它们在用户面前表现为一个单一的系统,这样的
一组计算机系统内部的一个或者多个节点中止工做,服务会从故障节点切换到正常工做的节点上运行,不会引
起服务中断。从这个定义能够看出,集群必须检测节点和服务什么时候失效,什么时候恢复为可用。这个任务一般由一
组被称为“心跳”的代码完成。在Linux-HA里这个功能由一个叫作heartbeat的程序完成。
可用于Load Balancer主机和Backup之间failover的实现。
8. keepalived
keepalived是一个相似于layer3/4/5交换机机制的软件,也就是咱们平时说的第3层、第4层和第5层交换。它的
做用是检测web服务器的状态,若是有一台web服务器死机,或者工做出现故障,keepalived将检测到,并将
有故障的web服务器从系统中剔除,当web服务器工做正常后keepalived自动将web服务器加入到服务器集群
中,这些工做所有自动完成,不须要人工干涉,须要人工作的只是修复故障的web服务器。
主要用于Real Server健康状态监测以及Load Balancer主机和Backup之间failover的实现。
10. IPVS
IPVS是LVS集群系统的核心软件,安装在Load Balancer上,把发往Virtual IP的请求转发到Real Server上。
IPVS的负载均衡机制有三种,就是上文提到的:
VS/NAT(Virtual Server via NAT)
VS/TUN(Virtual Server via IP Tunneling)
VS/DR(Virtual Server via Direct Routing)
IPVS的负载调度算法有十种。
IPVS(IP Virtual Server)是一种高效的Layer-4交换机,它提供负载均衡的功能。当一个链接的初始SYN报文
到达时,IPVS就选择一台服务器,将报文转发给它。此后经过检查发报文的IP和TCP报文头地址,保证此链接
的后继报文被转发到相同的服务器。这样,IPVS没法检查到请求的内容在选择服务器,这就要求后端的服务器
组提供相同的服务,无论请求被发送到哪个服务器,返回的结果应该是同样的。可是在有一些应用中后端的
服务器可能功能不一,就要基于内容请求分发,同时基于内容请求分发能够提升后端服务器上访问的局部性。
IPVS的具体实现由ipvsadm这个程序来完成,所以判断一个系统是否具有ipvs,只需查看ipvsadm是否被安装。
9. 配置
若是LVS负载均衡器只是单台的,只须要安装LVS便可。若是LVS服务器是多台通常须要LVS+keepalived或
LVS+ldirectord+heartbeat来实现LVS负载均衡器的热备和监控应用服务器的状态。
Nginx(engine x)是一个高性能的HTTP服务器和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Nginx由于它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
在高链接并发的状况下,Nginx是Apache服务器不错的代替品。Nginx在美国是作虚拟主机经常使用的软件平台之
一。可以支持高达50,000个并发链接数的响应,它选择了epoll and kqueue做为开发模型。
Nginx采用C进行编写,它最大的优点在于高负载状况下内存和CPU的低消耗。
Nginx安装简单,配置文件很是简洁,Bugs不多,启动很容易,而且几乎能够作到7*24不间断运行,即便运行
数个月也不须要从新启动。可以在不间断服务的状况下进行软件版本的升级。
目前Nginx使用简单的轮询算法,没法作到基本链接数计数的负载均衡。目前中国大陆使用Nginx网站用户有:新浪、网易、腾讯。Nginx能够和Apache结合使用,使用Nginx处理静态请求,并将动态请求反向代理给Apache处理。