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