Management 碎片区

在本页面

在分片群集中,您可以创建代表一组分片的区域,并将一个或多个shard key值范围与该区域相关联。 MongoDB 将仅属于区域内那些分片的读和写路由进入区域范围。

将碎片添加到区域

连接到mongos实例时,使用sh.addShardToZone()方法将区域与特定分片相关联。单个碎片可以具有多个区域,并且多个碎片也可以具有相同的区域。

Example

以下示例将区域NYC添加到两个分片,并将区域SFONRT添加到第三个分片:

sh.addShardToZone("shard0000", "NYC")
sh.addShardToZone("shard0001", "NYC")
sh.addShardToZone("shard0002", "SFO")
sh.addShardToZone("shard0002", "NRT")

当连接到mongos实例时,可以使用sh.removeShardFromZone()方法从特定的分片中删除区域,如以下示例所示,该方法将从分片中删除NRT区域:

sh.removeShardFromZone("shard0002", "NRT")

创建区域范围

要定义分区的区域范围,请在连接到mongos实例时使用sh.updateZoneKeyRange()方法。任何给定的分片键范围只能分配一个* zone。您不能重叠定义的范围。

Example

给定records数据库中名为users的集合,并通过zipcode字段进行分片。分配以下操作:

  • 曼哈顿和布鲁克林NYC区的两个邮政编码范围

  • 旧金山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")

Note

区域范围始终包括下边界,不包括上边界。

删除区域范围

3.4 版中的新增功能:使用 Shell 帮助程序方法sh.removeRangeFromZone()从区域中删除范围。

Example

以下示例删除了曼哈顿范围内的邮政编码范围的NYC区域分配:

sh.removeRangeFromZone("records.user", {zipcode: "10001"}, {zipcode: "10281"})

查看现有区域

使用sh.status()列出与集群中每个分片关联的区域。您还可以通过查询config数据库中的shards集合来查看碎片区域。

以下示例使用find()方法返回带有NYC区域的所有分片。

use config
db.shards.find({ tags: "NYC" })

您可以在config数据库的tags集合中找到所有namespaces的区域范围。 sh.status()的输出还显示所有区域范围。

下面的示例使用find()方法返回与NYC区域关联的任何范围。

use config
db.tags.find({ tag: "NYC" })