摘要:此文已由作者溫正湖授權(quán)網(wǎng)易云社區(qū)發(fā)布。分片集群通過就可以實(shí)現(xiàn)負(fù)載均衡,不需要多帶帶部署負(fù)載均衡組件。是一個(gè)集群,通過協(xié)議保持?jǐn)?shù)據(jù)的一致性副本數(shù)量可配置,默認(rèn)保存三副本,并通過做負(fù)載均衡調(diào)度。
此文已由作者溫正湖授權(quán)網(wǎng)易云社區(qū)發(fā)布。
歡迎訪問網(wǎng)易云社區(qū),了解更多網(wǎng)易技術(shù)產(chǎn)品運(yùn)營(yíng)經(jīng)驗(yàn)。
最近閱讀了TiDB源碼的說明文檔,跟MongoDB的分片集群做了下簡(jiǎn)單對(duì)比。
首先展示TiDB的整體架構(gòu)
MongoDB分片集群架構(gòu)如下:
更加具體點(diǎn)如下:
下面從介紹TiDB組件的角度切入,將其跟MongoDB分片集群做對(duì)比。
TiDB 集群主要分為三個(gè)組件:
TiDB Server
TiDB Server 負(fù)責(zé)接收 SQL 請(qǐng)求,處理 SQL 相關(guān)的邏輯,并通過 PD 找到存儲(chǔ)計(jì)算所需數(shù)據(jù)的 TiKV 地址,與 TiKV 交互獲取數(shù)據(jù),最終返回結(jié)果。 TiDB Server 是無狀態(tài)的,其本身并不存儲(chǔ)數(shù)據(jù),只負(fù)責(zé)計(jì)算,可以無限水平擴(kuò)展,可以通過負(fù)載均衡組件(如LVS、HAProxy 或 F5)對(duì)外提供統(tǒng)一的接入地址。
// 類比MongoDB分片集群中的mongos或者叫router server
PD Server
Placement Driver (簡(jiǎn)稱 PD) 是整個(gè)集群的管理模塊,其主要工作有三個(gè): 一是存儲(chǔ)集群的元信息(某個(gè) Key 存儲(chǔ)在哪個(gè) TiKV 節(jié)點(diǎn));二是對(duì) TiKV 集群進(jìn)行調(diào)度和負(fù)載均衡(如數(shù)據(jù)的遷移、Raft group leader 的遷移等);三是分配全局唯一且遞增的事務(wù) ID。
PD 是一個(gè)集群,需要部署奇數(shù)個(gè)節(jié)點(diǎn),一般線上推薦至少部署 3 個(gè)節(jié)點(diǎn)。
//類比MongoDB分片集群中的config server
TiKV Server
TiKV Server 負(fù)責(zé)存儲(chǔ)數(shù)據(jù),從外部看 TiKV 是一個(gè)分布式的提供事務(wù)的 Key-Value 存儲(chǔ)引擎。存儲(chǔ)數(shù)據(jù)的基本單位是 Region,每個(gè) Region 負(fù)責(zé)存儲(chǔ)一個(gè) Key Range (從 StartKey 到 EndKey 的左閉右開區(qū)間)的數(shù)據(jù),每個(gè) TiKV 節(jié)點(diǎn)會(huì)負(fù)責(zé)多個(gè) Region 。TiKV 使用 Raft 協(xié)議做復(fù)制,保持?jǐn)?shù)據(jù)的一致性和容災(zāi)。副本以 Region 為單位進(jìn)行管理,不同節(jié)點(diǎn)上的多個(gè) Region 構(gòu)成一個(gè) Raft Group,互為副本。數(shù)據(jù)在多個(gè) TiKV 之間的負(fù)載均衡由 PD 調(diào)度,這里也是以 Region 為單位進(jìn)行調(diào)度。
//類比MongoDB分片集群中的replica set
// Region概念類似MongoDB分片中的chunk,但又有些不一樣。chunk是個(gè)邏輯概念,數(shù)據(jù)存儲(chǔ)并不是以chunk為單位。而Region是正式在TIKV上的數(shù)據(jù)單位。兩種都是數(shù)據(jù)遷移的最小單位。默認(rèn)也是64MB
核心特性
水平擴(kuò)展
無限水平擴(kuò)展是 TiDB 的一大特點(diǎn),這里說的水平擴(kuò)展包括兩方面:計(jì)算能力和存儲(chǔ)能力。TiDB Server 負(fù)責(zé)處理 SQL 請(qǐng)求,隨著業(yè)務(wù)的增長(zhǎng),可以簡(jiǎn)單的添加 TiDB Server 節(jié)點(diǎn),提高整體的處理能力,提供更高的吞吐。TiKV 負(fù)責(zé)存儲(chǔ)數(shù)據(jù),隨著數(shù)據(jù)量的增長(zhǎng),可以部署更多的 TiKV Server 節(jié)點(diǎn)解決數(shù)據(jù) Scale 的問題。PD 會(huì)在 TiKV 節(jié)點(diǎn)之間以 Region 為單位做調(diào)度,將部分?jǐn)?shù)據(jù)遷移到新加的節(jié)點(diǎn)上。所以在業(yè)務(wù)的早期,可以只部署少量的服務(wù)實(shí)例(推薦至少部署 3 個(gè) TiKV, 3 個(gè) PD,2 個(gè) TiDB),隨著業(yè)務(wù)量的增長(zhǎng),按照需求添加 TiKV 或者 TiDB 實(shí)例。
// TIDB相比MongoDB分片,優(yōu)勢(shì)在于其具有更強(qiáng)的業(yè)務(wù)負(fù)載均衡的能力,TIDB是每個(gè)region作為一個(gè)raft group,會(huì)根據(jù)raft group leader所在TIKV節(jié)點(diǎn)的負(fù)載來調(diào)整leader節(jié)點(diǎn),從而實(shí)現(xiàn)業(yè)務(wù)負(fù)載均衡。
高可用
高可用是 TiDB 的另一大特點(diǎn),TiDB/TiKV/PD 這三個(gè)組件都能容忍部分實(shí)例失效,不影響整個(gè)集群的可用性。下面分別說明這三個(gè)組件的可用性、單個(gè)實(shí)例失效后的后果以及如何恢復(fù)。
TiDB
TiDB 是無狀態(tài)的,推薦至少部署兩個(gè)實(shí)例,前端通過負(fù)載均衡組件對(duì)外提供服務(wù)。當(dāng)單個(gè)實(shí)例失效時(shí),會(huì)影響正在這個(gè)實(shí)例上進(jìn)行的 Session,從應(yīng)用的角度看,會(huì)出現(xiàn)單次請(qǐng)求失敗的情況,重新連接后即可繼續(xù)獲得服務(wù)。單個(gè)實(shí)例失效后,可以重啟這個(gè)實(shí)例或者部署一個(gè)新的實(shí)例。
// MongoDB分片集群通過Driver就可以實(shí)現(xiàn)負(fù)載均衡,不需要多帶帶部署負(fù)載均衡組件。 Driver同時(shí)連接多個(gè)mongos實(shí)現(xiàn)負(fù)載均衡。
PD
PD 是一個(gè)集群,通過 Raft 協(xié)議保持?jǐn)?shù)據(jù)的一致性,單個(gè)實(shí)例失效時(shí),如果這個(gè)實(shí)例不是 Raft 的 leader,那么服務(wù)完全不受影響;如果這個(gè)實(shí)例是 Raft 的 leader,會(huì)重新選出新的 Raft leader,自動(dòng)恢復(fù)服務(wù)。PD 在選舉的過程中無法對(duì)外提供服務(wù),這個(gè)時(shí)間大約是3秒鐘。推薦至少部署三個(gè) PD 實(shí)例,單個(gè)實(shí)例失效后,重啟這個(gè)實(shí)例或者添加新的實(shí)例。
// 跟config server的高可用一樣,但config server心跳超時(shí)需要10s,選出主一般需要30s時(shí)間。由于mongos緩存了cs上的元數(shù)據(jù),所以cs選主期間,業(yè)務(wù)正常的讀寫均不受影響。很好奇,選主如何在3s之內(nèi)搞定。
TiKV
TiKV 是一個(gè)集群,通過 Raft 協(xié)議保持?jǐn)?shù)據(jù)的一致性(副本數(shù)量可配置,默認(rèn)保存三副本),并通過 PD 做負(fù)載均衡調(diào)度。單個(gè)節(jié)點(diǎn)失效時(shí),會(huì)影響這個(gè)節(jié)點(diǎn)上存儲(chǔ)的所有 Region。對(duì)于 Region 中的 Leader 結(jié)點(diǎn),會(huì)中斷服務(wù),等待重新選舉;對(duì)于 Region 中的 Follower 節(jié)點(diǎn),不會(huì)影響服務(wù)。當(dāng)某個(gè) TiKV 節(jié)點(diǎn)失效,并且在一段時(shí)間內(nèi)(默認(rèn) 10 分鐘)無法恢復(fù),PD 會(huì)將其上的數(shù)據(jù)遷移到其他的 TiKV 節(jié)點(diǎn)上。
// 這是TiDB相比MongoDB分片的不同的地方,PD在某個(gè)TiKV節(jié)點(diǎn)失效超時(shí)后,將其上原有的數(shù)據(jù)副本遷移到其他存活的TiKV節(jié)點(diǎn)實(shí)現(xiàn)數(shù)據(jù)副本完整性。而MongoDB分片集群的數(shù)據(jù)高可用依賴shard的配置,如果shard是單一的mongod進(jìn)程,那么該shard故障后,其上的數(shù)據(jù)都不可用或丟失,如果shard是復(fù)制集,則數(shù)據(jù)是安全的,但副本數(shù)會(huì)減少,需要人工處理故障節(jié)點(diǎn)。所以,分片集群中shard一定要配置為復(fù)制集的形式
網(wǎng)易云免費(fèi)體驗(yàn)館,0成本體驗(yàn)20+款云產(chǎn)品!
更多網(wǎng)易技術(shù)、產(chǎn)品、運(yùn)營(yíng)經(jīng)驗(yàn)分享請(qǐng)點(diǎn)擊。
文章來源: 網(wǎng)易云社區(qū)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/25276.html
摘要:選擇在經(jīng)歷了痛苦的傳統(tǒng)解決方案的折磨以及大量調(diào)研及對(duì)比后,卡思數(shù)據(jù)最終選擇了作為數(shù)據(jù)倉(cāng)庫(kù)及業(yè)務(wù)數(shù)據(jù)庫(kù)。上線卡思數(shù)據(jù)目前配置了兩個(gè)的三個(gè)的四個(gè)的??ㄋ紨?shù)據(jù)部署了數(shù)據(jù)庫(kù)監(jiān)控系統(tǒng)來實(shí)時(shí)監(jiān)控服務(wù)狀態(tài),可以非常清晰的查看服務(wù)器問題。 作者:劉廣信,火星文化技術(shù)經(jīng)理 卡思數(shù)據(jù)是國(guó)內(nèi)領(lǐng)先的視頻全網(wǎng)數(shù)據(jù)開放平臺(tái),依托領(lǐng)先的數(shù)據(jù)挖掘與分析能力,為視頻內(nèi)容創(chuàng)作者在節(jié)目創(chuàng)作和用戶運(yùn)營(yíng)方面提供數(shù)據(jù)支持,為廣告...
摘要:選擇在經(jīng)歷了痛苦的傳統(tǒng)解決方案的折磨以及大量調(diào)研及對(duì)比后,卡思數(shù)據(jù)最終選擇了作為數(shù)據(jù)倉(cāng)庫(kù)及業(yè)務(wù)數(shù)據(jù)庫(kù)。上線卡思數(shù)據(jù)目前配置了兩個(gè)的三個(gè)的四個(gè)的??ㄋ紨?shù)據(jù)部署了數(shù)據(jù)庫(kù)監(jiān)控系統(tǒng)來實(shí)時(shí)監(jiān)控服務(wù)狀態(tài),可以非常清晰的查看服務(wù)器問題。 作者:劉廣信,火星文化技術(shù)經(jīng)理 卡思數(shù)據(jù)是國(guó)內(nèi)領(lǐng)先的視頻全網(wǎng)數(shù)據(jù)開放平臺(tái),依托領(lǐng)先的數(shù)據(jù)挖掘與分析能力,為視頻內(nèi)容創(chuàng)作者在節(jié)目創(chuàng)作和用戶運(yùn)營(yíng)方面提供數(shù)據(jù)支持,為廣告...
閱讀 3691·2021-11-23 09:51
閱讀 2913·2021-11-23 09:51
閱讀 748·2021-10-11 10:59
閱讀 1777·2021-09-08 10:43
閱讀 3306·2021-09-08 09:36
閱讀 3362·2021-09-03 10:30
閱讀 3355·2021-08-21 14:08
閱讀 2292·2021-08-05 09:59