一,查看MongoDB集群配置
1.列出开启分片的数据库
查询配置数据库中的 databases 集合,可以列出已开启分片功能的数据库列表。
如果一个数据库中 partitioned 字段的值为 true,则该数据库已开启分片功能。
使用 mongo shell 连接到一个 mongos 实例,运行以下命令获取一个完整的已开启分片的数据库列表:
use config
db.databases.find( {"partitioned":"true"} )
示例:
可以使用以下命令返回集群中的所有数据库列表:
use config
db.databases.find()
这里返回结果是 true,则表示这个数据库是分片的。
2.列出分片
使用 listShards 命令,列出当前已配置的分片:
db.adminCommand( {listShards:1} )
3.查看 MongoDB 集群状态
使用 db.printShardingStatus() 或者 sh.status() 可以查看集群的状态。这两个命令会返回同样的结果。
db.printShardingStatus()
或
sh.status()
示例:
- sharding version 显示了分片元数据的版本号。
- shards 显示了作为集群分片的mongod实例列表。
- databases 显示了集群中的所有数据库,包括未开启分片的数据库。
- tydb 数据库的 chunks 信息,显示了每个分片上有多少个数据块,以及每个数据块的范围。
4.检查配置信息
永远不要直接连接到配置服务器,以防配置服务器不小心被修改或删除。应先连接到mongos,然后通过config数据库来查询相关信息,方法与查询其他数据库一样。
use config
show tables
5.查询所有分片的集合信息(非分片集合信息除外)
db.collections.findOne()
- _id:集合的命名空间。
- key:片健。
- unique:表明片健是一个唯一索引。该字段只有当值为true时才会出现。片健默认不是唯一的。
6.shards 集合保存分片信息
db.shards.find()
7.查看集合中所有块的信息
db.chunks.findOne()
- _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"); //删除节点