分片包含分片集群的分片数据的子集。集群的分片共同保存集群的整个数据集。
分片必须作为副本集部署,以提供冗余和高可用性。
重要
分片集群使用写关注 "majority" 进行大量内部操作。由于 PSA 副本集的性能问题,不建议在分片集群中使用仲裁节点。
警告
通常情况下,不要直接在分片上执行操作,因为这些操作可能会导致数据损坏或数据丢失。用户、客户端或应用程序只能直接连接到分片来执行本地管理或维护操作。
在单个分片上执行查询仅返回一个数据子集。连接到 mongos 以执行集群级操作,包括读取或写入操作。
重要
MongoDB 不保证任何两个连续的数据段都位于同一个分片上。
主分片
分片集群中的每个数据库都有一个主分片,用于保存该数据库的所有未分片集合。每个数据库都有自己的主分片。主分片与副本集中的主节点没有关系。
在创建新数据库时,mongos 通过选择集群中数据量最少的分片来选择主分片。mongos 使用 listDatabases 命令返回的 totalSize 字段作为选择标准的一部分。
要更改数据库的主分片,请使用 movePrimary 命令。迁移主分片的过程可能需要很长时间才能完成,并且在完成之前您不应访问与数据库关联的集合。根据要迁移的数据量,迁移可能会影响整个集群操作。在尝试更改主分片之前,请考虑对集群操作和网络负载的影响。
当您使用以前用作副本集的分片部署新的分片集群时,所有现有数据库将继续驻留在其原始副本集上。随后创建的数据库可以驻留在集群中的任何分片上。
分片状态
Use the sh.status() method in mongosh to see an overview of the cluster. This reports includes which shard is primary for the database and the chunk distribution across the shards. See sh.status() method for more details.
分片集群的安全性
使用自管理的内部/成员身份验证来执行集群内部安全,防止未经授权的集群组件访问集群。您必须使用适当的安全设置启动集群中的每个 mongod,才能执行内部身份验证。
从 MongoDB 5.3 开始,SCRAM-SHA-1不能用于集群内身份验证。仅支持 SCRAM-SHA-256。
在先前的 MongoDB 版本中,SCRAM-SHA-1 和 SCRAM-SHA-256 均可用于集群内身份验证,即使未显式启用 SCRAM。
有关部署安全分片集群的教程,请参阅自管理分片集群的密钥文件身份验证。
分片本地用户
每个分片都支持自管理部署中基于角色的访问控制 (RBAC),以限制对分片数据和操作进行未经授权的访问。使用 --auth 选项启动副本集中的每个 mongod,以实施 RBAC。或者,为了确保集群内部的安全性,可以实施自管理内部/成员身份验证,这也支持通过 RBAC 实现用户访问控制。
从 MongoDB 5.3 开始,SCRAM-SHA-1不能用于集群内身份验证。仅支持 SCRAM-SHA-256。
在先前的 MongoDB 版本中,SCRAM-SHA-1 和 SCRAM-SHA-256 均可用于集群内身份验证,即使未显式启用 SCRAM。
每个分片都有自己的分片本地用户。这些用户不能用于其他分片,也不能用于通过 mongos 连接到集群。
有关向已启用 RBAC 的 MongoDB 部署中添加用户的教程,请参阅在自管理部署中启用访问控制。