シャード ゾーンの管理
シャーディングされたクラスターでは、シャードのグループを表すゾーンを作成し、そのゾーンにのシャードキー値の 1 つ以上の範囲を関連付けることができます。 MongoDB は、ゾーン範囲に含まれる読み取りと書込みを、ゾーン内のシャードのみにルーティングします。
Tip
空のコレクションまたは存在しないコレクションをシャーディングする前にゾーンとゾーン範囲を定義することで、シャード コレクション操作は定義されたゾーン範囲のチャンクと、シャードキー値の全範囲をカバーする追加のチャンクを作成し、初期化を実行しますゾーン範囲に基づく チャンク分散 。 このように初期チャンクを作成して分散することで、ゾーン シャーディングの設定を迅速に行うことができます。 初期分散後、バランサーは今後のチャンク分散を管理します。
例については、「 空または存在しないコレクションのゾーンとゾーン範囲の事前定義」を参照してください。
ゾーンにシャードを追加する
sh.addShardToZone()
mongos
インスタンスに接続すると、 メソッドを使用してゾーンを特定のシャードに関連付けます。単一のシャードには複数のゾーンが存在する場合や、複数のシャードに同じゾーンが存在する場合もあります。
例
次の例では、ゾーンNYC
を 2 つのシャードに追加し、ゾーンSFO
とNRT
を 3 つ目のシャードに追加します。
sh.addShardToZone("shard0000", "NYC") sh.addShardToZone("shard0001", "NYC") sh.addShardToZone("shard0002", "SFO") sh.addShardToZone("shard0002", "NRT")
次の例のように、 インスタンスに接続しているときにsh.removeShardFromZone()
メソッドを使用して特定のシャードからゾーンを削除できます。これではシャードからmongos
NRT
ゾーンを削除します。
sh.removeShardFromZone("shard0002", "NRT")
ゾーン範囲の作成
ゾーンのシャードキーの範囲を定義するには、sh.updateZoneKeyRange()
インスタンスに接続してmongos
メソッドを使用します。どのシャードキー範囲にも割り当てられるゾーンは1 つだけです。 定義された範囲を重複することはできません。
例
records
データベースにusers
という名前のコレクションがあり、 zipcode
フィールドでシャーディングされている場合。 次の操作は以下を割り当てます。
Manhattan と Atlas の 2 つの範囲の郵便番号(
NYC
ゾーン)サンフランシスコの郵便番号の 1 つの範囲(
SFO
ゾーン)
sh.updateZoneKeyRange("records.users", { zipcode: "10001" }, { zipcode: "10281" }, "NYC") sh.updateZoneKeyRange("records.users", { zipcode: "11201" }, { zipcode: "11240" }, "NYC") sh.updateZoneKeyRange("records.users", { zipcode: "94102" }, { zipcode: "94135" }, "SFO")
注意
ゾーン範囲は、常に下限を含み、上限を含まない範囲です。
コレクションを削除すると、それに関連付けられたゾーンやタグの範囲も削除されます。
ゾーン範囲の削除
ゾーンから範囲を削除するには、 shellヘルパー メソッドsh.removeRangeFromZone()
を使用します。
例
次の例では、manhattan 内の郵便番号の範囲のNYC
ゾーン割り当てを削除します。
sh.removeRangeFromZone("records.user", {zipcode: "10001"}, {zipcode: "10281"})
注意
コレクションを削除すると、それに関連付けられたゾーンやタグの範囲も削除されます。
既存のゾーンを表示
クラスター内の各シャードに関連付けられているゾーンを一覧表示するには、 sh.status()
を使用します。 また、 config
データベースのshards
コレクションをクエリしてシャード ゾーンを表示することもできます。
次の例では、 find()
メソッドを使用して、 NYC
ゾーンを持つすべてのシャードを返します。
use config db.shards.find({ tags: "NYC" })
すべての名前空間のゾーン範囲は、 config
データベースのtags
コレクションで確認できます。 sh.status()
の出力にはすべてのゾーン範囲も表示されます。
次の例では、 find()
メソッドを使用して、 NYC
ゾーンに関連付けられている範囲を返します。
use config db.tags.find({ tag: "NYC" })