文档菜单
文档首页
/
MongoDB 手册
/ /

分片

本页内容

  • 主分片
  • 分片状态
  • 分片集群安全

A分片包含一个分片集群的子集数据。集群的所有分片共同持有集群的全部数据集。

分片必须作为副本集部署,以提供冗余和可用性。

重要

分片集群使用"majority"写入关注度进行许多内部操作。由于PSA 副本集的性能问题,不鼓励在分片集群中使用仲裁者。

警告

通常,不要直接在分片上执行操作,因为这可能会导致数据损坏或数据丢失。用户、客户端或应用程序应仅直接连接到分片以执行本地管理或维护操作。

仅在单个分片上执行查询只能返回数据子集。连接到mongos以执行集群级别操作,包括读写操作。

重要

MongoDB不能保证任何两个连续的数据块都位于单个分片上。

在分片集群中,每个数据库都有一个主分片。它是数据库中所有未分片集合的默认分片。默认情况下,所有数据库的未分片集合都创建在数据库的主分片上。从MongoDB 8.0开始,您可以使用moveCollection将未分片集合移动到另一个分片。主分片与副本集中的主节点没有关系。

当通过mongos创建新数据库时,mongos会选择具有最少数据的分片作为主分片。 mongos使用listDatabases命令返回的totalSize字段作为选择标准的一部分。

Diagram of a primary shard. A primary shard contains non-sharded collections as well as chunks of documents from sharded collections. Shard A is the primary shard.

要更改数据库的主分片,请使用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部署中添加用户。

返回

分片集群组件