身為TIDB的PM,PD主要接收兩類訊息,一種是TiKV store回傳的心跳信息,store就是TiKV中儲存的儲存節點,與TiKV是1:1的關係。另一種則是raft group leader回傳的心跳信息。
store回傳的信息內容包括:
- 我(store)還活著!
- 有沒有新鮮的肝(store)加入
- 我最多能存多少,還剩多少空間能放
- 身上還背著多少region
- 我的讀寫速度
- 發送與接收了多少snapshot
- 我還坦得住?嗎?
- label訊息(可以理解成KV的住址)
leader回傳的信息則包括:
- leader位置
- follower位置
- 讀寫速度
- 失聯的replicate數量
PD也有另外的接手可以接收手動異動的通知,如維運時下架其中一台store,便可以透過指令pd-ctl通知異動。
PD接收了這些信息之後,就開始提出健檢報告。
- 有沒有符合max-replicas的設定。多了就該砍掉,少了就該補上。
- 副本有沒有再重複的位置。在多台KV(store)的情況下,正常來說會把副本分散在不同的KV底下。
- 每個store儲存的副本數量是否取得平衡,已儲存的大小是不是有斜槓。
- leader是否平均分配在每個store上。前面提到leader負責讀寫,如果leader都集中在同一個store上,會發生一個人做得要死要活其他人過得爽爽的情況。
- 對於搶手的key,leader也會避免放在同一個store上。
- 控制調度的速度,以免影響線上。
以上純屬建議,實際主導權還是在leader手上。就像健檢報告寫著你體脂肪過高,但是要不要放下手中的啤酒鹽酥雞還是要靠你自己...