TiDB Server 負責接收 SQL 請求,處理 SQL 相關的邏輯,並通過 PD 找到存儲計算所需數據的 TiKV 地址,與 TiKV 交互獲取數據,最終返回結果。TiDB Server 是無狀態的,其本身並不存儲數據,只負責計算,可以無限水平擴展,可以通過負載均衡組件(如LVS、HAProxy 或 F5)對外提供統壹的接入地址。
Placement Driver (簡稱 PD) 是整個集群的管理模塊,其主要工作有三個:壹是存儲集群的元信息(某個 Key 存儲在哪個 TiKV 節點);二是對 TiKV 集群進行調度和負載均衡(如數據的遷移、Raft group leader 的遷移等);三是分配全局唯壹且遞增的事務 ID。
PD 通過 Raft 協議保證數據的安全性。Raft 的 leader server 負責處理所有操作,其余的 PD server 僅用於保證高可用。建議部署奇數個 PD 節點。
TiKV Server 負責存儲數據,從外部看 TiKV 是壹個分布式的提供事務的 Key-Value 存儲引擎。存儲數據的基本單位是 Region,每個 Region 負責存儲壹個 Key Range(從 StartKey 到 EndKey 的左閉右開區間)的數據,每個 TiKV 節點會負責多個 Region。TiKV 使用 Raft 協議做復制,保持數據的壹致性和容災。副本以 Region 為單位進行管理,不同節點上的多個 Region 構成壹個 Raft Group,互為副本。數據在多個 TiKV 之間的負載均衡由 PD 調度,這裏也是以 Region 為單位進行調度。
TiSpark 作為 TiDB 中解決用戶復雜 OLAP 需求的主要組件,將 Spark SQL 直接運行在 TiDB 存儲層上,同時融合 TiKV 分布式集群的優勢,並融入大數據社區生態。至此,TiDB 可以通過壹套系統,同時支持 OLTP 與 OLAP,免除用戶數據同步的煩惱。
TiDB 有兩大兩大核心特性:水平擴展與高可用。
無限水平擴展是 TiDB 的壹大特點,這裏說的水平擴展包括兩方面:計算能力和存儲能力。TiDB Server 負責處理 SQL 請求,隨著業務的增長,可以簡單的添加TiDB Server 節點,提高整體的處理能力,提供更高的吞吐。TiKV 負責存儲數據,隨著數據量的增長,可以部署更多的 TiKV Server 節點解決數據 Scale 的問題。PD 會在 TiKV 節點之間以 Region 為單位做調度,將部分數據遷移到新加的節點上。所以在業務的早期,可以只部署少量的服務實例(推薦至少部署 3 個 TiKV,3 個 PD,2 個 TiDB),隨著業務量的增長,按照需求添加 TiKV 或者 TiDB 實例。
高可用是 TiDB 的另壹大特點,TiDB/TiKV/PD 這三個組件都能容忍部分實例失效,不影響整個集群的可用性。下面分別說明這三個組件的可用性、單個實例失效後的後果以及如何恢復。