在集群的操作机上执行命令为什么会出现权限被拒绝_如何使用 TDengine 2.0 最新开源的集群功能?
導(dǎo)讀:8月3日,TDengine 發(fā)布了 v2.0 版本,這次更新最大的亮點是,我們將分布式集群功能開源。開源后,引起了很大反響,又連續(xù)幾天在 GitHub 趨勢榜排名第一。不少關(guān)注TDengine的朋友都發(fā)出感嘆:你們竟然敢將用戶最為剛需的功能開源。我想說,我們不但敢開源集群功能,而且敢負(fù)責(zé)手把手教會你使用。現(xiàn)將我們安裝、管理集群的文檔發(fā)布出來,整個過程極其之簡單,歡迎大家使用。
多個taosd的運行實例可以組成一個集群,以保證TDengine的高可靠運行,并提供水平擴(kuò)展能力。要了解TDengine 2.0的集群管理,需要對集群的基本概念有所了解,請看TDengine 2.0整體架構(gòu)一章。而且在安裝集群之前,請按照《立即開始》一章安裝并體驗過單節(jié)點功能。
圖 1 TDengine架構(gòu)示意圖
集群的每個節(jié)點是由End Point來唯一標(biāo)識的,End Point是由FQDN(Fully Qualified Domain Name)外加Port組成,比如 h1.taosdata.com:6030。一般FQDN就是服務(wù)器的hostname,可通過Linux命令hostname -f獲取。端口是這個節(jié)點對外服務(wù)的端口號,缺省是6030,但可以通過taos.cfg里配置參數(shù)serverPort進(jìn)行修改。一個節(jié)點可能配置了多個hostname, TDengine會自動獲取第一個,但也可以通過taos.cfg里配置參數(shù)fqdn進(jìn)行指定。如果習(xí)慣IP地址直接訪問,可以將參數(shù)fqdn設(shè)置為本節(jié)點的IP地址。
TDengine的集群管理極其簡單,除添加和刪除節(jié)點需要人工干預(yù)之外,其他全部是自動完成,最大程度的降低了運維的工作量。本章對集群管理的操作做詳細(xì)的描述。
準(zhǔn)備工作
第一步:如果搭建集群的節(jié)點中,存有之前的測試數(shù)據(jù)、裝過1.X的版本,或者裝過其他版本的TDengine,請先將其刪除,并清空所有數(shù)據(jù),具體步驟請參考博客《TDengine多種安裝包的安裝和卸載》
第二步:建議關(guān)閉防火墻,至少保證端口:6030 - 6042的TCP和UDP端口都是開放的。強(qiáng)烈建議先關(guān)閉防火墻,集群搭建完畢之后,再來配置端口;
第三步:在所有節(jié)點安裝TDengine,且版本必須是一致的,但不要啟動taosd;
第四步:檢查、配置所有節(jié)點的FQDN:
第五步:修改TDengine的配置文件(所有節(jié)點的文件/etc/taos/taos.cfg都需要修改)。假設(shè)準(zhǔn)備啟動的第一個節(jié)點End Point為 h1.taosdata.com:6030, 那么以下幾個參數(shù)與集群相關(guān):
// firstEp 是每個節(jié)點啟動后連接的第一個節(jié)點firstEp h1.taosdata.com:6030// 配置本節(jié)點的FQDN,如果本機(jī)只有一個hostname, 無需配置fqdn h1.taosdata.com// 配置本節(jié)點的端口號,缺省是6030serverPort 6030// 副本數(shù)為偶數(shù)的時候,需要配置,請參考《Arbitrator的使用》的部分arbitrator ha.taosdata.com:6042一定要修改的參數(shù)是firstEp, 其他參數(shù)可不做任何修改,除非你很清楚為什么要修改。
啟動第一個節(jié)點
按照《立即開始》里的指示,啟動第一個節(jié)點h1.taosdata.com,然后執(zhí)行taos, 啟動taos shell,從shell里執(zhí)行命令"show dnodes;",如下所示:
Welcome to the TDengine shell from Linux, Client Version:2.0.0.0Copyright (c) 2017 by TAOS Data, Inc. All rights reserved.taos> show dnodes; id | end_point | vnodes | cores | status | role | create_time |===================================================================================== 1 | h1.taos.com:6030 | 0 | 2 | ready | any | 2020-07-31 03:49:29.202 |Query OK, 1 row(s) in set (0.006385s)taos>上述命令里,可以看到這個剛啟動的這個節(jié)點的End Point是:h1.taos.com:6030
啟動后續(xù)節(jié)點
將后續(xù)的節(jié)點添加到現(xiàn)有集群,具體有以下幾步:
按照上述步驟可以源源不斷的將新的節(jié)點加入到集群。
提示:
- firstEp這個參數(shù)僅僅在該節(jié)點第一次加入集群時有作用,加入集群后,該節(jié)點會保存最新的mnode的End Point列表,不再依賴這兩個參數(shù)。
- 兩個沒有配置firstEp參數(shù)的dnode啟動后,會獨立運行起來。這個時候,無法將其中一個節(jié)點加入到另外一個節(jié)點,形成集群。無法將兩個獨立的集群合并成為新的集群。
節(jié)點管理
添加節(jié)點
執(zhí)行CLI程序taos, 使用root賬號登錄進(jìn)系統(tǒng), 執(zhí)行:
CREATE DNODE "fqdn:port";將新節(jié)點的End Point添加進(jìn)集群的EP列表。"fqdn:port"需要用雙引號引起來,否則出錯。一個節(jié)點對外服務(wù)的fqdn和port可以通過配置文件taos.cfg進(jìn)行配置,缺省是自動獲取。
刪除節(jié)點
執(zhí)行CLI程序taos, 使用root賬號登錄進(jìn)TDengine系統(tǒng),執(zhí)行:
DROP DNODE "fqdn:port";其中fqdn是被刪除的節(jié)點的FQDN,port是其對外服務(wù)器的端口號
查看節(jié)點
執(zhí)行CLI程序taos,使用root賬號登錄進(jìn)TDengine系統(tǒng),執(zhí)行:
SHOW DNODES;它將列出集群中所有的dnode,每個dnode的fqdn:port, 狀態(tài)(ready, offline等),vnode數(shù)目,還未使用的vnode數(shù)目等信息。在添加或刪除一個節(jié)點后,可以使用該命令查看。
查看虛擬節(jié)點組
為充分利用多核技術(shù),并提供scalability,數(shù)據(jù)需要分片處理。因此TDengine會將一個DB的數(shù)據(jù)切分成多份,存放在多個vnode里。這些vnode可能分布在多個dnode里,這樣就實現(xiàn)了水平擴(kuò)展。一個vnode僅僅屬于一個DB,但一個DB可以有多個vnode。vnode的是mnode根據(jù)當(dāng)前系統(tǒng)資源的情況,自動進(jìn)行分配的,無需任何人工干預(yù)。
執(zhí)行CLI程序taos,使用root賬號登錄進(jìn)TDengine系統(tǒng),執(zhí)行:
SHOW VGROUPS;vnode的高可用性
TDengine通過多副本的機(jī)制來提供系統(tǒng)的高可用性,包括vnode和mnode的高可用性。
vnode的副本數(shù)是與DB關(guān)聯(lián)的,一個集群里可以有多個DB,根據(jù)運營的需求,每個DB可以配置不同的副本數(shù)。創(chuàng)建數(shù)據(jù)庫時,通過參數(shù)replica 指定副本數(shù)(缺省為1)。如果副本數(shù)為1,系統(tǒng)的可靠性無法保證,只要數(shù)據(jù)所在的節(jié)點宕機(jī),就將無法提供服務(wù)。集群的節(jié)點數(shù)必須大于等于副本數(shù),否則創(chuàng)建表時將返回錯誤“more dnodes are needed"。比如下面的命令將創(chuàng)建副本數(shù)為3的數(shù)據(jù)庫demo:
CREATE DATABASE demo replica 3;一個DB里的數(shù)據(jù)會被切片分到多個vnode group,vnode group里的vnode數(shù)目就是DB的副本數(shù),同一個vnode group里各vnode的數(shù)據(jù)是完全一致的。為保證高可用性,vnode group里的vnode一定要分布在不同的dnode里(實際部署時,需要在不同的物理機(jī)上),只要一個vgroup里超過半數(shù)的vnode處于工作狀態(tài),這個vgroup就能正常的對外服務(wù)。
一個dnode里可能有多個DB的數(shù)據(jù),因此一個dnode離線時,可能會影響到多個DB。如果一個vnode group里的一半或一半以上的vnode不工作,那么該vnode group就無法對外服務(wù),無法插入或讀取數(shù)據(jù),這樣會影響到它所屬的DB的一部分表的讀寫操作。
因為vnode的引入,無法簡單的給出結(jié)論:“集群中過半dnode工作,集群就應(yīng)該工作”。但是對于簡單的情形,很好下結(jié)論。比如副本數(shù)為3,只有三個dnode,那如果僅有一個節(jié)點不工作,整個集群還是可以正常工作的,但如果有兩個節(jié)點不工作,那整個集群就無法正常工作了。
Mnode的高可用性
TDengine集群是由mnode (taosd的一個模塊,邏輯節(jié)點) 負(fù)責(zé)管理的,為保證mnode的高可用,可以配置多個mnode副本,副本數(shù)由系統(tǒng)配置參數(shù)numOfMnodes決定,有效范圍為1-3。為保證元數(shù)據(jù)的強(qiáng)一致性,mnode副本之間是通過同步的方式進(jìn)行數(shù)據(jù)復(fù)制的。
一個集群有多個dnode, 但一個dnode至多運行一個mnode實例。多個dnode情況下,哪個dnode可以作為mnode呢?這是完全由系統(tǒng)根據(jù)整個系統(tǒng)資源情況,自動指定的。用戶可通過CLI程序taos,在TDengine的console里,執(zhí)行如下命令:
SHOW MNODES;來查看mnode列表,該列表將列出mnode所處的dnode的End Point和角色(master, slave, unsynced 或offline)。 當(dāng)集群中第一個節(jié)點啟動時,該節(jié)點一定會運行一個mnode實例,否則該dnode無法正常工作,因為一個系統(tǒng)是必須有至少一個mnode的。如果numOfMnodes配置為2,啟動第二個dnode時,該dnode也將運行一個mnode實例。
為保證mnode服務(wù)的高可用性,numOfMnodes必須設(shè)置為2或更大。因為mnode保存的元數(shù)據(jù)必須是強(qiáng)一致的,如果numOfMnodes大于2,復(fù)制參數(shù)quorum自動設(shè)為2,也就是說,至少要保證有兩個副本寫入數(shù)據(jù)成功,才通知客戶端應(yīng)用寫入成功。
注意:一個TDengine高可用系統(tǒng),無論是vnode還是mnode, 都必須配置多個副本。
負(fù)載均衡
有三種情況,將觸發(fā)負(fù)載均衡,而且都無需人工干預(yù)。
- 當(dāng)一個新節(jié)點添加進(jìn)集群時,系統(tǒng)將自動觸發(fā)負(fù)載均衡,一些節(jié)點上的數(shù)據(jù)將被自動轉(zhuǎn)移到新節(jié)點上,無需任何人工干預(yù)。
- 當(dāng)一個節(jié)點從集群中移除時,系統(tǒng)將自動把該節(jié)點上的數(shù)據(jù)轉(zhuǎn)移到其他節(jié)點,無需任何人工干預(yù)。
- 如果一個節(jié)點過熱(數(shù)據(jù)量過大),系統(tǒng)將自動進(jìn)行負(fù)載均衡,將該節(jié)點的一些vnode自動挪到其他節(jié)點。
當(dāng)上述三種情況發(fā)生時,系統(tǒng)將啟動一各個節(jié)點的負(fù)載計算,從而決定如何挪動。
節(jié)點離線處理
如果一個節(jié)點離線,TDengine集群將自動檢測到。有如下兩種情況:
- 改節(jié)點離線超過一定時間(taos.cfg里配置參數(shù)offlineThreshold控制時長),系統(tǒng)將自動把該節(jié)點刪除,產(chǎn)生系統(tǒng)報警信息,觸發(fā)負(fù)載均衡流程。如果該被刪除的節(jié)點重現(xiàn)上線時,它將無法加入集群,需要系統(tǒng)管理員重新將其添加進(jìn)集群才會開始工作。
- 離線后,在offlineThreshold的時長內(nèi)重新上線,系統(tǒng)將自動啟動數(shù)據(jù)恢復(fù)流程,等數(shù)據(jù)完全恢復(fù)后,該節(jié)點將開始正常工作。
注意:如果一個虛擬節(jié)點組(包括mnode組)里每個節(jié)點都處于離線或unsynced狀態(tài),必須等該虛擬節(jié)點組里的所有節(jié)點都上線、都能交換狀態(tài)信息后,才能選出Master,該虛擬節(jié)點組才能對外提供服務(wù)。比如整個集群有3個節(jié)點,副本數(shù)為3,如果3個節(jié)點都宕機(jī),然后2個節(jié)點重啟,是無法工作的,只有等3個節(jié)點都重啟成功,才能對外服務(wù)。
Arbitrator的使用
如果副本數(shù)為偶數(shù),當(dāng)一個vnode group里一半或超過一半的vnode不工作時,是無法從中選出master的。同理,一半或超過一半的mnode不工作時,是無法選出mnode的master的,因為存在“split brain”問題。為解決這個問題,TDengine引入了arbitrator的概念。Arbitrator模擬一個vnode或mnode在工作,但只簡單的負(fù)責(zé)網(wǎng)絡(luò)連接,不處理任何數(shù)據(jù)插入或訪問。只要包含arbitrator在內(nèi),超過半數(shù)的vnode或mnode工作,那么該vnode group或mnode組就可以正常的提供數(shù)據(jù)插入或查詢服務(wù)。比如對于副本數(shù)為2的情形,如果一個節(jié)點A離線,但另外一個節(jié)點B正常,而且能連接到arbitrator, 那么節(jié)點B就能正常工作。
TDengine安裝包里帶有一個執(zhí)行程序tarbitrator, 找任何一臺Linux服務(wù)器運行它即可。該程序?qū)ο到y(tǒng)資源幾乎沒有要求,只需要保證有網(wǎng)絡(luò)連接即可。該應(yīng)用的命令行參數(shù)-p可以指定其對外服務(wù)的端口號,缺省是6042。配置每個taosd實例時,可以在配置文件taos.cfg里將參數(shù)arbitrator設(shè)置為arbitrator的End Point。如果該參數(shù)配置了,當(dāng)副本數(shù)為偶數(shù)數(shù),系統(tǒng)將自動連接配置的arbitrator。
點擊了解更多,搭建你的TDengine集群吧。
總結(jié)
以上是生活随笔為你收集整理的在集群的操作机上执行命令为什么会出现权限被拒绝_如何使用 TDengine 2.0 最新开源的集群功能?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑的基础知识_电脑键盘功能基础知识
- 下一篇: ngnix有版本要求吗_联想小新15 2