一,查看MongoDB集群配置

1.列出开启分片的数据库
查询配置数据库中的 databases 集合,可以列出已开启分片功能的数据库列表。
如果一个数据库中 partitioned 字段的值为 true,则该数据库已开启分片功能。
使用 mongo shell 连接到一个 mongos 实例,运行以下命令获取一个完整的已开启分片的数据库列表:

use config
db.databases.find( {"partitioned":"true"} )

MongoDB 单机分片 mongodb分片命令_MongoDB 单机分片

示例:
可以使用以下命令返回集群中的所有数据库列表:

use config
db.databases.find()

MongoDB 单机分片 mongodb分片命令_MongoDB 单机分片_02


这里返回结果是 true,则表示这个数据库是分片的。

2.列出分片
使用 listShards 命令,列出当前已配置的分片:

db.adminCommand( {listShards:1} )

MongoDB 单机分片 mongodb分片命令_mongodb_03


3.查看 MongoDB 集群状态

使用 db.printShardingStatus() 或者 sh.status() 可以查看集群的状态。这两个命令会返回同样的结果。

db.printShardingStatus() 
或
sh.status()

示例:

MongoDB 单机分片 mongodb分片命令_配置信息_04

  • sharding version 显示了分片元数据的版本号。
  • shards 显示了作为集群分片的mongod实例列表。
  • databases 显示了集群中的所有数据库,包括未开启分片的数据库。
  • tydb 数据库的 chunks 信息,显示了每个分片上有多少个数据块,以及每个数据块的范围。

4.检查配置信息
永远不要直接连接到配置服务器,以防配置服务器不小心被修改或删除。应先连接到mongos,然后通过config数据库来查询相关信息,方法与查询其他数据库一样。

use config
show tables

MongoDB 单机分片 mongodb分片命令_MongoDB 单机分片_05


5.查询所有分片的集合信息(非分片集合信息除外)

db.collections.findOne()

MongoDB 单机分片 mongodb分片命令_MongoDB 单机分片_06

  • _id:集合的命名空间。
  • key:片健。
  • unique:表明片健是一个唯一索引。该字段只有当值为true时才会出现。片健默认不是唯一的。

6.shards 集合保存分片信息

db.shards.find()

7.查看集合中所有块的信息

db.chunks.findOne()

MongoDB 单机分片 mongodb分片命令_MongoDB 单机分片_07

  • _id:块的唯一标识符。通常由命名空间,片健和块的下边界组成。
  • ns:块所属的集合名称。
  • min:块范围的最小值。
  • max:块范围的最大值。
  • shard:块所属分片。
  • lastmod与lastmodEpoch字段用于记录块的版本。

8.对集合分片步骤
1.启动数据库分片

sh.enableSharding("test")

2.启动集合分片
对集合分片时要选择一个分片健(shard key)
如果集合已存在,那么分健上必须有索引

db.users.ensureIndex({"username":1})
sh.shardCollection("test.users",{"username":1})

9.使用 movePrimary 命令变更数据库默认的 Primary shard,非分片集合将会从当前 shard 移动到新的主分片。

db.runCommand( { movePrimary:"test",to:"shard1"} )

在使用 movePrimary 命令变更数据库的主分片之后,config server 中的配置信息是最新的,mongos 缓存的配置信息变得过时了。MongoDB 提供命令:flushRouterConfig 强制 mongos 从 config server 获取最新的配置信息,刷新 mongos 的缓存。

db.adminCommand({"flushRouterConfig":1})

10.设置从库查看数据

db.getMongo().setSlaveOk()

11.添加和删除节点

repmore:PRIMARY> rs.add("127.0.0.1:27018");     //添加节点  
repmore:PRIMARY> rs.remove("127.0.0.1:27018");  //删除节点