addShardToZone
定义
addShardToZone
将分片与区域关联。 MongoDB将此分分片与给定的区域关联起来。 该区域所覆盖的数据段将分配给与该区域关联的分片。
提示
在
mongosh
中,还可以通过sh.addShardToZone()
辅助方法运行此命令。辅助方法对
mongosh
用户来说很方便,但它们返回的信息级别可能与数据库命令不同。如果不追求方便或需要额外的返回字段,请使用数据库命令。
您只能从addShardToZone
实例的 数据库上运行admin
mongos
。
兼容性
此命令可用于以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
重要
无服务器实例不支持此命令。 有关更多信息,请参阅不支持的命令。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
语法
该命令具有以下语法:
db.adminCommand( { addShardToZone: <string>, zone: <string> } )
命令字段
该命令接受以下字段:
字段 | 类型 | 说明 |
---|---|---|
字符串 | ||
字符串 | 与分片关联的区域的名称。 |
mongosh
提供了辅助方法sh.addShardToZone()
。
行为
您可以将一个区域与多个分片关联,一个分片也可以与多个区域关联。
有关分片集群中区域的更多信息,请参阅区域手册页面。
范围
MongoDB 实际上会忽略至少没有一个与之关联的分片键值范围的区域。
要将分片键值范围与区域关联,请使用updateZoneKeyRange
数据库命令或sh.updateZoneKeyRange()
Shell 助手。
您可以在未分片的集合或不存在的集合上运行 updateZoneKeyRange
数据库命令及其助手 sh.updateZoneKeyRange()
和 sh.addTagRange()
。
提示
通过对空集合或不存在的集合进行分片之前定义区域和区域范围,分片集合操作会为定义的区域范围创建数据块以及任何其他数据块,以覆盖分片键值的整个范围,并执行基于区域范围的初始数据块分配。数据块的初始创建和分布可以更快地设置区域分片。在初始分布之后,负载均衡器将管理未来的数据段分布。
有关示例,请参阅为空集合或不存在的集合预先定义区域和区域范围。
安全性
对于强制执行访问控制的分片集群,您必须以具有以下任一权限的用户身份进行身份验证:
针对
update
在config
数据库的shards
collection的 ;或者,enableSharding
集群 资源上的 。
clusterAdmin
或clusterManager
内置角色具有发出addShardToZone
的适当权限。 有关更多信息,请参阅基于角色的访问控制的文档页面。
例子
以下示例将shard0000
与区域JFK
关联:
db.adminCommand( { addShardToZone : "shard0000" , zone : "JFK" } )
一个分片可以与多个区域关联。 以下示例将LGA
与shard0000
关联:
db.adminCommand( { addShardToZone : "shard0000" , zone : "LGA" } )
shard0000
同时与LGA
区域和JFK
区域关联。 在均衡集群中,MongoDB 会将任一区域覆盖的读取和写入路由到shard0000
。