高可用性(HA)与集群(Cluster)之浅见
通俗来讲的HA应该属于狭义概念上的HA,它通常指代某种Active+Standby的Pair Service,最长见的当然就是数据库的主备结构。反正大家天天这么招呼,在狭义的HA层面上也能达成一定的共识,不过,HA概念本身其实简单背后蕴含着更多的玄机。
计算机系统的可用性(availability)是通过系统的可靠性(reliability)和可维护性(maintainability)来度量的。工程上通常用平均无故障时间(MTTF)来度量系统的可靠性,用平均维修时间(MTTR)来度量系统的可维护性。于是可用性被定义为:MTTF/(MTTF+MTTR)*100%
从更广义的角度来说, HA就是HA(这可能听着有点儿绕),为了让我们的系统可以高可用(High Availability), 我们有许多手段或者说方式来达成这个目的,而我们常常挂在嘴边的HA,实际上只是其中的一个手段或者几个手段的代称而已。
面是几种较为常见的手段和方式(但不限于):
Replication And Backup 复制与备份
这主要是从存储的角度保证状态的可用性,比如采用RAID(冗余磁盘阵列)通过冗余的数据备份存储保证数据的高可用性;比如,异地数据中心之间的数据备份与灾难恢复。
Failover
为了保证系统的高可用性,我们还可以引入Failover机制,比如应用程序运行期间的hot swap,或者Virtual IP之间的切换等,都属于Failover的范畴。
Load balance 负载均衡
负载均衡扔这里可能会感觉牵强附会,不过,从其所起的作用来看,把它看作保证系统高可用的一种手段也不为过。负载均衡可以减轻单一或者多个结点的负载压力,将整体负载均衡的分配到多个结点上去,你想啊,如果没有负载均衡,将整个的负载都压到一个结点上去,那这个结点不废废才怪那,还谈啥高可用性啊,连用都用不了了。
Cluster 集群
现在最流行的就是集群方式了。它可以和其他方式一起完成HA的目的。所谓集群是指一组独立的计算机系统构成的一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信。应用程序可以通过网络共享内存进行消息传送,实现分布式计算机。集群也是通过冗余来保证系统的高可用性,只不过,它侧重的是服务的冗余,而不是状态的冗余(虽然也包含)。集群内部可以存在交互,也可以不存在交互,存在交互的集群内部各个结点通常是不对等的,而不存在交互的集群内部各个结点通常则是对等的。集群内部的交互,简单的机制当然是Heart Beat,复杂的机制可能有组播,广播等。总之就是,挂了我一个,还有后来人,预备役多着那。
现代集群服务的特点:
1)高可靠性(HA)。利用集群管理软件,当主服务器故障时,备份服务器能够自动接管主服务器的工作,并及时切换过去,以实现对用户的不间断服务。
2)高性能计算(HP)。即充分利用集群中的每一台计算机的资源,实现复杂运算的并行处理,通常用于科学计算领域,比如基因分析、化学分析等。
3)负载平衡。即把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和软件要求。
以下转自网络,是关于集群上述三个特点的解释,非常生动,作者很有见地,大赞!
Load balance cluster
一共有四兄弟开裁缝铺,生意特别多,一个人做不下来,老是延误工期,于是四个兄弟商量
老大接订单, 三个兄弟来干活。 客户多起来之后,老大根据一定的原则(policy) 根据三兄弟手上的工作量来分派新任务.
High availability cluster
两兄弟开早餐铺,生意不大,但是每天早上7点到9点之间客户很多并且不能中断。为了保证2个小时内这个早餐铺能够保证持续提供服务,两兄弟商量几个方法:
方法一:平时老大做生意,老二这个时间段在家等候,一旦老大无法做生意了,老二就出来顶上,这个叫做 Active/Standby.
方法二:平时老大做生意,老二这个时候就在旁边帮工,一旦老大无法做生意,老二就马上顶上,这个叫做Active/Passive
方法三:平时老大卖包子,老二也在旁边卖豆浆,老大有问题,老二就又卖包子,又卖豆浆,老二不行了,老大就又卖包子,又卖豆浆.这个叫做Active/Active (dual Active)
包子= application package, 互相照应叫做heartbeat, 顶替对方工作叫做 failover/takeover. 如果两个兄弟突然都瞎了聋了,不知道现在对方到底是否正在干活,都认为自己要顶对方的工作,这个叫做brain-split, 然后需要第三者,比如他们的老爹来解决问题,这个叫做tier-breaker, 或者让他们两个的媳妇过来拉走其中一个,这个叫做fency.
High computing clustering
10个兄弟一起做手工家具生意,一个客户来找他们的老爹要求做一套非常复杂的仿古家具,一个人做也可以做,不过要做很久很久,为了1个星期就交出这一套家具,10个兄弟决定一起做。
老爹把这套家具的不同部分分开交给儿子们作,然后每个儿子都在做木制家具的加工,最后拼在一起叫货.
老爹是 scheduler任务调度器,儿子们是compute node. 他们做的工作叫做作业.
楼主是高人