TDengine 集群安裝、管理
多個TDengine服務器,也就是多個taosd的運行實例可以組成一個集群,以保證TDengine的高可靠運行,并提供水平擴展能力。要了解TDengine 2.0的集群管理,需要對集群的基本概念有所了解,請看《TDengine整體架構》一章。而且在安裝集群之前,建議先按照《立即開始》一(yi)章安裝并體驗單節(jie)點功能。
集群的每個數據節點是由End Point來唯一標識的,End Point是由FQDN(Fully Qualified Domain Name)外加Port組成,比如 h1.yakult-sh.com.cn:6030。一般FQDN就是服務器的hostname,可通過Linux命令hostname -f獲取(如何配置FQDN,請參考:一篇文章說清楚TDengine的FQDN)。端口是(shi)這個(ge)(ge)數(shu)據節點(dian)對外服務的端口號,缺省是(shi)6030,但(dan)可(ke)以通(tong)過(guo)taos.cfg里配置參(can)數(shu)serverPort進行修(xiu)改。一個(ge)(ge)物理節點(dian)可(ke)能(neng)配置了多個(ge)(ge)hostname, TDengine會(hui)自(zi)動(dong)獲(huo)取第一個(ge)(ge),但(dan)也(ye)可(ke)以通(tong)過(guo)taos.cfg里配置參(can)數(shu)fqdn進行指(zhi)定。如果習慣(guan)IP地址(zhi)直接訪問,可(ke)以將參(can)數(shu)fqdn設(she)置為(wei)本(ben)節點(dian)的IP地址(zhi)。
TDengine的(de)(de)集群管(guan)理極其簡單,除添加(jia)和刪除節(jie)點需要(yao)人工(gong)干預之(zhi)外,其他全(quan)部是自動完成,最大程度的(de)(de)降(jiang)低了運維的(de)(de)工(gong)作(zuo)量。本章對(dui)集群管(guan)理的(de)(de)操(cao)作(zuo)做詳細的(de)(de)描述。
關于集群搭建請參考視頻教程。
準備工作
第零步:規劃(hua)集群(qun)所有物(wu)理(li)節(jie)點(dian)(dian)的FQDN,將(jiang)(jiang)規劃(hua)好(hao)的FQDN分別添加到每(mei)個物(wu)理(li)節(jie)點(dian)(dian)的/etc/hostname;修改(gai)每(mei)個物(wu)理(li)節(jie)點(dian)(dian)的/etc/hosts,將(jiang)(jiang)所有集群(qun)物(wu)理(li)節(jie)點(dian)(dian)的IP與(yu)FQDN的對(dui)應添加好(hao)。【如部(bu)署了DNS,請聯系網絡管理(li)員在(zai)DNS上做好(hao)相關配置】
第一步:如果搭建集群的物理節點中,存有之前的測試數據、裝過1.X的版本,或者裝過其他版本的TDengine,請先將其刪除,并清空所有數據(如果需要保留原有數據,請聯系濤思交付團隊進行舊版本升級、數據遷移),具體步驟請參考博客《TDengine多種安裝包的安裝和卸載》。
注意1:因為FQDN的信息會寫進文件,如果之前沒有配置或者更改FQDN,且啟動了TDengine。請一定在確保數據無用或者備份的前提下,清理一下之前的數據(rm -rf /var/lib/taos/*);
注意2:客(ke)戶端(duan)也需要配置(zhi),確保它可(ke)以(yi)正確解析每個節點的FQDN配置(zhi),不管是通過DNS服務,還是修改 hosts 文件。
第二步:建議關閉所有物理節點的防火墻,至少保證端口:6030 - 6042的TCP和UDP端口都是開放的。強烈建議先(xian)關(guan)閉防(fang)火墻(qiang),集(ji)群搭(da)建完畢之后(hou),再來配(pei)置端口;
第三步:在所有物理節點安裝TDengine,且版本必須是一致的,但不要啟動taosd。安裝時(shi),提(ti)示(shi)輸(shu)入(ru)(ru)是否要加入(ru)(ru)一(yi)(yi)個已經存在(zai)的(de)TDengine集群(qun)時(shi),第(di)一(yi)(yi)個物理節(jie)點(dian)直接回車創建新(xin)集群(qun),后續(xu)物理節(jie)點(dian)則輸(shu)入(ru)(ru)該(gai)集群(qun)任(ren)何一(yi)(yi)個在(zai)線的(de)物理節(jie)點(dian)的(de)FQDN:端口(kou)號(默認6030);
第四步:檢查所有數據節點(dian),以及(ji)應(ying)用程序所在(zai)物理節點(dian)的網絡設置:
- 每個物理節點上執行命令
hostname -f,查看和確認所有節點的hostname是不相同的(應用驅動所在節點無需做此項檢查); - 每個物理節點上執行
ping host,其中host是其他物理節點的hostname,看能否ping通其它物理節點;如果不能ping通,需要檢查網絡設置,或/etc/hosts文件(Windows系統默認路徑為C:\Windows\system32\drivers\etc\hosts),或DNS的配置。如果無法ping通,是無法組成集群的; - 從應用運行的物理節點,ping taosd運行的數據節點,如果無法ping通,應用是無法連接taosd的,請檢查應用所在物理節點的DNS設置或hosts文件;
- 每個數據節點的End Point就是輸出的hostname外加端口號,比如
h1.yakult-sh.com.cn:6030。
第五步:修改(gai)TDengine的配(pei)置文件(所有節(jie)點的文件/etc/taos/taos.cfg都需要(yao)修改(gai))。假設準備啟動(dong)的第一個數據節(jie)點End Point為 h1.yakult-sh.com.cn:6030,其與集(ji)群配(pei)置相關參數如(ru)下(xia):
// firstEp 是每個數據節點首次啟動后連接的第一個數據節點
firstEp h1.yakult-sh.com.cn:6030
// 必須配置為本數據節點的FQDN,如果本機只有一個hostname, 可注釋掉本項
fqdn h1.yakult-sh.com.cn
// 配置本數據節點的端口號,缺省是6030
serverPort 6030
// 副本數為偶數的時候,需要配置,請參考《Arbitrator的使用》的部分
arbitrator ha.yakult-sh.com.cn:6042
一定要修改的參數是firstEp和fqdn。在每個數據節點,firstEp需全部配置成一樣,但fqdn一定要配置成其所在數據節點的值。其(qi)他參數可不做(zuo)任(ren)何修改,除非你(ni)很清(qing)楚為(wei)什(shen)么要(yao)修改。
加入到集群中的數據節點dnode,涉及集群相關的下表9項參數必須完全相同,否則不能成功加入到集群中。
| # | 配置參數名稱 | 含義 |
|---|---|---|
| 1 | numOfMnodes | 系統中管理節點個數 |
| 2 | mnodeEqualVnodeNum | 一個mnode等同于vnode消耗的個數 |
| 3 | offlineThreshold | dnode離線閾值,超過該時間將導致Dnode離線 |
| 4 | statusInterval | dnode向mnode報告狀態時長 |
| 5 | arbitrator | 系統中裁決器的End Point |
| 6 | timezone | 時區 |
| 7 | balance | 是否啟動負載均衡 |
| 8 | maxTablesPerVnode | 每個vnode中能夠創建的最大表個數 |
| 9 | maxVgroupsPerDb | 每個DB中能夠使用的最大vgroup個數 |
備注:在 2.0.19.0 及更早的版本中,除以上 9 項參數外,dnode 加入(ru)集群(qun)時,還會要求 locale 和 charset 參數的取(qu)值也一致。
啟動第一個數據節點
按照《立即開始》里(li)的指示(shi),啟(qi)動第一個數據節(jie)點,例如h1.yakult-sh.com.cn,然后執行taos, 啟(qi)動taos shell,從shell里(li)執行命(ming)令"show dnodes;",如下所示(shi):
Welcome to the TDengine shell from Linux, Client Version:2.0.0.0
Copyright (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>
上述命令(ling)里,可以(yi)看(kan)到(dao)這個剛(gang)啟(qi)動的這個數據節(jie)點(dian)的End Point是:h1.taos.com:6030,就是這個新集(ji)群的firstEp。
啟動后續數據節點
將后續的數據(ju)節(jie)點添加到現有集群,具體有以下幾步:
-
按照《立即開始》一章的(de)方法在每個物理節點(dian)啟動taosd;(注(zhu)意:每個物理節點(dian)都需要在 taos.cfg 文件中將 firstEp參數配置(zhi)為新(xin)集群首個節點(dian)的(de) End Point——在本例中是(shi) h1.taos.com:6030)
-
在第一(yi)個數據節點,使用CLI程序taos,登錄進TDengine系統,執行命令:
CREATE DNODE "h2.taos.com:6030";將新數據節點的End Point (準備工作中第四步獲知的) 添加進集群的EP列表。"fqdn:port"需要用雙引號引起來,否則出錯。請(qing)注(zhu)意(yi)將示例(li)的“h2.taos.com:6030" 替換為這個新數據節點的End Point。
-
然后執行命令
SHOW DNODES;查(cha)看新節點(dian)是否(fou)被成功加(jia)入。如果該(gai)被加(jia)入的數據節點(dian)處(chu)于離線(xian)狀(zhuang)態,請做兩個(ge)檢查(cha):
- 查看該數據節點的taosd是否正常工作,如果沒有正常運行,需要先檢查為什么
- 查看該數據節點taosd日志文件taosdlog.0里前面幾行日志(一般在/var/log/taos目錄),看日志里輸出的該數據節點fqdn以及端口號是否為剛添加的End Point。如果不一致,需要將正確的End Point添加進去。
按照上(shang)述步驟可以源源不斷的將新(xin)的數據節(jie)點加入到集群。
提示:
- 任何已經加入集群在線的數據節點,都可以作為后續待加入節點的 firstEp。
- firstEp 這個參數僅僅在該數據節點首次加入集群時有作用,加入集群后,該數據節點會保存最新的 mnode 的 End Point 列表,不再依賴這個參數。
- 接下來,配置文件中的 firstEp 參數就主要在客戶端連接的時候使用了,例如 taos shell 如果不加參數,會默認連接由 firstEp 指定的節點。
- 兩個沒有配置 firstEp 參數的數據節點 dnode 啟動后,會獨立運行起來。這個時候,無法將其中一個數據節點加入到另外一個數據節點,形成集群。無法將兩個獨立的集群合并成為新的集群。
數據節點管理
上(shang)面已經介(jie)紹如(ru)何從零開始搭建集群(qun)。集群(qun)組建完后,還可以隨(sui)時(shi)添加新的(de)數(shu)據(ju)節點進行(xing)擴容,或刪除數(shu)據(ju)節點,并檢查集群(qun)當前狀態。
提示:
- 以下所有執行命令的操作需要先登陸進TDengine系統,必要時請使用root權限。
添加數據節點
執行CLI程序taos,執行:
CREATE DNODE "fqdn:port";
將新數據節點的End Point添加進集群的EP列表。"fqdn:port"需要用雙引號引起來,否(fou)則出錯。一個數據節點(dian)對外服務的(de)(de)(de)fqdn和port可以(yi)通過(guo)配置文件(jian)taos.cfg進行(xing)配置,缺省(sheng)是自動獲取。【強烈不建(jian)議(yi)用(yong)自動獲取方式來配置FQDN,可能導致生成的(de)(de)(de)數據節點(dian)的(de)(de)(de)End Point不是所期望的(de)(de)(de)】
刪除數據節點
執(zhi)行(xing)CLI程序taos,執(zhi)行(xing):
DROP DNODE "fqdn:port | dnodeID";
通過"fqdn:port"或(huo)"dnodeID"來(lai)指定一個具體的節點(dian)都是可以(yi)的。其中(zhong)fqdn是被刪(shan)除的節點(dian)的FQDN,port是其對外服務器的端口號;dnodeID可以(yi)通過SHOW DNODES獲得(de)。
【注意】
-
一(yi)個數(shu)據(ju)節點(dian)一(yi)旦被(bei)drop之(zhi)后(hou),不能重新加(jia)入集(ji)群(qun)。需要將此節點(dian)重新部署(清空數(shu)據(ju)文件夾)。集(ji)群(qun)在(zai)完成drop dnode操作之(zhi)前,會將該dnode的數(shu)據(ju)遷移走(zou)。
-
請(qing)注意 drop dnode 和 停止(zhi)taosd進程(cheng)是兩個不同的(de)概念,不要混淆:因為刪除dnode之前要執(zhi)行遷(qian)移數據的(de)操作(zuo),因此(ci)被刪除的(de)dnode必(bi)須保持在(zai)線狀態(tai)。待刪除操作(zuo)結束之后,才能停止(zhi)taosd進程(cheng)。
-
一個(ge)數(shu)據(ju)節(jie)(jie)點(dian)被drop之后(hou),其他節(jie)(jie)點(dian)都會感知到這個(ge)dnodeID的(de)刪除操作,任(ren)何集群中的(de)節(jie)(jie)點(dian)都不會再接收此dnodeID的(de)請求。
-
dnodeID是(shi)集群(qun)自(zi)動分配的(de),不(bu)得人工指(zhi)定。它在生成時(shi)是(shi)遞增的(de),不(bu)會重復(fu)。
手動遷移數據節點
手動將某個(ge)vnode遷移到指(zhi)定(ding)的(de)dnode。
執行(xing)CLI程序(xu)taos,執行(xing):
ALTER DNODE <source-dnodeId> BALANCE "VNODE:<vgId>-DNODE:<dest-dnodeId>";
其中:source-dnodeId是源dnodeId,也就是待(dai)遷移(yi)的(de)vnode所在的(de)dnodeID;vgId可以通(tong)過SHOW VGROUPS獲得,列(lie)(lie)表的(de)第(di)一列(lie)(lie);dest-dnodeId是目標(biao)dnodeId。
【注意】
- 只有在集群的自動負載均衡選項關閉時(balance設置為0),才允許手動遷移。
- 只有處于正常工作狀態的vnode才能被遷移:master/slave,當處于offline/unsynced/syncing狀態時,是不能遷移的。
- 遷移前,務必核實目標dnode的資源足夠:CPU、內存、硬盤。
查看數據節點
執行CLI程序taos,執行:
SHOW DNODES;
它(ta)將列出集(ji)群(qun)中所有的(de)dnode,每個dnode的(de)ID,end_point(fqdn:port),狀態(ready, offline等),vnode數(shu)目,還(huan)未使(shi)用(yong)的(de)vnode數(shu)目等信息。在添加(jia)或刪(shan)除一個數(shu)據節(jie)點(dian)后,可(ke)以使(shi)用(yong)該命令(ling)查看。
查看虛擬節點組
為充分利(li)用多(duo)(duo)核技術,并提供scalability,數據需(xu)要分片處理。因此(ci)TDengine會將一個(ge)(ge)DB的(de)數據切分成多(duo)(duo)份,存放在多(duo)(duo)個(ge)(ge)vnode里。這(zhe)些vnode可(ke)能分布在多(duo)(duo)個(ge)(ge)數據節點dnode里,這(zhe)樣就實現了水平擴展。一個(ge)(ge)vnode僅僅屬于一個(ge)(ge)DB,但一個(ge)(ge)DB可(ke)以有多(duo)(duo)個(ge)(ge)vnode。vnode的(de)是mnode根據當前系統(tong)資源的(de)情(qing)況(kuang),自動進行(xing)分配的(de),無需(xu)任何人(ren)工干預。
執行CLI程(cheng)序taos,執行:
USE SOME_DATABASE;
SHOW VGROUPS;
vnode的高可用性
TDengine通過多副本的(de)機制來提供系統(tong)的(de)高可(ke)用性,包括vnode和mnode的(de)高可(ke)用性。
vnode的(de)副(fu)本(ben)(ben)數(shu)是與(yu)DB關聯的(de),一個集群(qun)(qun)里可以有多個DB,根據運(yun)營的(de)需求,每個DB可以配置不同的(de)副(fu)本(ben)(ben)數(shu)。創(chuang)建數(shu)據庫時,通過參數(shu)replica 指定(ding)副(fu)本(ben)(ben)數(shu)(缺省(sheng)為1)。如(ru)果副(fu)本(ben)(ben)數(shu)為1,系統的(de)可靠性無(wu)法(fa)保證,只要數(shu)據所(suo)在(zai)的(de)節(jie)點(dian)宕機,就將(jiang)無(wu)法(fa)提供(gong)服務。集群(qun)(qun)的(de)節(jie)點(dian)數(shu)必須大于等(deng)于副(fu)本(ben)(ben)數(shu),否(fou)則(ze)創(chuang)建表時將(jiang)返回(hui)錯誤(wu)"more dnodes are needed"。比如(ru)下面的(de)命(ming)令將(jiang)創(chuang)建副(fu)本(ben)(ben)數(shu)為3的(de)數(shu)據庫demo:
CREATE DATABASE demo replica 3;
一(yi)個(ge)DB里(li)(li)(li)的(de)(de)(de)(de)數(shu)(shu)(shu)據會被(bei)切(qie)片分到(dao)多個(ge)vnode group,vnode group里(li)(li)(li)的(de)(de)(de)(de)vnode數(shu)(shu)(shu)目就是(shi)(shi)DB的(de)(de)(de)(de)副本數(shu)(shu)(shu),同(tong)一(yi)個(ge)vnode group里(li)(li)(li)各(ge)vnode的(de)(de)(de)(de)數(shu)(shu)(shu)據是(shi)(shi)完全一(yi)致的(de)(de)(de)(de)。為保證(zheng)高可用性,vnode group里(li)(li)(li)的(de)(de)(de)(de)vnode一(yi)定要分布(bu)在不同(tong)的(de)(de)(de)(de)數(shu)(shu)(shu)據節(jie)點dnode里(li)(li)(li)(實際(ji)部(bu)署時,需要在不同(tong)的(de)(de)(de)(de)物理(li)機上),只(zhi)要一(yi)個(ge)vgroup里(li)(li)(li)超過(guo)半(ban)數(shu)(shu)(shu)的(de)(de)(de)(de)vnode處于工(gong)作狀態,這個(ge)vgroup就能正常的(de)(de)(de)(de)對外服務(wu)。
一個(ge)(ge)數據(ju)節點dnode里可(ke)能(neng)有多個(ge)(ge)DB的(de)(de)數據(ju),因此一個(ge)(ge)dnode離(li)線(xian)時,可(ke)能(neng)會影響到多個(ge)(ge)DB。如果一個(ge)(ge)vnode group里的(de)(de)一半或一半以上的(de)(de)vnode不工作(zuo),那么(me)該vnode group就無法對外服務,無法插(cha)入或讀取數據(ju),這(zhe)樣會影響到它所屬(shu)的(de)(de)DB的(de)(de)一部分表的(de)(de)讀寫(xie)操作(zuo)。
因為vnode的引(yin)入(ru),無法簡(jian)單地給出結論(lun):“集(ji)群(qun)中過半數據節(jie)(jie)點dnode工作,集(ji)群(qun)就應(ying)該工作”。但是對于簡(jian)單的情(qing)形(xing),很(hen)好下結論(lun)。比如副(fu)本(ben)數為3,只有(you)三個(ge)dnode,那如果(guo)(guo)僅(jin)有(you)一(yi)個(ge)節(jie)(jie)點不(bu)工作,整個(ge)集(ji)群(qun)還(huan)是可(ke)以正常工作的,但如果(guo)(guo)有(you)兩(liang)個(ge)數據節(jie)(jie)點不(bu)工作,那整個(ge)集(ji)群(qun)就無法正常工作了。
Mnode的高可用性
TDengine集(ji)群是(shi)由mnode (taosd的(de)(de)一(yi)個模(mo)塊,管(guan)理節(jie)點) 負責管(guan)理的(de)(de),為(wei)保證mnode的(de)(de)高可用,可以配置多個mnode副(fu)(fu)本(ben)(ben)(ben),副(fu)(fu)本(ben)(ben)(ben)數(shu)由系(xi)統配置參數(shu)numOfMnodes決定,有效(xiao)范圍為(wei)1-3。為(wei)保證元數(shu)據的(de)(de)強一(yi)致性(xing),mnode副(fu)(fu)本(ben)(ben)(ben)之間是(shi)通過同步(bu)的(de)(de)方式進(jin)行數(shu)據復(fu)制的(de)(de)。
一個(ge)(ge)集群(qun)有多(duo)(duo)個(ge)(ge)數據(ju)節(jie)點dnode,但一個(ge)(ge)dnode至多(duo)(duo)運行一個(ge)(ge)mnode實(shi)例(li)。多(duo)(duo)個(ge)(ge)dnode情況下,哪(na)個(ge)(ge)dnode可以作為mnode呢?這是完(wan)全由系統(tong)根據(ju)整個(ge)(ge)系統(tong)資源情況,自動(dong)指定的(de)。用戶(hu)可通(tong)過CLI程序taos,在TDengine的(de)console里(li),執行如下命(ming)令:
SHOW MNODES;
來查看mnode列(lie)表,該(gai)(gai)(gai)列(lie)表將(jiang)列(lie)出mnode所處的(de)dnode的(de)End Point和角色(master, slave, unsynced 或offline)。當集群中第一(yi)個數據節點啟(qi)動時,該(gai)(gai)(gai)數據節點一(yi)定(ding)會運行一(yi)個mnode實例(li),否則該(gai)(gai)(gai)數據節點dnode無(wu)法正(zheng)常(chang)工(gong)作(zuo),因為一(yi)個系統是必須有至少(shao)一(yi)個mnode的(de)。如(ru)果numOfMnodes配置(zhi)為2,啟(qi)動第二個dnode時,該(gai)(gai)(gai)dnode也將(jiang)運行一(yi)個mnode實例(li)。
為保證mnode服務的高可用性,numOfMnodes必(bi)須設(she)置為2或(huo)更(geng)大(da)(da)。因(yin)為mnode保存的元數據(ju)必(bi)須是強一致(zhi)的,如果numOfMnodes大(da)(da)于2,復制參數quorum自動設(she)為2,也就(jiu)是說(shuo),至少要保證有兩個(ge)副本寫入數據(ju)成功,才通知客戶(hu)端應用寫入成功。
注意:一個TDengine高可用系統,無論是(shi)vnode還是(shi)mnode, 都必須配(pei)置多(duo)個副(fu)本。
負載均衡
有三種情況(kuang),將觸發負載均衡,而(er)且(qie)都無需人工干預。
- 當一個新數據節點添加進集群時,系統將自動觸發負載均衡,一些節點上的數據將被自動轉移到新數據節點上,無需任何人工干預。
- 當一個數據節點從集群中移除時,系統將自動把該數據節點上的數據轉移到其他數據節點,無需任何人工干預。
- 如果一個數據節點過熱(數據量過大),系統將自動進行負載均衡,將該數據節點的一些vnode自動挪到其他節點。
當上述三(san)種情況發生(sheng)時,系統將(jiang)啟(qi)動各(ge)個(ge)數據節點(dian)的負(fu)載計算,從(cong)而決定如何挪動。
【提示】負載均衡由參數balance控制,它決定是否啟動自動負載均衡, 0 表示禁用, 1 表示啟用自動負載均衡。
數據節點離線處理
如果一個數據節(jie)點離線,TDengine集群(qun)將(jiang)自(zi)動(dong)檢測到。有如下兩種情況(kuang):
- 該數據節點離線超過一定時間(taos.cfg里配置參數offlineThreshold控制時長),系統將自動把該數據節點刪除,產生系統報警信息,觸發負載均衡流程。如果該被刪除的數據節點重新上線時,它將無法加入集群,需要系統管理員重新將其添加進集群才會開始工作。
- 離線后,在offlineThreshold的時長內重新上線,系統將自動啟動數據恢復流程,等數據完全恢復后,該節點將開始正常工作。
注意:如(ru)(ru)果一(yi)個虛擬(ni)節點組(包括mnode組)里(li)所歸(gui)屬的每個數據節點都(dou)處于離線(xian)或unsynced狀(zhuang)態,必(bi)須等(deng)該(gai)虛擬(ni)節點組里(li)的所有數據節點都(dou)上(shang)線(xian)、都(dou)能交換狀(zhuang)態信息后,才能選出Master,該(gai)虛擬(ni)節點組才能對外(wai)提供服務。比如(ru)(ru)整個集群(qun)有3個數據節點,副本數為3,如(ru)(ru)果3個數據節點都(dou)宕機,然后2個數據節點重啟,是無(wu)法工作的,只有等(deng)3個數據節點都(dou)重啟成功,才能對外(wai)服務。
Arbitrator的使用
如果副(fu)本數(shu)為(wei)偶數(shu),當一(yi)個(ge)(ge) vnode group 里(li)一(yi)半(ban)或(huo)(huo)超過一(yi)半(ban)的(de)(de) vnode 不(bu)(bu)工(gong)(gong)作(zuo)時(shi)(shi),是無(wu)法(fa)從(cong)中選出 master 的(de)(de)。同理,一(yi)半(ban)或(huo)(huo)超過一(yi)半(ban)的(de)(de) mnode 不(bu)(bu)工(gong)(gong)作(zuo)時(shi)(shi),是無(wu)法(fa)選出 mnode 的(de)(de) master 的(de)(de),因為(wei)存在“split brain”問(wen)題。為(wei)解決這個(ge)(ge)問(wen)題,TDengine 引(yin)入(ru)了 Arbitrator 的(de)(de)概念。Arbitrator 模擬一(yi)個(ge)(ge) vnode 或(huo)(huo) mnode 在工(gong)(gong)作(zuo),但只(zhi)簡單(dan)的(de)(de)負責網絡連接,不(bu)(bu)處理任何數(shu)據插(cha)入(ru)或(huo)(huo)訪問(wen)。只(zhi)要包含 Arbitrator 在內,超過半(ban)數(shu)的(de)(de) vnode 或(huo)(huo) mnode 工(gong)(gong)作(zuo),那(nei)么(me)(me)該 vnode group 或(huo)(huo) mnode 組就(jiu)可(ke)以正常(chang)的(de)(de)提(ti)供數(shu)據插(cha)入(ru)或(huo)(huo)查(cha)詢服務。比如對于副(fu)本數(shu)為(wei) 2 的(de)(de)情形(xing),如果一(yi)個(ge)(ge)節(jie)(jie)點 A 離線(xian),但另外一(yi)個(ge)(ge)節(jie)(jie)點 B 正常(chang),而且能(neng)連接到 Arbitrator,那(nei)么(me)(me)節(jie)(jie)點 B 就(jiu)能(neng)正常(chang)工(gong)(gong)作(zuo)。
總之,在目前版本(ben)下,TDengine 建議在雙副本(ben)環境要配(pei)置 Arbitrator,以提升系統的可用性。
Arbitrator 的執行程序(xu)名為(wei) tarbitrator。該程序(xu)對系統資(zi)源幾乎沒(mei)有(you)要(yao)求,只需要(yao)保證有(you)網絡連接,找任何一臺 Linux 服務器運行它即(ji)可。以下(xia)簡要(yao)描(miao)述(shu)安(an)裝(zhuang)配置的步(bu)驟:
- 請點擊 安裝包下載,在 TDengine Arbitrator Linux 一節中,選擇合適的版本下載并安裝。
- 該應用的命令行參數
-p可以指定其對外服務的端口號,缺省是 6042。 - 修改每個 taosd 實例的配置文件,在 taos.cfg 里將參數 arbitrator 設置為 tarbitrator 程序所對應的 End Point。(如果該參數配置了,當副本數為偶數時,系統將自動連接配置的 Arbitrator。如果副本數為奇數,即使配置了 Arbitrator,系統也不會去建立連接。)
- 在配置文件中配置了的 Arbitrator,會出現在
SHOW DNODES;指令的返回結果中,對應的 role 列的值會是“arb”。
查看集群 Arbitrator 的狀態【2.0.14.0 以后支持(chi)】
SHOW DNODES;

