master節點的故障發現及處理

2021-07-30 07:56:55 字數 1454 閱讀 2916

master節點的故障發現

對於master節點故障的檢測,採用「心跳線」的方式進行,它的布局如圖1-1所示。當master a在處理客戶端的請求時,master b處於監控master a的狀態。

master是本地無狀態的。所謂本地無狀態,是指master的狀態資料都存放在後端資料庫裡,所以可以認為是個無狀態的服務。但嚴格來說,master是有狀態的,比如nc節點註冊之後,在ets中建立的nc pid和host的對應關係是個記憶體狀態,但這個狀態是可恢復狀態,因為每次註冊都會重建這個狀態在記憶體中的數。

在master a正常處理客戶端的請求時,master b會有乙個監督程序來監督master a是否發生故障,具體是通過master b端的監督程序給master a傳送訊息來實現的。

要注意的是,在erlang環境中,資料庫需要配置成多副本,且a機器和b機器都應是資料庫的備份點。

master節點的故障處理

對於master節點,我們有兩個機器,master a和master b機器,master b上會有乙個監控程序來監控master a,當然,master上的資料都儲存在後端的資料庫裡,當master a發生故障時,master b上的監控程序就會獲知a發生了故障,然後b自己獲取後端資料庫裡的資料重新啟動自己,從而代替a。

master b重新啟動之後,nc節點會重新在master b上進行註冊的。另外,對於使用者發給master a的一些請求引數,當master a還沒有來得及處理時,master a就崩潰了,那麼master b又是如何獲取這些引數的呢?如果這樣,master a請求處理超時,客戶端獲得返回錯誤。master客戶端會再次重新發起請求,這時如果master b準備好了,則進行處理,如果不行,那麼客戶端又要再次傳送請求,直至master b接受。至於這裡客戶端重**送請求,應該由客戶端的邏輯層負責的。

對於上述過程的恢復描述,主要也就是三點。一是nc節點在記憶體裡的資料恢復,二是本地資料的恢復,三是使用者請求的恢復。對於記憶體裡nc節點資料恢復,是通過nc重新註冊的方法實現的;對於本地資料的恢復,是通過「本地無狀態」方式(資料儲存在後端資料庫裡)來實現的;至於使用者請求的恢復,是通過重新傳送的方式來實現的。

上述的方法是我們具體的實現過程,下面我們可以看一下,一般通用的記憶體資料恢復的處理方法:

1.記憶體資料提前備份到遠端的資料庫裡。這樣的缺點是網路的速度遠慢於記憶體的速度。

2.記憶體資料再生,這樣就不怕記憶體資料丟失了。

3.主從同步的方式。任何主服務的記憶體資料,都傳輸到從服務的記憶體當中,這樣就使得主從的資料同步了。對於我們的例項當中的話,也就是master a和master b的記憶體資料時時刻刻是一樣的。

顯然,對於我們的實際系統,我們採用的是第二中方法。因為master節點的資料是可以容忍丟失的,也就是說master節點的資料是可再生的,並且我們關鍵的記憶體資料是註冊資訊,而這些資料是在ets中記錄的,所以這些資訊可以通過由master a切換到master b之後再次註冊時重建。

0

給主人留下些什麼吧!~~

一次master節點notReady的修復過程

這天開啟電腦,發現master節點的狀態異常,是notready狀態。其他計算機點還好時ready狀態。首先通過命令etcdctl member list確認etcd集群是ok的。這時檢查master節點上的各個kube相關程序都在.但通過systemctl status kubelet,kubel...

刪除鍊錶的中間節點和a b處節點

說明 本文是左程雲老師所著的 程式設計師面試 指南 第二章中 刪除鍊錶的中間節點和a b處節點 中的一道題目。在此感謝左程雲老師。題目 給定鍊錶的頭節點 head,實現刪除鍊錶的中間節點的函式。例如 步刪除任何節點 1 2,刪除節點1 1 2 3,刪除節點2 1 2 3 4,刪除節點2 1 2 3 ...

刪除鍊錶的中間節點和a b處的節點

給定鍊錶的頭節點head,實現刪除鍊錶中間節點的函式和刪除位於a b處節點的函式。當有偶數個節點時,刪除兩個中間節點的前乙個,有奇數個節點時,刪除中間節點。刪除a b處的節點 鍊錶1 2 3 4 5,假設a b的值為r,如果r 0,不刪除任何節點。如果r在區間 0,1 5 上,刪除節點1 依次類推 ...