# `Raft` 対 Multi `Raft`

![`smart`](RaftAndMultiRaft_aa_003_20220511.png)

------------------------------------------------------------
1. Leaderはクラスタ内のマネージャーであり、すべてのクライアントトラフィックはLeaderを経由します。通常、Leaderは1つだけで、Followerに定期的なハートビートを送信してその支配を維持します。自分がLeaderでないことを発見した場合、Followerになります。

2. Followerはクラスタ内で管理されているもので、他のサーバーからのコマンドしか反応しません。Leaderから長い時間反応がないと、Candidateになります。

3. CandidateはクラスタのCandidateであり、彼らはLeaderに選ばれるための投票を開始することを試みます。

前回のコースで、TiKVは分散環境でデータの強い一貫性を実現するためにRaft分散合意アルゴリズムを使用していることを学びました。TiDBはLeaderを介してのみ書き込みが可能であり、Leaderは書き込み指示をログの形式でFollowerに複製します。クラスタノードの多数がこのログを受信したとき、このログがコミットされてデータ永続性ストレージエンジンに適用できると考えられます。

TiDBはデフォルトで、Raft Groupを構成する3つのレプリカを提供します。Raft Groupが扱うデータが限られているため、データを複数のRaft Groupに分割することをMulti Raftと呼びます。分割の方法はRangeに基づいており、データのキーをバイト順にソートし、それを連続したキー範囲のセクションに分割し、それぞれのキー範囲をRegionとして扱います。

2つの隣接するリージョンは、それぞれの前のリージョンのEnd Keyが次のリージョンのStart Keyであることを意味するように、ギャップを持つことはできません。

レンジの一つのリージョンは、左側が閉区間右側が開区間です。スタートキーはこのリージョンに属しますが、エンドキーは実際に次のリージョンに属します。

TiKV のリージョンは制限があり、このしきい値を超えると、2つのリージョンに分割されます。例えば、[a, c) -> [a, b) + [b, c)。

もしリージョンにデータがないか、あるいは少量のデータしかない場合、それは隣接するリージョンと結合されて大きなリージョンを形成します。例えば、[a, b) + [b, c) -> [a, c)。

上記で述べたように、複数のリージョンからなる複数のRaftグループを、マルチRaftと呼びます。

