更新時(shí)間:2021年10月21日16時(shí)53分 來(lái)源:傳智教育 瀏覽次數(shù):
TiKV 集群是 TiDB 數(shù)據(jù)庫(kù)的分布式 KV 存儲(chǔ)引擎,數(shù)據(jù)以 Region 為單位進(jìn)行復(fù)制和管理,每個(gè) Region 會(huì)有多個(gè) Replica(副本),這些 Replica 會(huì)分布在不同的 TiKV 節(jié)點(diǎn)上,其中 Leader 負(fù)責(zé)讀/寫(xiě),F(xiàn)ollower 負(fù)責(zé)同步 Leader 發(fā)來(lái)的 raft log。了解了這些信息后,請(qǐng)思考下面這些問(wèn)題:
• 如何保證同一個(gè) Region 的多個(gè) Replica 分布在不同的節(jié)點(diǎn)上?更進(jìn)一步,如果在一臺(tái)機(jī)器上啟動(dòng)多個(gè) TiKV 實(shí)例,會(huì)有什么問(wèn)題?
• TiKV 集群進(jìn)行跨機(jī)房部署用于容災(zāi)的時(shí)候,如何保證一個(gè)機(jī)房掉線,不會(huì)丟失 Raft Group 的多個(gè) Replica?
• 添加一個(gè)節(jié)點(diǎn)進(jìn)入 TiKV 集群之后,如何將集群中其他節(jié)點(diǎn)上的數(shù)據(jù)搬過(guò)來(lái)?
• 當(dāng)一個(gè)節(jié)點(diǎn)掉線時(shí),會(huì)出現(xiàn)什么問(wèn)題?整個(gè)集群需要做什么事情?如果節(jié)點(diǎn)只是短暫掉線(重啟服務(wù)),那么如何處理?如果節(jié)點(diǎn)是長(zhǎng)時(shí)間掉線(磁盤(pán)故障,數(shù)據(jù)全部丟失),需要如何處理?
• 假設(shè)集群需要每個(gè) Raft Group 有 N 個(gè)副本,那么對(duì)于單個(gè) Raft Group 來(lái)說(shuō),Replica 數(shù)量可能會(huì)不夠多(例如節(jié)點(diǎn)掉線,失去副本),也可能會(huì)過(guò)于多(例如掉線的節(jié)點(diǎn)又回復(fù)正常,自動(dòng)加入集群)。那么如何調(diào)節(jié) Replica 個(gè)數(shù)?
• 讀/寫(xiě)都是通過(guò) Leader 進(jìn)行,如果 Leader 只集中在少量節(jié)點(diǎn)上,會(huì)對(duì)集群有什么影響?
• 并不是所有的 Region 都被頻繁的訪問(wèn),可能訪問(wèn)熱點(diǎn)只在少數(shù)幾個(gè) Region,這個(gè)時(shí)候我們需要做什么?
• 集群在做負(fù)載均衡的時(shí)候,往往需要搬遷數(shù)據(jù),這種數(shù)據(jù)的遷移會(huì)不會(huì)占用大量的網(wǎng)絡(luò)帶寬、磁盤(pán) IO 以及 CPU?進(jìn)而影響在線服務(wù)?
這些問(wèn)題單獨(dú)拿出可能都能找到簡(jiǎn)單的解決方案,但是混雜在一起,就不太好解決。有的問(wèn)題貌似只需要考慮單個(gè) Raft Group 內(nèi)部的情況,比如根據(jù)副本數(shù)量是否足夠多來(lái)決定是否需要添加副本。但是實(shí)際上這個(gè)副本添加在哪里,是需要考慮全局的信息。整個(gè)系統(tǒng)也是在動(dòng)態(tài)變化,Region 分裂、節(jié)點(diǎn)加入、節(jié)點(diǎn)失效、訪問(wèn)熱點(diǎn)變化等情況會(huì)不斷發(fā)生,整個(gè)調(diào)度系統(tǒng)也需要在動(dòng)態(tài)中不斷向最優(yōu)狀態(tài)前進(jìn),如果沒(méi)有一個(gè)掌握全局信息,可以對(duì)全局進(jìn)行調(diào)度,并且可以配置的組件,就很難滿足這些需求。因此我們需要一個(gè)中心節(jié)點(diǎn),來(lái)對(duì)系統(tǒng)的整體狀況進(jìn)行把控和調(diào)整,所以有了 PD 這個(gè)模塊。
調(diào)度的基本需求:
上面羅列了一大堆問(wèn)題,我們先進(jìn)行分類(lèi)和整理??傮w來(lái)看,問(wèn)題有兩大類(lèi):
1.作為一個(gè)分布式高可用存儲(chǔ)系統(tǒng),必須滿足的需求,包括四種:
• 副本數(shù)量不能多也不能少
• 副本需要分布在不同的機(jī)器上
• 新加節(jié)點(diǎn)后,可以將其他節(jié)點(diǎn)上的副本遷移過(guò)來(lái)
• 節(jié)點(diǎn)下線后,需要將該節(jié)點(diǎn)的數(shù)據(jù)遷移走
2.作為一個(gè)良好的分布式系統(tǒng),需要優(yōu)化的地方,包括:
• 維持整個(gè)集群的 Leader 分布均勻
• 維持每個(gè)節(jié)點(diǎn)的儲(chǔ)存容量均勻
• 維持訪問(wèn)熱點(diǎn)分布均勻
• 控制 Balance 的速度,避免影響在線服務(wù)
• 管理節(jié)點(diǎn)狀態(tài),包括手動(dòng)上線/下線節(jié)點(diǎn),以及自動(dòng)下線失效節(jié)點(diǎn)
滿足第一類(lèi)需求后,整個(gè)系統(tǒng)將具備多副本容錯(cuò)、動(dòng)態(tài)擴(kuò)容/縮容、容忍節(jié)點(diǎn)掉線以及自動(dòng)錯(cuò)誤恢復(fù)的功能。
滿足第二類(lèi)需求后,可以使得整體系統(tǒng)的負(fù)載更加均勻、且可以方便的管理。
為了滿足這些需求,首先我們需要收集足夠的信息,比如每個(gè)節(jié)點(diǎn)的狀態(tài)、每個(gè) Raft Group 的信息、業(yè)務(wù)訪問(wèn)操作的統(tǒng)計(jì)等;
其次需要設(shè)置一些策略,PD 根據(jù)這些信息以及調(diào)度的策略,制定出盡量滿足前面所述需求的調(diào)度計(jì)劃;最后需要一些基本的操作,來(lái)完成調(diào)度計(jì)劃。
數(shù)據(jù)庫(kù)模型的研究可以分成幾個(gè)階段?
2021-10-06什么是TiDB數(shù)據(jù)庫(kù)?數(shù)據(jù)管理技術(shù)的發(fā)展
2021-10-06什么是Kafka?Kafka誕生的背景是什么?
2021-10-06數(shù)據(jù)庫(kù)技術(shù)發(fā)展簡(jiǎn)史,3分鐘了解數(shù)據(jù)庫(kù)技術(shù)
2021-09-29Kafka基準(zhǔn)測(cè)試怎樣進(jìn)行?
2021-09-29什么是消息隊(duì)列?消息隊(duì)列有哪些應(yīng)用場(chǎng)景?
2021-09-28北京校區(qū)