分片
A分片包含一个分片集群的子集数据。集群的所有分片共同持有集群的全部数据集。
分片必须作为副本集部署,以提供冗余和可用性。
重要
分片集群使用"majority"
写入关注度进行许多内部操作。由于PSA 副本集的性能问题,不鼓励在分片集群中使用仲裁者。
警告
通常,不要直接在分片上执行操作,因为这可能会导致数据损坏或数据丢失。用户、客户端或应用程序应仅直接连接到分片以执行本地管理或维护操作。
仅在单个分片上执行查询只能返回数据子集。连接到mongos
以执行集群级别操作,包括读写操作。
重要
MongoDB不能保证任何两个连续的数据块都位于单个分片上。
主分片
在分片集群中,每个数据库都有一个主分片。它是数据库中所有未分片集合的默认分片。默认情况下,所有数据库的未分片集合都创建在数据库的主分片上。从MongoDB 8.0开始,您可以使用moveCollection
将未分片集合移动到另一个分片。主分片与副本集中的主节点没有关系。
当通过mongos
创建新数据库时,mongos
会选择具有最少数据的分片作为主分片。 mongos
使用listDatabases
命令返回的totalSize
字段作为选择标准的一部分。
要更改数据库的主分片,请使用movePrimary
命令。迁移主分片的过程可能需要很长时间才能完成,并且在迁移完成之前不应访问与数据库关联的集合。根据迁移的数据量,迁移可能会影响整个集群的操作。在尝试更改主分片之前,请考虑对集群操作和网络负载的影响。
当您部署一个新的分片集群,并且分片是之前用作副本集的节点时,所有现有数据库将继续驻留在它们原始的副本集上。随后创建的数据库可能位于集群中的任何分片上。
分片状态
使用sh.status()
方法。mongosh
查看集群概览。此报告包括哪个分片是数据库的主分片以及分片之间的数据块分布。有关更多详细信息,请参阅 sh.status()
方法。
分片集群安全性
使用 自管理内部/成员身份验证 来强制执行集群内部安全性,并防止未经授权的集群组件访问集群。您必须使用适当的设置启动集群中的每个 mongod
以强制执行内部身份验证。
从 MongoDB 5.3 开始,SCRAM-SHA-1 不能用于集群内部身份验证。仅支持 SCRAM-SHA-256。
在之前的 MongoDB 版本中,即使没有明确启用 SCRAM,也可以同时使用 SCRAM-SHA-1 和 SCRAM-SHA-256 进行集群内部身份验证。
有关部署安全分片集群的教程,请参阅 使用密钥文件身份验证部署自管理分片集群。
分片本地用户
每个分片支持 基于角色的访问控制(RBAC) 以限制对分片数据和操作的未经授权访问。使用 mongod
的 --auth
选项启动副本集以强制执行 RBAC。或者,强制执行 自管理内部/成员身份验证 以实现集群内部安全性,同时也通过 RBAC 启用用户访问控制。
从 MongoDB 5.3 开始,SCRAM-SHA-1 不能用于集群内部身份验证。仅支持 SCRAM-SHA-256。
在之前的 MongoDB 版本中,即使没有明确启用 SCRAM,也可以同时使用 SCRAM-SHA-1 和 SCRAM-SHA-256 进行集群内部身份验证。
每个分片都有自己的分片本地用户。这些用户不能在其他分片上使用,也不能用于通过 mongos
连接到集群。
请参阅在自托管部署上启用访问控制,了解如何在RBAC(基于角色的访问控制)启用的MongoDB部署中添加用户。