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

這幾個(gè)神秘參數(shù),教你TDengine集群的正確使用方式

小 T 導(dǎo)讀:為什么我的集群數(shù)據(jù)分布得不均勻?這篇文章就是為了解決這個(gè)問(wèn)題而寫(xiě)的。但即便是沒(méi)有遇到“TDengine集群數(shù)據(jù)不均勻分布”這個(gè)現(xiàn)象的用戶,我們也推薦一讀。因?yàn)榭赡苣隳壳爸皇窃谕ㄓ脠?chǎng)景下使用集群,當(dāng)一些特殊的場(chǎng)景出現(xiàn)時(shí),深入地了解集群參數(shù)和數(shù)據(jù)庫(kù)架構(gòu)原理才會(huì)真正地讓你做到游刃有余。至于集群如何搭建并不是本文主題,請(qǐng)嚴(yán)格根據(jù)官方文檔指示操作即可。官方文檔地址:https://taosdata.com/docs/cn/v2.0/cluster

為了充分理解文章內(nèi)容,首先大家一定要先了解vnode這個(gè)概念——每個(gè) vnode 都是一個(gè)相對(duì)獨(dú)立的工作單元,是存儲(chǔ)時(shí)序數(shù)據(jù)(表)的基本單元,具有獨(dú)立的運(yùn)行線程,內(nèi)存空間與持久化存儲(chǔ)的路徑。如果覺(jué)得不夠清晰的話,接著往下讀,隨著知識(shí)點(diǎn)的串聯(lián),或許您會(huì)豁然開(kāi)朗起來(lái)?,F(xiàn)在,我們來(lái)根據(jù)不同的場(chǎng)景給出具體分析:通常來(lái)說(shuō),數(shù)據(jù)分配不均勻有兩種。

場(chǎng)景一:表分布不均勻

需要測(cè)試表數(shù)量很少的數(shù)據(jù)庫(kù)性能時(shí)比較容易發(fā)生這個(gè)現(xiàn)象:你建了1200張表,但是卻發(fā)現(xiàn)有1000張表都在同一個(gè)vnode里面,只有200張表在另一個(gè)vnode里面。這種場(chǎng)景的壞處是,大部分表都進(jìn)入了同一個(gè)vnode數(shù)據(jù)分布不均勻。此外還會(huì)導(dǎo)致只有兩個(gè)線程在為TDengine工作,因此無(wú)法利用計(jì)算機(jī)的多核(假設(shè)你的服務(wù)器CPU是雙核以上),從而浪費(fèi)了TDengine的橫向擴(kuò)展性。我先來(lái)簡(jiǎn)單說(shuō)說(shuō)導(dǎo)致上述情況的原因——在TDengine中有這樣三個(gè)參數(shù):

  • maxVgroupsPerDb: 每個(gè)數(shù)據(jù)庫(kù)中能夠使用的最大vnode個(gè)數(shù)(單個(gè)副本),默認(rèn)為0;
  • minTablesPerVnode: 每個(gè)vnode中必須創(chuàng)建的最小表數(shù),即是說(shuō)這是第一輪建表用的步長(zhǎng)(就是滿多少表寫(xiě)下一個(gè)vnode),默認(rèn)1000;
  • tablelncStepPerVnode:每個(gè)vnode中超過(guò)最小表數(shù)后的遞增步長(zhǎng)(即是后續(xù)滿多少表寫(xiě)下一個(gè)vnode),默認(rèn)1000。

在持續(xù)的建表過(guò)程中,TDengine就是靠這三個(gè)參數(shù)來(lái)控制表的分布的。大家可以在使用taosdemo批量建表的時(shí)候觀察一下:打開(kāi)另一個(gè)taos窗口,在建表的時(shí)候一直輸入show vgroups命令,就能看到上述參數(shù)所控制的建表過(guò)程了:在第一個(gè)vnode中,表數(shù)量從0開(kāi)始逐漸遞增,隨著數(shù)量達(dá)到minTablesPerVnode后,開(kāi)始創(chuàng)建下一個(gè)vnode并繼續(xù)在其中建表。之后,重復(fù)該過(guò)程直到vnode數(shù)量達(dá)到maxVgroupsPerDb。之后,TDengine將回到第一個(gè)vnode繼續(xù)創(chuàng)建新表,在補(bǔ)充每個(gè)vnode的表數(shù)達(dá)到tablelncStepPerVnode數(shù)量后,后續(xù)以tablelncStepPerVnode為步長(zhǎng)繼續(xù)在vnode中依次創(chuàng)建表,直到建完全部表。(描述看著繁瑣,自己動(dòng)手跑一遍會(huì)很直觀)

明白了這個(gè)邏輯后,我們可以再來(lái)回頭看為什么會(huì)出現(xiàn)場(chǎng)景一的情況。答案已經(jīng)很簡(jiǎn)單了,因?yàn)閙inTablesPerVnode這個(gè)參數(shù)的值默認(rèn)是1000,所以前1000個(gè)表肯定會(huì)只出現(xiàn)在第一個(gè)vnode里,這就給用戶造成了數(shù)據(jù)分配并不平均的錯(cuò)覺(jué)。

那么要如何調(diào)整成我們預(yù)期的效果呢。

別急——在此之前我們還需要再多了解一下這個(gè)參數(shù):maxVgroupsPerDb。大家可能在taos.cfg中留意過(guò)maxVgroupsPerDb這個(gè)參數(shù)的值默認(rèn)是0,根據(jù)參數(shù)描述,0代表的是自動(dòng)配置。但是關(guān)于這個(gè)自動(dòng)配置的詳情在官網(wǎng)上是有解釋的:“每個(gè) Database 可以創(chuàng)建固定數(shù)目的 vgroup,默認(rèn)與 CPU 核數(shù)相同,可通過(guò) maxVgroupsPerDb 配置”。

如果不了解vgroup概念,建議到官網(wǎng)查看:https://taosdata.com/docs/cn/v2.0/architecture

# max number of groups per db, 0 means configured automatically
# maxVgroupsPerDB                 0

?結(jié)合文章開(kāi)頭說(shuō)過(guò)的vnode概念——每個(gè)vnode都是具有獨(dú)立的運(yùn)行線程的,這樣就一目了然了——如此設(shè)計(jì)默認(rèn)值的原因就是希望vnode數(shù)等于cpu核數(shù),從而充分地利用CPU資源,達(dá)到最大化服務(wù)器性能的目的。

好,現(xiàn)在我們終于可以回到場(chǎng)景一并提出我們的解決方案了。

假設(shè)我們是4核服務(wù)器,那么默認(rèn)的最大vgroups就是為4個(gè)。進(jìn)入場(chǎng)景一當(dāng)中,每個(gè)vnode只要存儲(chǔ)300個(gè)表就好了。這時(shí)候只需要調(diào)整minTablesPerVnode值為300,這樣就可以做到表均勻分布在數(shù)據(jù)節(jié)點(diǎn)中了。

場(chǎng)景一屬于相對(duì)特殊的情況,而默認(rèn)配置卻只能針對(duì)最通用的一個(gè)場(chǎng)景。對(duì)于大部分用戶來(lái)說(shuō),只要你的測(cè)試場(chǎng)景是創(chuàng)建萬(wàn)表級(jí)別,都是可以看到表在vnode中按序且平均分配的。比如你有一臺(tái)4核CPU的機(jī)器,計(jì)劃創(chuàng)建4萬(wàn)個(gè)表。那么使用默認(rèn)配置就會(huì)生成4個(gè)vnode,最終的結(jié)果就是每個(gè)vnode存儲(chǔ)1萬(wàn)張表,就不會(huì)出現(xiàn)數(shù)據(jù)不均的現(xiàn)象了。

這里我們可以多討論一下,既然默認(rèn)配置的maxVgroupsPerDb是可以充分利用CPU的話。那么這個(gè)參數(shù)還有什么修改價(jià)值呢?如果沒(méi)有修改價(jià)值的話它為什么還會(huì)是一個(gè)對(duì)外公開(kāi)的參數(shù)呢?

別急,我們接下來(lái)進(jìn)入下一個(gè)場(chǎng)景。

假設(shè)你的CPU核數(shù)為4,但是我們把maxVgroupsPerDb設(shè)成8。其中只有前4個(gè)vnode的數(shù)據(jù)會(huì)比較熱,后續(xù)4個(gè)vnode中的數(shù)據(jù)的使用頻率則比較低??此贫嚅_(kāi)了很多vnode,但是這樣的設(shè)置和使用默認(rèn)配置比起來(lái),反而會(huì)降低前四個(gè)vnode的負(fù)擔(dān)從而增加性能。所以,默認(rèn)參數(shù)雖然通用,但是有時(shí)候適當(dāng)?shù)男薷臅?huì)讓數(shù)據(jù)庫(kù)變得更好,這就需要使用者結(jié)合實(shí)際業(yè)務(wù)場(chǎng)景做評(píng)估了。目前,該參數(shù)仍是一個(gè)全局變量,未來(lái)或許會(huì)變成數(shù)據(jù)庫(kù)級(jí)別的變量以方便不同數(shù)據(jù)庫(kù)之間業(yè)務(wù)的差異。

而minTablesPerVnode,tablelncStepPerVnode這兩個(gè)變量由于使用相對(duì)復(fù)雜,所以目前并沒(méi)有出現(xiàn)在taos.cfg當(dāng)中,屬于標(biāo)題中提到的“神秘參數(shù)”。雖然它們?cè)O(shè)置了適當(dāng)?shù)哪J(rèn)值(1000)來(lái)應(yīng)對(duì)大多數(shù)場(chǎng)景,但是當(dāng)業(yè)務(wù)場(chǎng)景發(fā)生變動(dòng)出現(xiàn)不適配的時(shí)候,就需要我們自己手動(dòng)修改這些參數(shù)了。具體修改方式如下:打開(kāi)taos.cfg后在空白區(qū)域添加如下內(nèi)容,重啟數(shù)據(jù)庫(kù)服務(wù)進(jìn)程即可。如果是集群環(huán)境,那么需要在每一個(gè)節(jié)點(diǎn)的taos.cfg中都做一樣的配置后重啟數(shù)據(jù)庫(kù)服務(wù)進(jìn)程。

# in retrieve blocking model, only in 50% query threads will be used in query processing ind node
# retrieveBlockingModel    0
tablelncStepPerVnode 1500
minTablesPerVnode 700

場(chǎng)景二:vnode分布不均勻

這種情況就比較簡(jiǎn)單了,在批量創(chuàng)建完很多表后,有時(shí)候你可能會(huì)發(fā)現(xiàn):“咦?為什么這個(gè)數(shù)據(jù)節(jié)點(diǎn)上有6個(gè)vnode,另外一個(gè)節(jié)點(diǎn)只有2個(gè)vnode?!?/p>

在解釋這種情況之前,我們需要知道另一個(gè)TDengine相當(dāng)重要的概念——mnode(管理節(jié)點(diǎn))。

關(guān)于mnode,官方文檔的描述十分清晰:

管理節(jié)點(diǎn)(mnode): 一個(gè)虛擬的邏輯單元,負(fù)責(zé)所有數(shù)據(jù)節(jié)點(diǎn)運(yùn)行狀態(tài)的監(jiān)控和維護(hù),以及節(jié)點(diǎn)之間的負(fù)載均衡。同時(shí),管理節(jié)點(diǎn)也負(fù)責(zé)元數(shù)據(jù)(包括用戶、數(shù)據(jù)庫(kù)、表、靜態(tài)標(biāo)簽等)的存儲(chǔ)和管理,因此也稱為 Meta Node。在集群中,為了保證mnode的高可用,可以配置多個(gè)mnode副本,副本數(shù)由系統(tǒng)配置參數(shù)numOfMnodes決定,有效范圍為1-3。

可以看出,mnode和vnode一樣,都是以master-slave的模式分布在節(jié)點(diǎn)中的。因此,在做數(shù)據(jù)的負(fù)載均衡的時(shí)候,mnode也會(huì)是被計(jì)算在內(nèi)的,而具體的計(jì)算方式就是,一個(gè)mnode等價(jià)于n個(gè)vnode,這個(gè)n就是由下面這個(gè)參數(shù)控制的。

# One mode is equal to the number of vnode consumed
# mnodeEqualVnodeNum    4

而查看mnode的分配情況的命令如下:

查看mnode的分配情況的命令

這回我們就知道為什么會(huì)出現(xiàn)場(chǎng)景二的情況了——只有2個(gè)vnode分布的數(shù)據(jù)節(jié)點(diǎn)上一定是有mnode在工作的。

正是它,頂替了原本應(yīng)該出現(xiàn)在這的vnode名額。

尾記

寫(xiě)到這里就差不多了,但作為作者很想和大家閑聊幾句。

TDengine雖然使用簡(jiǎn)單方便,但是想要最大化它的價(jià)值還是需要一番研究的。而官方文檔是作為TDengine的百科全書(shū)而存在的,某種程度上,它可能并不適合串聯(lián)實(shí)際應(yīng)用場(chǎng)景。所以,為了填補(bǔ)這塊空白,所以我們?cè)谕扑偷奈恼轮袝?huì)很注意產(chǎn)品與實(shí)際場(chǎng)景的結(jié)合以及串聯(lián)。最終的目標(biāo),是讓我們的文章能夠形成在很多實(shí)際使用場(chǎng)景下的閉環(huán)說(shuō)明書(shū)。這樣,就可以讓TDengine用戶的使用體驗(yàn)大幅上升。

空口無(wú)憑,我們?nèi)绾巫龅酱?lián)不同實(shí)際的應(yīng)用場(chǎng)景呢。很簡(jiǎn)單,讀完本篇文章可能您已經(jīng)了解了如何正確的配置集群的數(shù)據(jù)分布了。結(jié)合文章《TDengine 的用戶如何優(yōu)化數(shù)據(jù)的寫(xiě)入速度?》,想必您又已經(jīng)對(duì)寫(xiě)入數(shù)據(jù)的性能調(diào)試有了一定的認(rèn)知。再讀文章《【社區(qū)精選】在Docker環(huán)境下,TDengine的客戶端為什么連不上集群?》,您又對(duì)在docker環(huán)境下搭建TDengine集群搭建有了一定的了解。

搭建TDengine的知識(shí)體系,就和搭建TDengine的集群一樣,需要一步一步慢慢積累起來(lái)。

開(kāi)源文化的本質(zhì)就是互相幫助,社區(qū)用戶為我們貢獻(xiàn)了很多。因此,我們也希望可以用同樣的方式回報(bào)大家。