运行于备用主机上的Heartbeat可以通过以太网连接检测主服务器的运行状态,一旦其无法检测到主服务器的“心跳”则自动接管主服务器的资源。通常情 况下,主、备服务器间的心跳连接是一个独立的物理连接,这个连接可以是串行线缆、一个由“交叉线”实现的以太网连接[12]。Heartbeat甚至可同时通过多 个物理连接检测主服务器的工作状态,而其只要能通过其中一个连接收到主服务器处于活动状态的信息,就会认为主服务器处于正常状态。从实践经验的角度来说, 建议为Heartbeat配置多条独立的物理连接,以避免Heartbeat通信线路本身存在单点故障。
脑裂所带来的问题:
(1)分裂开来的多个子集群,提供整个集群的功能,无疑压力增大,单个服务性能会下降。
(2)通常在一个高可用集群中,每种服务的资源都是不同的,但是有两个节点在提供同样的服务是,它们就会争抢资源,更甚者如果对同一文件系统上的同一文件同时发起写造作会造成文件系统崩溃。
由于连接断裂而使集群分裂成为多个子集群,这些子集群应不应该顶替其他不能联系到的服务器来完成整个集群功能,就显得至关重要了!有如下办法来避免脑裂的发生和带来的诸多问题:
我们引入quorum(法定票数)概念,根据服务器性能,每个服务器可以发出的票数(vote)会有不同,所谓quorum,就是一旦由于连接断裂,集群分裂成为多个子集群,这些子集群要根据其内部非主机票数是否够原来集群总票数的一半来决定是否顶替其他不能联系到的服务器来完成整个集群提供的功能通常来说,集群中每一个服务器可以投出的票数都为1,但是对于双active节点的模型来说,如果每个节点投出的票数都为1,那么只要分裂,它们哪一个的票数到不会大于原来的一半,因此都不会运行,这就相当于,一个节点当掉,整个集群就没用了,这个高可用集群就没有高可用功能了。此时,可以用的办法有,将两个节点可以投出的票数设置为不一样的,那么应对两个节点都可用,只是不能它们之间的连接断裂了的情况没有问题,但是如果高票数的节点挂掉,低票数的节点又由于quorum机制,也不提供任何服务了,这样的情况下,高可用也只是摆设了[13]。因此对于双active节点的模型,引入quorum disk,这是由RHCS(RedHat Cluster Suite,redhat集群套件)提供的,quorum disk本身可以投出1票。它是这样工作的,A节点和B节点还有qdisk有有一票权利,A节点在qdisk上不停写数据,并且带有时间戳,B节点读到A节点在qdisk的最近一次写入数据的时间戳和当前时间相近,则认为A活着,如果多次未读到这样的信息,认为A死亡。而qdisk提供的一票加上还处于active状态的那个节点的一票,大于总票数3票的一半,因此活动的那个节点必须顶替死亡的节点提供整个集群的功能。其实在那些不够半数票数的子集群中,也可以应用一些策略,称为Option no-quorum-policy,有如下策略:
(1) ignore 只有在两节点模型(并且没有使用仲裁磁盘),才可以使用此项;
(2)freeze 不再接受新请求,正在执行的请求可以正常结束;
(3)stop 默认,停止子集群中的服务;
(4)suicide 自杀,可能导致子集群节点关机;
对于多节点,多服务的模型,由于运行某个服务的节点挂掉或者失去与其他节点的连接,那么此节点运行服务时所用的资源就要进行流转,转到其他对于这个节点运行的服务的备用节点上。因此,资源是通过怎样的策略来决定流转到哪个节点上就是接下来要涉及的话题。首先声明两个概念,
资源从运行此服务的主节点流转到其他节点上的过程,称之为failover。 中小企业web服务器的高可用集群方案设计(8):http://www.751com.cn/jisuanji/lunwen_2317.html