# TiDBクラスタにおけるPDの役割

![`smart`](PDArchitecture_aa_004_20220509.png)

------------------------------------------------------------------------------
TiDBクラスタの中央制御はPDであり、全クラスタの「頭脳」として知られています。

TiDBクラスタ内では、メタデータを格納する（主にTiDBサーバーへのルートを提供するなど）、グローバルID、トランザクションID、グローバルタイムスタンプを割り当てる、TSOを生成する、サービスを発見する、クラスタのトポロジー、リアルタイムデータ分布、ホットスポットメトリクスなどの情報を収集するなどの責任を持ちます。また、TiKVノード内のデータをスケジューリングする責任もあります。

PD自体は少なくとも3つのノードから構成され、PDはetcdを統合することで自動的なフェイルオーバーをサポートしているので、単一障害点について心配する必要はありません。同時に、PDはetcdのRaftを通じて強力なデータ一貫性を保証しているので、データの損失について心配する必要はありません。プロダクション環境では、奇数個のPDノードをデプロイすることをお勧めします。

PDクラスタ内では、Leaderという役割を持つノードが外部の世界にステートレスなサービスを提供します。PDノードがダウンしても、PD選挙機構の助けを借りて、新しく選ばれたPD Leaderは中間状態を考慮することなく、すぐに外部の世界にサービスを提供できます。

まず、以下の用語を定義する必要があります：

PD のストアとは、クラスタ内のストレージノードであるTiKVインスタンスを指します。ストアとTiKVインスタンスは厳密に1対1であることに注意してください。同じホスト上に複数のTiKVインスタンスがデプロイされたり、同じブロックのディスク上にデプロイされたりしても、これらのインスタンスは異なるストアインスタンスに対応します。

各Regionは、クラスタのデータの連続的なセグメントを維持する責任があり（デフォルト設定では約96MB）、各レプリカは複数のストアのコピーを保持し（デフォルト設定は3コピー）、レプリカはPeerと呼ばれます。同じRegionの複数のPeerはRaftプロトコルを介してデータを同期しますので、Peerはまた、Raftインスタンスのメンバーを参照するためにも使用されます。TiKVは、データを管理するためにMulti-Raftモデルを使用しており、つまり、各Regionは独立して実行されるRaftインスタンスに対応します。このようなRaftインスタンスをRaft Groupとも呼びます。

Leader、Follower、そしてLearner：それぞれがピアの役割を担っています。その中で、Leaderはクライアントの読み書き要求に応答する責任を持ちます。FollowerはLeaderからデータを受け取り、Leaderが失敗した場合に新しいLeaderを選出します。

そして、Learnerは、Raft Logの同期のみに参加し、投票には参加しない特別な役割です。

TiKVクラスタ内のリージョンは最初から分割されていません。データの書き込みが進むにつれて、より多くのリージョンが生成されます。この分割プロセスをリージョン分割と呼びます。そのメカニズムとして、クラスタの初期化時にキースペース全体をカバーする初期リージョンが構築され、操作中にリージョンデータがある程度の量に達するたびに新しいリージョンが分割によって生成されます。

`Pending` と `Down` は、ピアの特別な可能なステータスの2つです。
- `Pending` は、FollowerまたはLearnerとLeaderの間の大きなギャップを示します。そして、`Pending`ステータスのFollowerはLeaderに選出されることはできません。
- `Down` は、対応するピアメッセージを長時間受信していないことを指しています。通常、対応するノードがクラッシュしたか、ネットワークから切断されたことを示しています。

さらに、PDノードではデフォルトでTiDBダッシュボードサービスが提供されています。

