這四個與叢集相關的最佳化和功能開發,你一定需要!

TDengine發表於2024-01-29

為了幫助企業更好地進行大資料處理,我們在此前 TDengine 3.x 系列版本中進行了幾項與叢集相關的最佳化和新功能開發,以提升叢集的穩定性和在異常情況下的恢復能力。這些最佳化包括 clusterID 隔離、leader rebalance、raft learner 和 restore dnode。本文將對這幾項重要最佳化進行詳細闡述,以解答企業在此領域的疑問,並幫助大家更好地應對相關挑戰。

clusterID 隔離

1. 問題

  • firstEp 節點掛掉後,磁碟掛載錯誤,掛載了一個空白磁碟啟動,或者 firstEp 資料被意外刪除;
  • firstEp 再次重啟。嚴重點是這個出錯的節點,導致其他節點也無法工作,整個叢集都掛掉,叢集失去了高可用特性。


2. 造成的後果

firstEp 節點在無資料的情況下重新啟動,相當於新建立了一個叢集,它重新初始化為一個新叢集(重新生成了 clusterid),但此時原叢集(舊的 clusterId)中的其它 N-1 個節點仍然向它們所儲存的 firstEp 傳送心跳,而收到心跳訊息的 firstEp 已經是一個新的叢集了,所以會拒絕心跳訊息,返回節點不存在,要求心跳傳送方下線,這些節點收到下線通知後會主動下線, 直接導致原叢集中的所有節點都不可用

3. 解決辦法

為節點心跳、raft 心跳增加對 clusterid 的判斷,即對 clusterid 進行隔離,讓具有不同 clusterid 的節點可以獨立執行。這種解決辦法可以應對節點已經在空白資料上重啟的情況。

4. 解決後的效果

在出現磁碟故障後,firstEp 節點啟動後,會形成兩個叢集,一個是 firstEp 節點形成的單節點新叢集,另一個是所有其他節點保持舊 clusterid 的舊叢集。兩個叢集可以獨立且互不干擾的正常執行。

RAFT Leader Rebalance(TDengine Enterprise 企業版)

1. 問題

比較常見的使用場景,在滾動升級後, 所有的 leader 都被趕到一個節點上,整個叢集嚴重失衡

2. 解決辦法

增加  balance vgroup leader; 的 SQL 命令,由 DBA 人工觸發叢集再平衡,該命令會依次順序對每個 vgroup 強制重新選舉 RAFT leader。因為選舉是隨機的,所以我們可以透過選舉讓 leader 遷移到其他的節點上。

3. 解決後的效果

選舉理論上隨機選出 leader,導致 leader 散開的結果。理論上會均勻,實際上不會絕對均勻。

Raft Learner

1. 問題

在副本變更時(create mnode, alter db replia),如果存量資料(後設資料或時序資料)量比較大時, 相應操作會執行很長時間,要等待存量資料同步完成後命令才能執行完成, 並且在此期間會阻塞資料寫入

2. 解決辦法

在 Leader/Follower/Candidate 之外引入第四種 Raft 角色——Raft learner。Raft Learner 只同步資料不參與選主,也不參與資料寫入時的一致性協議。當 Raft Learner 的資料同步進度被追上後才會變身為 Follower,成為 Raft 叢集的一部分。 這樣命令雖然執行很長時間,但不會阻塞寫入

3. 受影響的命令

Create mnode on dnode id;
ALTER DATABASE power replica 3;

4. 解決後的效果

副本變更時,不會再阻塞寫入。相應的命令執行可以很快返回。

Restore dnode(TDengine Enterprise 企業版)

1. 問題

資料盤出現問題,重新掛載新資料盤,這個節點上所有資料目錄都丟失

2. 解決辦法

增加命令:

restore dnode <dnode_id>;# 恢復dnode上的mnode,所有vnode和qnode
restore mnode on dnode <dnode_id>;# 恢復dnode上的mnode
restore vnode on dnode <dnode_id> ;# 恢復dnode上的所有vnode
restore qnode on dnode <dnode_id>;# 恢復dnode上的qnode

該命令,從 mnode 讀取節點中關於 mndoe、vnode、qnode 的資訊,按照這些在節點重建 mnode、vnode、qnode,在重建結束後,會開始從其他副本複製資料。

3. 解決後的效果

按照原有的 taos.cfg 的配置啟動 taosd,該節點會自動加入群,並且 dnode 顯示為 ready,即 online 狀態。在節點變為 online 後,透過命令可恢復全部 mnode、vnode、qnode,也可以分別恢復。

4. 功能限制

該功能是基於已有的複製功能的恢復,不是災難恢復或者備份恢復,所以對於 mnode 和 vnode 來說,使用該命令一定是還存在其他 mnode 和 vnode 的其他副本。該命令不能修復資料目錄中個別檔案的損壞或者丟失,是整體的恢復一個 mnode 或者 vnode。

寫在最後

透過本文,相信大家已經初步瞭解了上述幾項功能最佳化。如果你對這些功能有進一步的瞭解需求,或者希望進一步討論在應用中遇到的問題,歡迎新增 小T vx:tdengine,與我們專業的解決方案架構師直接溝通。

來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70014783/viewspace-3005622/,如需轉載,請註明出處,否則將追究法律責任。

相關文章