作者:濤思數據|肖波
隨着容器化的流行,越來越多的項目采取了容器化方案來設計架構、實施部署。
作為時序數據引擎核心的TDengine,在部署時一般建議采用FQDN(Fully Qualified Domain Name,完全限定域名)來進行節點之間的通信。很多客戶在進行容器化架構設計時,通信方式均采用IP地址尋址,而且由於這些容器的IP、容器名(也就是hostname)會隨着容器的生命周期變化而變化,這就給TDengine采用hostname作為FQDN尋址進行通信帶來了困難。
本文將結合實際,嘗試給出一最佳實踐建議,以實現以下兩個需求:
- TDengine集群節點采用IP地址尋址
- 應用端無需配置集群節點IP/FQDN地址,而僅采用LoadBalancer域名作為firstEP實現集群尋址
假設TDengine集群由兩個節點組成,IP分別為172.16.31.1和172.16.31.2。
在深入之前,希望讀者先對TDengine的整體架構有所了解,可以參考TDengine技術文檔。
我們再來強調TDengine中的幾個概念:
- 物理節點(pnode): pnode是一獨立運行、擁有自己的計算、存儲和網絡能力的計算機,可以是安裝有OS的物理機、虛擬機或Docker容器。物理節點由其配置的 FQDN來標識。
- 數據節點(dnode): dnode 是 TDengine 服務器側執行代碼 taosd 在物理節點上的一個運行實例,一個工作的系統必須有至少一個數據節點。dnode包含零到多個邏輯的虛擬節點(VNODE),零或者至多一個邏輯的管理節點(mnode)。dnode在系統中的唯一標識由實例的End Point (EP )決定。EP是dnode所在物理節點的FQDN和系統所配置的網絡端口號(Port)的組合。
- 管理節點(mnode): 一個虛擬的邏輯單元,負責所有數據節點運行狀態的監控和維護,以及節點之間的負載均衡。同時,管理節點也負責元數據(包括用戶、數據庫、表、靜態標簽等)的存儲和管理。
客戶端初始化的基本流程是:應用通過taosc原生接口訪問TDengine,需要通過firstEP找到集群,獲取到集群的元數據(meta-data),也就是集群所有節點列表(FQDN 或 IP列表)。客戶端驅動一旦獲得列表后,即可按列表與集群對應的節點進行通信了。默認的通信方式是:15K以下的數據走UDP協議,15K以上的走TCP協議。
理解了以上流程,我們就可以利用負載均衡器LoadBalancer的相關特點幫助我們實現去hostname的容器化部署了。當然,本方案也同樣可以用在非容器化部署,但希望采用IP地址部署TDengine的場景。
在這個方案里,firstEP指向LoadBalancer的域名及對應的端口(默認為6030)。我們假設LoadBalancer的域名是lb.taosdata.com。TDengine集群節點尋址采用IP地址作為FQDN:172.16.31.1/172.16.31.2。
應用通過客戶端驅動去連接firstEP:lb.taosdata.com:6030。LoadBalancer收到請求后,根據預先設定好的負載均衡策略,將請求轉發給預設的TDengine節點——172.16.31.1:6030 或 172.16.31.2:6030,收到該消息的節點將meta-data消息原路返回給請求者(如當前節點不是mnode主節點,會觸發重定向,后續流程類似),最終應用/客戶端應用驅動刷新獲得了meta-data列表。
之后,應用需要建立與集群任一節點的通信時,無需通過LoadBalancer,將直接通過已獲得的IP列表發起連接,實現通信。
最后一點,也是最重要的一點:如果完成以上步驟不能成功通信,那么有可能是您的LB不支持UDP,或UDP丟包率過高導致。解決方法很簡單,打開所有節點(包括所有客戶端和服務端)的rpcForceTCP開關,將所有發起的通信轉為TCP通信而不再采用UDP通信,確保穿透LoadBalancer的通信均走TCP實現。
活動推薦: