Docs 主页 → 开发应用程序 → MongoDB Manual
常见问题解答:使用 MongoDB 进行分片
在此页面上
本文档解答了有关分片的常见问题。另请参阅手册中的分片部分,其中概述了分片,包括以下详细信息:
分片是否适合新部署?
有时。但是,如果您的数据集适合单个服务器,则应从非分片部署开始,因为数据集较小时进行分片几乎没有优势。
对集合进行分片后,是否可以选择不同的分片键?
更改分片键的选项取决于您当前运行的 MongoDB 版本:
从 MongoDB 5.0 开始,您可以通过更改文档的分片键对集合重新分片。
您可以通过向现有分片键添加一个或多个后缀字段来优化分片键。
在 MongoDB 4.2 及更早版本中,分片后便无法更改分片键的选择。
在 MongoDB 4中。 2及更早版本中,如果您必须在对集合分片后更改分片键并且无法升级,则最佳选择是:
将 MongoDB 中的所有数据转储为外部格式。
删除原始分片集合。
使用更理想的分片键配置分片。
预分割分片键范围以确保初始均匀分布。
将转储的数据恢复到 MongoDB 中。
提示
另请参阅:
为什么我的文档没有分布在各个分片上?
一旦数据段的分布达到特定阈值,负载均衡器就会开始跨分片分布数据。请参阅迁移阈值。
此外,如果数据块中的文档数量超过一定数量,则 MongoDB 无法移动该数据块。请参阅要迁移的每个数据块的最大文档数和不可分割/巨型块。
mongos
如何检测分片集群配置中的更改?
mongos
实例维护配置数据库的缓存,该数据库保存分片集群的元数据。
mongos
通过向分片发出请求并发现其元数据已过期来延迟更新其缓存。要强制mongos
重新加载缓存,您可以直接对每个 运行flushRouterConfig
mongos
命令。
日志中的writebacklisten
是什么意思?
写回侦听器是一个进程,它会在迁移后打开长轮询以中继从mongod
或mongos
写回,以确保它们没有进入错误的服务器。如有必要,写回侦听器会将写操作发送回正确的服务器。
这些消息是分片基础架构的关键部分,不应引起关注。
mongos
如何使用连接?
每个mongos
实例都维护一个与分片集群成员的连接池。客户端请求一次使用一个这些连接;即请求不是多路复用或管道化的。
客户端请求完成后, mongos
将连接返回到池中。当客户端数量减少时,这些池不会缩小。这可能会导致未使用的mongos
具有大量打开的连接。如果不再使用mongos
,则可以安全地重新启动进程以关闭现有连接。
要返回与mongos
使用的所有传出连接池相关的聚合统计信息,请将 mongosh
连接到mongos
,然后运行connPoolStats
命令:
db.adminCommand("connPoolStats");
请参阅 UNIXulimit
设置 文档的 系统资源利用率 部分。