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

在本页面

本文档回答有关Sharding的常见问题。另请参见手册的Sharding部分,该部分提供了分片概述,包括有关以下内容的详细信息:

分片是否适合新部署?

有时。但是,如果您的数据集只能放在一台服务器上,则应从未分片的部署开始,因为分片而数据集较小则提供小优势

分片集合后可以更改分片键吗?

No.

MongoDB 中没有自动支持在对集合进行分片后更改分片密钥。这种现实强调了选择优质shard key的重要性。如果您必须*在分片集合后更改分片密钥,则最佳选择是:

See also

Shard Keys

为什么我的文档没有分布在各个分片上?

一旦块的分配达到特定阈值,平衡器便开始在各个分片之间分配数据。参见Migration Thresholds

另外,如果块中的文档数超过一定数量,MongoDB 将无法移动块。参见每块要迁移的最大文档数Indivisible Chunks

mongos 如何检测分片群集配置中的更改?

mongos实例维护config database的缓存,该缓存保存sharded cluster的元数据。

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

日志中的 writebacklisten 是什么意思?

回写侦听器是一个打开长轮询以在迁移后中继来自mongodmongos的写回以确保它们没有送往错误服务器的过程。如果需要,回写侦听器会将写回发送到正确的服务器。

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

mongos 如何使用连接?

每个mongos实例都维护一个到分片群集成员的连接池。Client 请求一次使用这些连接;即,请求不是多路复用或流水线的。

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

要返回与mongos使用的所有传出连接池相关的汇总统计信息,请使用,将mongo shell 连接到mongos并运行connPoolStats命令:

db.adminCommand("connPoolStats");

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

首页