RAC Split-Brain决议的投票算法

本文讨论了在计算机集群中,当出现类似人类大脑‘裂脑’的现象,即节点间的通信中断导致的集群分裂问题。在Oracle RAC集群中,通过心跳检测和投票算法来决定哪个子集群应继续拥有资源控制权。集群重构过程包括初始化、投票、脑裂检查、驱逐和更新阶段,其中节点数量和节点编号决定了哪个子集群存活。Oracle建议使用奇数个投票磁盘以确保高可用性。
摘要由CSDN通过智能技术生成

        获知“裂脑”是治疗“癫痫”病的一种手术。医生们认为癫痫病发作是由于大脑“异常放电”所至。
        为了阻止“异常放电”波及整个大脑(左、右半脑),就用手术来割断病人左右脑的连接神经。
        使今后病人在发病时至少还有半个大脑正常、能控制行为。但施行过手术的所谓“裂脑人”在术后有一段不适应期,
        表现得行为分裂,仿佛体内存在着2个人,时常要发生冲突。
        例如,右脑想让一只手去脸上挠痒痒,左脑却不认同、以为是谁的手要“登鼻子上脸”就让另一只手去阻止,
        于是明明是自己的2只手,却互不相让、扭在一起扳起了手腕
        
        计算机的行为和人的行为存在相同之处
        
        在集群里,节点间通过心跳(也就是,人左右脑的连接神经)了解彼此的健康状况,以确保协同作业
        如果只是心跳出了状况,但各节点还可以正常运行(也就是,人左右脑还是ok的)
        这时,每个节点都认为其他的节点宕机了, 自己是整个集群环境中的"唯一建在者"
        自己应该获得共享磁盘(即资源)的控制权
        于是明明是共享盘的子节点,却互不相让、扭在一起扳起了手腕
      
         
        集群重构时,所有的active节点和正在加入集群的节点都会参与到reconfig中,
        那些没有应答(ack)的节点都将不再被归入新的集群关系中。
        集群重构包括多个阶段:
          1.初始化阶段 — reconfig manager(由集群成员号最低的节点担任)向其他节点发送启动reconfig的信号
          2.投票阶段 — 节点向reconfig manager发送该节点所了解的成员关系
          3.脑裂检查阶段 — reconfig manager检查是否脑裂
          4.驱逐阶段 — reconfig manager驱逐非成员节点
          5.更新阶段 — reconfig manager向成员节点发送权威成员关系信息
      
        在脑裂检查阶段,Reconfig Manager会找出那些没有Network Heartbeat而有Disk Heartbeat的节点,
        并通过Network Heartbeat(如果可能的话)和Disk Heartbeat的信息来计算所有竞争子集群(subcluster)内的节点数目,
        并依据以下2种因素决定哪个子集群应当存活下去:
          1.拥有最多节点数目的子集群
          2.若子集群内数目相等则为拥有最低节点号的子集群,比如在一个2节点的RAC环境中总是1号节点会获胜
          
        注意:这里说的低节点号不是指 RAC节点(1号 节点 ,2号节点)这样的节点号, 而是实际 上下文的节点号, olsnodes -n 获得的节点号
          
        所以,投票只是对“健康状况”的报道,而不是用来决定谁应该留下来 
        
        假设集群中共有3个节点,其中1号实例没有被启动,集群中只有2个活动节点(active node),发生2号节点的网络失败的故障,因2号节点的member number较小故其通过voting disk向3号节点发起驱逐 
        
        若没有vote disk,在network heartbeat不可用的情况下, cluster分裂成多个 subcluster时, 
        它们如何知道对方的subcluster中node的数量呢?
        它们如何发送killblock 以实现evictee的驱逐通知呢?

        votedisk都是读的

        
        其实VOTE DISK的个数和票数没关系
        几个都是1票
        只不过对于VOTE DISK它是多数可用的工作原理,我们冗余这个只是保证当VOTE DISK出问题的时候所有节点可以继续工作
          当你有 1 个vote disk,并且它损坏了,则集群停止工作
          当你有 2 个并且有 1 个损坏,则集群停止工作,因为,可用1/2没有>不可用1/2;注意是>;而不是>=
          当你有 3 个并且有 1 个损坏,则集群还是好的,因为,2/3 > 1/3
           当你有 4 个并且有 1 个损坏,则集群也还是好的,因为,3/4 > 1/4
           当你有 3 个并且有 2 个损坏,则集群停止工作,因为,1/3 < 2/3
           当你有 4 个并且有 2 个损坏,则集群停止工作,因为,可用1/2没有>不可用1/2
          由上可知,oracle推荐vote disk为奇数个,3个votedisk ,那么其中一个节点只要能访问其中2个就 ok,
          而如果共有2个votedisk 那么节点需要能正常访问所有的vote disk,如果是 4个ok吗? 当然,4个也可以,
          但4个和3个在出故障时是一样的,这样你便浪费了一个disk。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值