Management 碎片区
在本页面
在分片群集中,您可以创建代表一组分片的区域,并将一个或多个shard key值范围与该区域相关联。 MongoDB 将仅属于区域内那些分片的读和写路由进入区域范围。
将碎片添加到区域
连接到mongos实例时,使用sh.addShardToZone()方法将区域与特定分片相关联。单个碎片可以具有多个区域,并且多个碎片也可以具有相同的区域。
Example
以下示例将区域NYC
添加到两个分片,并将区域SFO
和NRT
添加到第三个分片:
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" })