一、什么是高可用集群?高可用集群是怎么工作的?
高可用集群(HA:High Availability),就是为了保证服务的持续可用性,使用1个或多个备用主机来保证主服务器宕掉后能自动接替其工作的方案。
这些主机中,正在工作的,我们称为主节点,看着主节点挂掉然后才能干活的,我们称之为备节点,一般高可用集群中,只有两个节点是很特殊的HA集群,一般都是3个或3个以上。
而主机工作一般都是提供各种服务,不管是网页服务还是邮件服务或者数据库服务等,我们将这些服务和服务所需的一些特性或者属性称为资源:(resource) 常见的资源类型有:磁盘分区、文件系统、IP地址、服务程序、NFS文件系统,以及不常见的primitive(本地类型),group,clone,Master-slave等.
HA集群中,主节点一般会不停的发出一些广播信息,告知其他节点,他在工作,当其他节点收不到这信息时,就认为他挂了,然后接替他的工作。看起来似乎很不错,对吧。对了,主节点发出的这个信息,一般都称之为心跳信息。
但实际上,试想一种情况,当网络问题,主备节点不能通信怎么办?又也许,主节点忙的没时间发心跳信息怎么办?凉拌么,亲?不管是那种情况,备用节点在指定的时间周期内收不到主节点的信息就会开始篡权了。那么,数据怎么办?服务资源怎么办?跟主节点混?谁是主节点?大家都是!所以,数据等资源就躺着也中枪了。
这些集群中可能发生的事情,例如节点系统故障、网络连通故障、网卡故障、应用程序故障等,我们称之为:事件(event)。这种各节点各自为政的行为,一般称之为:脑裂(Split-brain)
为了解决脑裂问题,那些V5的设计人员又折腾了出了一个霸气的机制:爆头(STONITH->Shoot The Other Node In The Head),可以肯定的是,肯定不会拿把枪把服务器给崩了,虽然这会很爽。实际上,简单来讲:就是谁最先抢到主节点,然后发现有别人还跟自己抢的话,就把对方的电源给掐了或是让对方重启。
爆头调用的设备,在红帽的RHCS套件中又叫隔离设备(Fence),其实就是当主节点挂了,备节点不急着抢资源,而是调用Fence设备,将其隔离(重启,关机或者断网),隔离成功后,再安安心心的接管。
再试想一种场景,当一个高可用集群中有很多台服务器,其中一个主节点挂了,其资源给谁呢?谁抢的快给谁?不是的,我们可以定义,这个资源,譬如http服务的主节点挂了,我们在它正常的时候可以定义,如果他挂了,他优先选择转移到哪个节点上工作,或者只能选择哪个节点,或者哪个节点一定不能去,或者等他修好了,http服务还在这个节点上工作,这种方式就是对资源的约束,又叫资源粘性Stickness。
控制着资源在自己挂了之后的选择方式叫:资源转移(failover),而故障的主节点正常后,资源再主动回来的情况叫failback。
如果有一个集群,有10台正在工作,因为老鼠把网线咬断了,集群分裂了,其中6个可以通讯,另外4个可以通讯,那么此时的集群,到底谁干活?大家都干?显然不是的,那么怎么办?投票有木有?好,那就投票,很简单,票数多于半数的,则继续干活,票数少的,则放弃服务。那么此时呢?肯定是6个的继续,4个放弃么?错了,要知道,票数(quorum)可不等于服务器个数,亲。管理投票的节点叫做DC(Designated Coordinator 指定的协调员)。
看了笔者废话这么多,纳尼是不是要问:这丫的到底咋工作的?来点清晰的东西。先来个图吧,当然,不是笔者自己画的…