六月婷婷AV,国产偷窥猎奇福利二区,日韩三级片。,好吊色网站,日韩成人中文在线视频,国产亚洲午夜啪啪,亚洲欧美另类国产精品,国产成人av1,任你艹在线观看

TDengine集群設(shè)計

1: 集群與主要邏輯單元

TDengine Database是基于硬件、軟件系統(tǒng)不可靠、一定會有故障的假設(shè)進行設(shè)計的,是基于任何單臺計算機都無足夠能力處理海量數(shù)據(jù)的假設(shè)進行設(shè)計的。因此TDengine Database從研發(fā)的第一天起,就按照分布式高可靠架構(gòu)進行設(shè)計,是完全去中心化的,是水平擴展的,這樣任何單臺或多臺服務(wù)器宕機或軟件錯誤都不影響系統(tǒng)的服務(wù)。通過節(jié)點虛擬化并輔以自動化負(fù)載均衡技術(shù),TDengine Database能最大限度地利用異構(gòu)集群中的計算和存儲資源。而且只要數(shù)據(jù)副本數(shù)大于一,無論是硬軟件的升級、還是IDC的遷移等都無需停止集群的服務(wù),極大地保證系統(tǒng)的正常運行,并且降低了系統(tǒng)管理員和運維人員的工作量。

下面的示例圖上有八個物理節(jié)點,每個物理節(jié)點被邏輯的劃分為多個虛擬節(jié)點。下面對系統(tǒng)的基本概念進行介紹。

TDengine Database

物理節(jié)點(dnode):集群中的一物理服務(wù)器或云平臺上的一虛擬機。為安全以及通訊效率,一個物理節(jié)點可配置兩張網(wǎng)卡,或兩個IP地址。其中一張網(wǎng)卡用于集群內(nèi)部通訊,其IP地址為privateIp, 另外一張網(wǎng)卡用于與集群外部應(yīng)用的通訊,其IP地址為publicIp。在一些云平臺(如阿里云),對外的IP地址是映射過來的,因此publicIp還有一個對應(yīng)的內(nèi)部IP地址internalIp(與privateIp不同)。對于只有一個IP地址的物理節(jié)點,publicIp, privateIp以及internalIp都是同一個地址,沒有任何區(qū)別。一個dnode上有而且只有一個taosd實例運行。

虛擬數(shù)據(jù)節(jié)點(vnode)在物理節(jié)點之上的可獨立運行的基礎(chǔ)邏輯單元,時序數(shù)據(jù)寫入、存儲、查詢等操作邏輯都在虛擬節(jié)點中進行(圖中V),采集的時序數(shù)據(jù)就存儲在vnode上。一個vnode包含固定數(shù)量的表。當(dāng)創(chuàng)建一張新表時,系統(tǒng)會檢查是否需要創(chuàng)建新的vnode。一個物理節(jié)點上能創(chuàng)建的vnode的數(shù)量取決于物理節(jié)點的硬件資源。一個vnode只屬于一個DB,但一個DB可以有多個vnode。

虛擬數(shù)據(jù)節(jié)點組(vgroup):位于不同物理節(jié)點的vnode可以組成一個虛擬數(shù)據(jù)節(jié)點組vnode group(如上圖dnode0中的V0, dnode1中的V1, dnode6中的V2屬于同一個虛擬節(jié)點組)。歸屬于同一個vgroup的虛擬節(jié)點采取master/slave的方式進行管理。寫只能在master上進行,但采用asynchronous的方式將數(shù)據(jù)同步到slave,這樣確保了一份數(shù)據(jù)在多個物理節(jié)點上有拷貝。如果master節(jié)點宕機,其他節(jié)點監(jiān)測到后,將重新選舉vgroup里的master, 新的master能繼續(xù)處理數(shù)據(jù)請求,從而保證系統(tǒng)運行的可靠性。一個vgroup里虛擬節(jié)點個數(shù)就是數(shù)據(jù)的副本數(shù)。如果一個DB的副本數(shù)為N,系統(tǒng)必須有至少N個物理節(jié)點。副本數(shù)在創(chuàng)建DB時通過參數(shù)replica可以指定,缺省為1。使用TDengine, 數(shù)據(jù)的安全依靠多副本解決,因此不再需要昂貴的磁盤陣列等存儲設(shè)備。

虛擬管理節(jié)點(mnode)負(fù)責(zé)所有節(jié)點運行狀態(tài)的監(jiān)控和維護,以及節(jié)點之間的負(fù)載均衡(圖中M)。同時,虛擬管理節(jié)點也負(fù)責(zé)元數(shù)據(jù)(包括用戶、數(shù)據(jù)庫、表、靜態(tài)標(biāo)簽等)的存儲和管理,因此也稱為Meta Node。TDengine集群中可配置多個(最多不超過5個) mnode,它們自動構(gòu)建成為一個管理節(jié)點集群(圖中M0, M1, M2)。mnode間采用master/slave的機制進行管理,而且采取強一致方式進行數(shù)據(jù)同步。mnode集群的創(chuàng)建由系統(tǒng)自動完成,無需人工干預(yù)。每個dnode上至多有一個mnode,而且每個dnode都知道整個集群中所有mnode的IP地址。

taosc:一個軟件模塊,是TDengine給應(yīng)用提供的驅(qū)動程序(driver),內(nèi)嵌于JDBC、ODBC driver中,或者C語言連接庫里。應(yīng)用都是通過taosc而不是直接來與整個集群進行交互的。這個模塊負(fù)責(zé)獲取并緩存元數(shù)據(jù);將插入、查詢等請求轉(zhuǎn)發(fā)到正確的虛擬節(jié)點;在把結(jié)果返回給應(yīng)用時,還需要負(fù)責(zé)最后一級的聚合、排序、過濾等操作。對于JDBC, ODBC, C/C++接口而言,這個模塊是在應(yīng)用所處的計算機上運行,但消耗的資源很小。為支持全分布式的REST接口,taosc在TDengine集群的每個dnode上都有一運行實例。

對外服務(wù)地址TDengine集群可以容納單臺、多臺甚至幾千臺物理節(jié)點。應(yīng)用只需要向集群中任何一個物理節(jié)點的publicIp發(fā)起連接即可。啟動CLI應(yīng)用taos時,選項-h需要提供的就是publicIp。

master/secondIp每一個dnode都需要配置一個masterIp。dnode啟動后,將對配置的masterIp發(fā)起加入集群的連接請求。masterIp是已經(jīng)創(chuàng)建的集群中的任何一個節(jié)點的privateIp,對于集群中的第一個節(jié)點,就是它自己的privateIp。為保證連接成功,每個dnode還可配置secondIp, 該IP地址也是已創(chuàng)建的集群中的任何一個節(jié)點的privateIp。如果一個節(jié)點連接masterIp失敗,它將試圖鏈接secondIp。

dnode啟動后,會獲知集群的mnode IP列表,并且定時向mnode發(fā)送狀態(tài)信息。

vnode與mnode只是邏輯上的劃分,都是執(zhí)行程序taosd里的不同線程而已,無需安裝不同的軟件,做任何特殊的配置。最小的系統(tǒng)配置就是一個物理節(jié)點,vnode,mnode和taosc都存在而且都正常運行,但單一節(jié)點無法保證系統(tǒng)的高可靠。

2: 一典型的操作流程

為解釋vnode, mnode, taosc和應(yīng)用之間的關(guān)系以及各自扮演的角色,下面對寫入數(shù)據(jù)這個典型操作的流程進行剖析。

TDengine Database
  1. 應(yīng)用通過JDBC、ODBC或其他API接口發(fā)起插入數(shù)據(jù)的請求。
  2. taosc會檢查緩存,看是有保存有該表的meta data。如果有,直接到第4步。如果沒有,taosc將向mnode發(fā)出get meta-data請求。
  3. mnode將該表的meta-data返回給taosc。Meta-data包含有該表的schema, 而且還有該表所屬的vgroup信息(vnode ID以及所在的dnode的IP地址,如果副本數(shù)為N,就有N組vnodeID/IP)。如果taosc遲遲得不到mnode回應(yīng),而且存在多個mnode,taosc將向下一個mnode發(fā)出請求。
  4. taosc向master vnode發(fā)起插入請求。
  5. vnode插入數(shù)據(jù)后,給taosc一個應(yīng)答,表示插入成功。如果taosc遲遲得不到vnode的回應(yīng),taosc會認(rèn)為該節(jié)點已經(jīng)離線。這種情況下,如果被插入的數(shù)據(jù)庫有多個副本,taosc將向vgroup里下一個vnode發(fā)出插入請求。
  6. taosc通知APP,寫入成功。

對于第二和第三步,taosc啟動時,并不知道m(xù)node的IP地址,因此會直接向配置的集群對外服務(wù)的IP地址發(fā)起請求。如果接收到該請求的dnode并沒有配置mnode,該dnode會在回復(fù)的消息中告知mnode的IP地址列表(如果有多個dnodes,mnode的IP地址可以有多個),這樣taosc會重新向新的mnode的IP地址發(fā)出獲取meta-data的請求。

對于第四和第五步,沒有緩存的情況下,taosc無法知道虛擬節(jié)點組里誰是master,就假設(shè)第一個vnodeID/IP就是master,向它發(fā)出請求。如果接收到請求的vnode并不是master,它會在回復(fù)中告知誰是master,這樣taosc就向建議的master vnode發(fā)出請求。一旦得到插入成功的回復(fù),taosc會緩存住master節(jié)點的信息。

上述是插入數(shù)據(jù)的流程,查詢、計算的流程也完全一致。taosc把這些復(fù)雜的流程全部封裝屏蔽了,因此應(yīng)用無需處理重定向、獲取meta data等細(xì)節(jié),完全是透明的。

通過taosc緩存機制,只有在第一次對一張表操作時,才需要訪問mnode,因此mnode不會成為系統(tǒng)瓶頸。但因為schema有可能變化,而且vgroup有可能發(fā)生改變(比如負(fù)載均衡發(fā)生),因此taosc需要定時自動刷新緩存。

3: 數(shù)據(jù)分區(qū)

vnode(虛擬數(shù)據(jù)節(jié)點)保存采集的時序數(shù)據(jù),而且查詢、計算都在這些節(jié)點上進行。為便于負(fù)載均衡、數(shù)據(jù)恢復(fù)、支持異構(gòu)環(huán)境,TDengine將一個物理節(jié)點根據(jù)其計算和存儲資源切分為多個vnode。這些vnode的管理是TDengine自動完成的,對應(yīng)用完全透明。

對于單獨一個數(shù)據(jù)采集點,無論其數(shù)據(jù)量多大,一個vnode(或vnode group, 如果副本數(shù)大于1)有足夠的計算資源和存儲資源來處理(如果每秒生成一條16字節(jié)的記錄,一年產(chǎn)生的原始數(shù)據(jù)不到0.5G),因此TDengine將一張表的所有數(shù)據(jù)都存放在一個vnode里,而不會讓同一個采集點的數(shù)據(jù)分布到兩個或多個dnode上。而且一個vnode可存儲多張表的數(shù)據(jù),一個vnode可容納的表的數(shù)目由配置參數(shù)sessionsPerVnode指定,缺省為2000。設(shè)計上,一個vnode里所有的表都屬于同一個DB。因此一個數(shù)據(jù)庫DB需要的vnode或vgroup的個數(shù)等于:數(shù)據(jù)庫表的數(shù)目/sessionsPerVnode。

創(chuàng)建DB時,系統(tǒng)并不會馬上分配資源。但當(dāng)創(chuàng)建一張表時,系統(tǒng)將看是否有已經(jīng)分配的vnode, 而且是否有空位,如果有,立即在該有空位的vnode創(chuàng)建表。如果沒有,系統(tǒng)將從集群中,根據(jù)當(dāng)前的負(fù)載情況,在一個dnode上創(chuàng)建一新的vnode, 然后創(chuàng)建表。如果DB有多個副本,系統(tǒng)不是只創(chuàng)建一個vnode,而是一個vgroup(虛擬數(shù)據(jù)節(jié)點組)。系統(tǒng)對vnode的數(shù)目沒有任何限制,僅僅受限于物理節(jié)點本身的計算和存儲資源。

sessionsPerVnode的設(shè)置需要考慮具體場景,創(chuàng)建DB時,可以個性化指定該參數(shù)。該參數(shù)不宜過大,也不宜過小。過小,極端情況,就是每個數(shù)據(jù)采集點一個vnode, 這樣導(dǎo)致系統(tǒng)數(shù)據(jù)文件過多。過大,虛擬化帶來的優(yōu)勢就會喪失。給定集群計算資源的情況下,整個系統(tǒng)vnode的個數(shù)應(yīng)該是CPU核的數(shù)目的兩倍以上。

4: 負(fù)載均衡

每個dnode(物理節(jié)點)都定時向 mnode(虛擬管理節(jié)點)報告其狀態(tài)(包括硬盤空間、內(nèi)存大小、CPU、網(wǎng)絡(luò)、虛擬節(jié)點個數(shù)等),因此mnode了解整個集群的狀態(tài)?;谡w狀態(tài),當(dāng)mnode發(fā)現(xiàn)某個dnode負(fù)載過重,它會將dnode上的一個或多個vnode挪到其他dnode。在挪動過程中,對外服務(wù)繼續(xù)進行,數(shù)據(jù)插入、查詢和計算操作都不受影響。負(fù)載均衡操作結(jié)束后,應(yīng)用也無需重啟,將自動連接新的vnode。

如果mnode一段時間沒有收到dnode的狀態(tài)報告,mnode會認(rèn)為這個dnode已經(jīng)離線。如果離線時間超過一定時長(時長由配置參數(shù)offlineThreshold決定),該dnode將被mnode強制剔除出集群。該dnode上的vnodes如果副本數(shù)大于一,系統(tǒng)將自動在其他dnode上創(chuàng)建新的副本,以保證數(shù)據(jù)的副本數(shù)。