# ラベル付けによる高可用性

![`smart`](LabelWithHighAvailability_aa_003_20220509.png)

--------------------------------------------------------------------------------
図を見てください。DC 1〜3 は3つの独立したデータセンターを表し、Rack 1〜6 は6つのラックを表し、TiKV Server-1〜TiKV Server-12 は12台のホストを表し、それぞれのホストには1つのTiKVインスタンスがあります。次に、3種類のリージョンの分布をデフォルトの3レプリカとして見てみましょう。

1. `Rack 4` と `DC 3` の 2 つのホスト TiKV Server-7 と TiKV Server-8 において、`Region 1` の分散はそれぞれ 1 Leaderと 1 Followerであり、`Rack 6` には別のFollowerがあります。このような配置のリスクとして、`DC 2` に問題があるか、`Rack 4` に問題があると `Region 1` が利用できなくなる可能性があります。

2. `Region 2`は、異なるラックに1つのLeaderと2つのFollowersが配置されているため、ある単一のラックに問題があっても、`Region 2`は使用可能で、`Region 1`よりも強力です。しかし、`DC 1`に問題がある場合、`Region 2`はもう使用できません。

3. `Region 3`は、異なるDCにおいて1つのLeaderと2つのFollowersを持っているので、DC、ラック、またはTiKVが問題を抱えていても、`Region 1`の可用性に影響を与えることはありません。

`Region 1`、`Region 2`、`Region 3`の分布を比較した後、リージョン分布が利用可能性に影響を与えることが分かりました。特に、データベースのメタデータ（情報スキーマなど）が特定のリージョンに格納されており、そのリージョンが利用不可能な場合、データベース全体が機能しなくなる可能性があります。

しかし、我々は元々のリージョンの分布はPDによってランダムに配置されていることを知っています。PDノードは、同じリージョンの複数のレプリカが同じTiKVノードに配置されないことを保証しますが、PDノードはDC、ラック、ホストなどの概念を知らないことになります。

そこで、ラベルという概念が生まれました。これはよくタグと呼ばれています。TiKVインスタンスには、どのDC、ラック、ホストにあるかを識別するためのラベル（タグ）を設定できます。PDノードはラベルのフォーマットに合意し、PDノードが最初にリージョンを配布するとき、TiKVノードに設定されたラベルからDC、ラック、ホストの位置を感知し、最高の可用性の配布を実現できます。

