MongoDB 6.0.1分片异常:shardCollection提示数据库未启用分片
问题:MongoDB分片集群执行enableSharding成功后,shardCollection提示未启用分片
在Kubernetes集群中通过Bitnami Helm部署MongoDB 6.0.1,此前数据库及集合操作正常。近期执行分片相关命令时出现异常:
执行命令及输出
启用数据库分片
[direct: mongos] my_db> sh.enableSharding("my_db")
输出:
{ ok: 1, '$clusterTime': { clusterTime: Timestamp({ t: 1678966557, i: 1 }), signature: { hash: Binary(Buffer.from("b5da1b9a2539ecdaf77096012e36a014b51c492b", "hex"), 0), keyId: Long("7925145979144201565") } }, operationTime: Timestamp({ t: 1678966557, i: 1 }) }
分片集合
[direct: mongos] my_db> sh.shardCollection("my_db.my_collection", {"_id": "hashed"})
输出:
MongoServerError: sharding not enabled for db my_db
排查与解决步骤
确认分片集群状态
- 执行
sh.status()查看集群配置,重点检查databases区块中my_db的partitioned字段是否为true - 切换到config库执行查询:
use config; db.databases.find({_id: "my_db"}),验证返回文档的partitioned属性是否正确设置为true
- 执行
刷新mongos路由缓存
- 在mongos执行命令强制刷新缓存:
db.runCommand({ flushRouterConfig: 1 }) - 若部署了多mongos实例,重启所有mongos Pod后重新连接重试
- 在mongos执行命令强制刷新缓存:
验证Bitnami部署配置
- 检查Helm values文件确认已启用分片架构:
architecture: sharded - 连接到config server副本集主节点,执行
rs.status()确认副本集状态正常 - 执行
sh.status()确认所有shard节点已成功加入集群
- 检查Helm values文件确认已启用分片架构:
手动修复分片状态(若上述步骤无效)
- 连接到config server副本集的主节点
- 切换到config库:
use config - 更新数据库分片状态:
db.databases.update({_id: "my_db"}, {$set: {partitioned: true}}) - 返回mongos执行
db.runCommand({ flushRouterConfig: 1 }),再重新尝试分片集合操作
内容的提问来源于stack exchange,提问作者Shawaiz
相关产品推荐
相关产品推荐

