Stories

Detail Return Return

【趙渝強老師】TiDB PD集羣存儲的信息 - Stories Detail

TiDB是PingCAP公司自主設計、研發的開源分佈式關係型數據庫,是一款同時支持在線事務處理與在線分析處理(Hybrid Transactional and Analytical Processing,HTAP)的融合型分佈式數據庫產品,具備水平擴容或者縮容、金融級高可用、實時HTAP、雲原生的分佈式數據庫、兼容MySQL協議和MySQL生態等重要特性。目標是為用户提供一站式OLTP(Online Transactional Processing)、OLAP(Online Analytical Processing)、HTAP解決方案。TiDB適合高可用、強一致要求較高、數據規模較大等各種應用場景。

一、 TiDB的體系架構

在內核設計上,TiDB分佈式數據庫將整體架構拆分成了多個模塊,各模塊之間互相通信,組成完整的TiDB系統。對應的架構圖如下:
image.png

通過使用TiKV存儲引擎支持OLTP的應用場景,而通過使用TiFlash存儲引擎支持OLAP的應用場景。在TiDB數據庫分佈式集羣中主要包含三個子集羣:

  • 1、存儲集羣:

該子集羣負責數據的存儲,其中又有行存引擎和列存引擎兩種不同的存儲方式:行存引擎指的是TiKV節點,它最終將數據存入底層的RocksDB中;列存引擎指的是TiFlash節點,它從TiKV節點中實時同步數據,這樣的TiFlash節點也可以有多個。

  • 2、調度集羣:

調度集羣中的每個節點叫做PD Instance,也叫做PD實例。存儲集羣會將數據存儲位置等元信息存入調度集羣中。

  • 3、計算集羣:

該子集羣中可以包含多個TiDB Instance,即:TiDB實例。計算集羣負責接收客户端發送的SQL語句,並訪問PD集羣獲取數據存儲位置和集羣的時間戳TSO等信息,最終將SQL語句轉換成Key-Value的鍵值操作,從而訪問存儲在存儲集羣中的數據。

二、 TiDB PD集羣存儲的信息

Placement Driver(簡稱PD)是TiDB裏面全局中心總控節點,是整個集羣的管理模塊,負責整個集羣的調度。TiDB作為一個分佈式高可用存儲系統,系統需要具備多副本容錯,動態擴容、縮容,容忍節點掉線以及自動錯誤恢復的功能。為了滿足這些功能,TiDB就需要收集足夠的信息,比如每個節點的狀態、每個Raft Group的信息等。PD根據這些信息以及調度的策略,制定出儘量滿足這些需求的調度計劃,並提供基本操作來完成這個計劃。PD的主要工作體現在以下三個方面:

  • 存儲集羣的元信息,例如:Region存儲在哪個TiKV節點;
  • 對TiKV集羣進行調度和負載均衡,如:數據的遷移、Raft Group Leader的選舉等;
  • 分配全局唯一且遞增的事務ID。

視頻講解如下:
https://www.bilibili.com/video/BV1raySBDEtc/?aid=115456656742...

PD的調度功能依賴於整個集羣信息的收集,簡單來説,PD需要知道每個TiKV節點的狀態以及每個Region的狀態。TiKV集羣會向PD彙報以下兩類消息:

  • 每個TiKV節點會定期向PD彙報節點的狀態信息

TiKV節點(也叫Store)與PD之間存在心跳包,一方面PD通過心跳包檢測每個Store是否存活,以及是否有新加入的Store;另一方面,心跳包中也會攜帶這個Store的狀態信息,主要包括:
(1)總磁盤容量
(2)可用磁盤容量
(3)承載的Region數量
(4)數據寫入/讀取速度
(5)發送/接受的Snapshot數量(副本之間可能會通過Snapshot同步數據)
(6)Store是否過載
(7)labels標籤信息(標籤是具備層級關係的一系列Tag,能夠感知拓撲信息)

通過使用命令行工具pd-ctl可以查看到TiKV Store的狀態信息。

  • 每個Raft Group的Leader會定期向PD彙報Region的狀態信息

每個Raft Group的Leader和PD之間存在心跳包,用於彙報這個Region的狀態,主要包括下面幾點信息:
(1)Leader的位置
(2)Followers的位置
(3)掉線副本的個數
(4)數據寫入/讀取的速度

user avatar limaodebenma Avatar u_11920995 Avatar u_15745565 Avatar mimangdeyangcong Avatar
Favorites 4 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.