天天看點

【JavaP6大綱】Zookeeper篇:Zookeeper假死問題Zookeeper假死問題?

Zookeeper假死問題?

假死:心跳出現逾時可能是master挂了,但是也可能是master,zookeeper之間網絡出現了問題,也同樣可能導緻。這種情況就是假死,master并未死掉,但是與ZooKeeper之間的網絡出現問題導緻Zookeeper認為其挂掉了然後通知其他節點進行切換,這樣slaver中就有一個成為了master,但是原本的master并未死掉,這時候client也獲得master切換的消息,但是仍然會有一些延時,zookeeper需要通訊需要一個一個通知,這時候整個系統就很混亂可能有一部分client已經通知到了連接配接到新的master上去了,有的client仍然連接配接在老的master上如果同時有兩個client需要對master的同一個資料更新并且剛好這兩個client此刻分别連接配接在新老的master上,就會出現很嚴重問題。

解決方案:

1、添加心跳線。

原來兩個namenode之間隻有一條心跳線路,此時若斷開,則接收不到心跳報告,判斷對方已經死亡。此時若有2條心跳線路,一條斷開,另一條仍然能夠接收心跳報告,能保證叢集服務正常運作。2條心跳線路同時斷開的可能性比1條心跳線路斷開的小得多。再有,心跳線路之間也可以HA(高可用),這兩條心跳線路之間也可以互相檢測,若一條斷開,則另一條馬上起作用。正常情況下,則不起作用,節約資源。

2、啟用磁盤鎖。

由于兩個active會争搶資源,導緻從節點不知道該連接配接哪一台namenode,可以使用磁盤鎖的形式,保證叢集中隻能有一台namenode擷取磁盤鎖,對外提供服務,避免數