Docs 菜单

Docs 主页开发应用程序MongoDB Manual

常见问题解答:使用 MongoDB 进行分片

在此页面上

  • 分片是否适合新部署?
  • 对集合进行分片后,是否可以选择不同的分片键?
  • 为什么我的文档没有分布在各个分片上?
  • mongos如何检测分片集群配置中的更改?
  • 日志中的writebacklisten是什么意思?
  • mongos如何使用连接?

本文档解答了有关分片的常见问题。另请参阅手册中的分部分,其中概述了分片,包括以下详细信息:

有时。但是,如果您的数据集适合单个服务器,则应从非分片部署开始,因为数据集较小时进行分片几乎没有优势

更改分片键的选项取决于您当前运行的 MongoDB 版本:

在 MongoDB 4中。 2及更早版本中,如果您必须在对集合分片后更改分片键并且无法升级,则最佳选择是:

  • 将 MongoDB 中的所有数据转储为外部格式。

  • 删除原始分片集合。

  • 使用更理想的分片键配置分片。

  • 预分割分片键范围以确保初始均匀分布。

  • 将转储的数据恢复到 MongoDB 中。

提示

另请参阅:

一旦数据段的分布达到特定阈值,负载均衡器就会开始跨分片分布数据。请参阅迁移阈值。

此外,如果数据块中的文档数量超过一定数量,则 MongoDB 无法移动该数据块。请参阅要迁移的每个数据块的最大文档数不可分割/巨型块。

mongos实例维护配置数据库的缓存,该数据库保存分片集群的元数据。

mongos通过向分片发出请求并发现其元数据已过期来延迟更新其缓存。要强制mongos 重新加载缓存,您可以直接对每个 运行flushRouterConfig mongos命令。

写回侦听器是一个进程,它会在迁移后打开长轮询以中继从mongodmongos写回,以确保它们没有进入错误的服务器。如有必要,写回侦听器会将写操作发送回正确的服务器。

这些消息是分片基础架构的关键部分,不应引起关注。

每个mongos实例都维护一个与分片集群成员的连接池。客户端请求一次使用一个这些连接;即请求不是多路复用或管道化的。

客户端请求完成后, mongos将连接返回到池中。当客户端数量减少时,这些池不会缩小。这可能会导致未使用的mongos具有大量打开的连接。如果不再使用mongos ,则可以安全地重新启动进程以关闭现有连接。

要返回与mongos使用的所有传出连接池相关的聚合统计信息,请将 mongosh连接到mongos ,然后运行connPoolStats命令:

db.adminCommand("connPoolStats");

请参阅 UNIXulimit 设置 文档的 系统资源利用率 部分。

← 常见问题解答:并发