首页 > 解决方案 > Mongos shell 不显示在分片上创建的集合

问题描述

我有一个 3 节点分片集群,mongos 安装在一个单独的节点上。当使用 mongos shell 创建数据库(测试)并添加集合时,我可以使用查看集合

使用测试

显示收藏

但是,当在一个分片节点(不使用 mongos)中创建数据库(test2)时。

mongo --host=主机名 --port=port

使用 testdb2

db.collection1.insert({"testing_user":"test"})

我可以从这个分片查看收藏

但是,当我登录到 mongos shell 时,它显示 testdb2 的集合为空。

另外,我尝试检查该集合是否存在于配置数据库中。

使用配置

db.collection.find()

我没有看到添加到 testdb2 的集合

标签: databasemongodbshardingmongo-shell

解决方案


但是,当在一个分片节点(不使用 mongos)中创建数据库(test2)时。

不要那样做。

分片集群的全部意义在于在分片之间划分数据。配置服务器分配和维护每个数据库/集合存储位置的记录,mongos 路由器透明地将查询定向到适当的分片。

如果您通过直接连接到分片来创建集合,mongos 和配置服务器不知道它,因此不能期望 mongos 知道它。在大多数情况下,这些数据将无法访问,并且在某些情况下可能会被删除。

底线是,如果您使用的是分片 mongodb 集群,插入和访问数据的唯一安全方法是通过 mongos。


推荐阅读