摘要
一、集群概述
为什么需要集群?来源是系统扩展的需求,而系统扩展自身能力有2种方式:Scale UP,即使用性能更好的计算机来满足,例如使用更好的固态硬盘等等,但是这种方式扩展性和上限较低,因此还有另外一种方式Scale OUT,即水平扩展,利用多台主机来解决问题。
集群是什么?由多个独立的主机(可以是物理机,也可以是虚拟机)组织起来解决一个特定问题,这种组织的方式就称为集群。而集群大体上有以下几种类型:
LB: Load Blancing 负载均衡,负载均衡类型的集群往往有一个上游的调度器和多台真正提供服务的后端主机(backend server, upstreaming server, real server),这样可以减轻每台服务器上的压力。
HA: High Availiabilty,高可用集群,例如一台活动服务器(Active),一台备用服务器(Passive, Standby),主要在于解决单点故障问题(SPOF: Single Point Of Failure), 通常其可用性用A=MTBF/(MTBF+MTTR)来衡量其可用性,即平均无故障时间/(平均无故障时间+平均修复时间),例如90%,95%,99%,99.9%,99.999%等。
HP: High Performance 高性能集群,全球前500的超级计算机在 www.top500.org网上可以查询,超级计算机其中99%都是集群架构
DS: Distributed System,分布式系统,其中也有很多组织方式,比如分布式计算系统,分布式存储系统,比如Hadoop中的hdfs和map reduce。
LB集群的实现
网络上的资源都是通过域名进行访问,而域名在做DNS解析的时候如果有多台地址,会自动轮询,这也是一种负载均衡的方式,但是这种方式是有限制的,比如负载均衡方式只支持轮询,而且DNS是有缓存的,而且比较难以控制,因此,我们需要更好的负载均衡方式,即需要专门的调度器来负载均衡,调度器可以有硬件和软件2种方式,硬件中著名的有F5的BIG-IP(几十万到百万不等),Citrix的Netscaler,A10的A10,Array公司,Redware公司等等,而软件的方式也多种多样,比如lvs(Linux Virtual Server),haproxy,nginx,ats(apache traffice server),perlbal,特别自信的,二次研发能力特别强的公司喜欢玩ats,比如淘宝.
从另一个角度来观察,TCP/IP 4层的角度,基于传输层的有lvs, haproxy的mode tcp,例如lvs就工作在内核空间上,该服务不需要监听在某个端口上进行套接字通信,而基于应用层的有haproxy中的mode http, nginx, ats, perlbal,基于应用层就需要一个端口监听,还需要扮演一个客户端的角色和真正的服务器端进行交互。综上,基于传输层的lvs基本没有限制,据说可以支持400w-500w个并发,而基于应用层的能力就没有这么强了,对于一般的服务器而言,几万个并发已经非常夸张了,因此对于LB实现的选择还是应该根据具体需求。
HA集群的实现
比较常见的有keepalived,通过实现vppr协议来实现地址漂移,AIS中的hertbeat, cman+rgmanger(RHCS: redhat cluster suite),corosync+pacemaker等
一个系统的构建有可能用到多种集群方式,比如会按业务分层,分割, 做分布式的应用,数据,存储,计算等等。