天天看點

簡單的主備切換方案

 主備切換是很多高可用性系統都必須解決的問題,方法有很多,象基于ZooKeeper的主備切換就是一個很好的選擇。

在這裡提供一種更簡單但不完美的主備切換方法:

1) 假設A和B是叢集中的主要(Master)節點

2) 1~7是工作節點(如HDFS中的DataNode)

3) 在每個工作節點上,都同時配置了A和B的IP,而且是對等的,無主備之分

所謂主:是指提供服務的主要,而備是指不提供服務的主要,當主故障時,由備接管其它服務,但因網絡原因,可能主和備都未故障,這個是解決主備切換的關鍵問題所在。

選擇A或B作為主的過程:

1) 未連接配接之前,如圖1所示,A和B都不是主

2) 1~7随機選擇連接配接到A或B

3) 這個時候可能會出現如圖2所示的情況

4) (關鍵點)在指定的時間内(如1秒),不管是A還是B,發現到自己的連接配接數小于50%(這個值可修改)就主動切斷連接配接,這個時候會将本來和自己建立連接配接的節點趕往另一邊

5) 當A或B發現到自己的連接配接數超過60%(這個值可修改)時,就認為自己是主了,并保持連接配接

6) 這樣當A或B有一個挂掉時,最終肯定會有一個滿足作為主的條件

如果是網絡原因,而不是A或B本身故障,則會出現一些可以連接配接到A但不能連接配接到B,而另一些可以連接配接到B但不能連接配接到A,甚至還有些可以同時連接配接A和B,但總是隻有滿足超過50%的才提供服務,這樣就不會出現同時存在兩個主的情況。是以,如果恰好是一半一半,那就無法提供服務,需要人工幹預了,比如工作節點,平均配置設定在兩個不同IDC,由于兩個IDC間網絡故障,問題就會出現。

簡單的主備切換方案
圖1 圖3

會不會導緻A和B都是40%或50%了?這個會,但會觸發重新競争配置設定,隻需要做一些政策調整,就可以解決這個問題,比如A是每1秒算一個間隔,B為2秒一個間隔。