這四個與叢集相關的最佳化和功能開發,你一定需要!
為了幫助企業更好地進行大資料處理,我們在此前 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 直播系統開發步驟繁瑣,你需要注意這四個點
- PostgreSQL叢集方案相關索引頁SQL索引
- Elasticsearch叢集運維相關知識Elasticsearch運維
- 你一定需要的關於CNN、RNN的講解CNNRNN
- 邊緣使用 K8s 門檻太高?OpenYurt 這個功能幫你快速搭建叢集!K8S
- Java後端開發需具備什麼技術?這幾個部分你需要關注Java後端
- 急問:關於Web容器叢集和EJB叢集Web
- oracle cluster叢集相關日誌檢視Oracle
- Hadoop HA叢集 與 開發環境部署Hadoop開發環境
- 這12個最新AI開源專案,你一定要收下AI
- 使用aspnetcore前後端分離開發,你一定要知道這個NetCore後端
- PostgreSQL叢集管理工具repmgr相關命令SQL
- 關於軟體開發你真正需要知道的幾個事情
- web叢集與ejb叢集Web
- 與oralce開發相關的不錯的網站網站
- TRIZ培訓:這個10個原理,你一定用的上!
- 教育app開發需要開發哪些功能APP
- EJB叢集和Webservice叢集的討論Web
- 分散式與叢集沒有關係?分散式
- 這個SQL你會最佳化嗎?SQL
- 【Redis叢集原理專題】分析一下相關的Redis叢集模式下的腦裂問題!Redis模式
- 為什麼一定要參與開源專案,你需要一些理由!
- 為什麼一定要參與開源專案 你需要一些理由!
- 關於叢集與分散式,反向代理正向代理的概念以及叢集與反向代理伺服器之間的關係分散式伺服器
- 華為相機開啟這三個設定,你會操作哪個?
- React 效能最佳化,你需要知道的幾個點React
- 想做知識付費的你一定要做好這個
- MySQL 叢集的安全關閉和重啟方法MySql
- Redis 叢集功能說明Redis
- 敏捷開發相關敏捷
- ELK批量刪除索引及叢集相關操作記錄索引
- 10 個你需要了解的最佳 javascript 開發實踐JavaScript
- 學習 VR 開發之前,這 7 個容易混淆的概念一定要理清VR
- 開發小說APP需要哪些功能APP
- 高效開發 MVVM 和 databinding 你需要使用的工具MVVM
- 叢集系統與事務處理需要注意的一點
- 用Docker搭建RabbitMq的普通叢集和映象叢集DockerMQ
- 使用Docker Swarm快速搭建與部署你的服務叢集DockerSwarm