MongoDB Sharding分片管理

这是一种将海量的数据水平扩展的数据库集群系统,数据分表存储在sharding 的各个节点上,使用者通过简单的配置就可以很方便地构建一个分布式MongoDB 集群。MongoDB的数据分块称为 chunk。每个 chunk 都是 Collection 中一段连续的数据记录,通常最大尺寸是 200MB,超出则生成新的数据块。下面我们看一下有关分片管理的命令:
1、列出所有的Shard Server
mongos>db.runCommand({ listshards: 1 })
2、查看Sharding信息
mongos>db.printShardingStatus()
3、判断是否是Sharding
mongos>db.runCommand({ isdbgrid:1 })
4、对现有的集合进行分片
mongos>use admin
mongos>db.runCommand({ shardcollection: "test.users_2", key: { _id:1 }})
然后通过db.users_2.stats()查看分片表状态
5、查看分片的情况
mongos> use config
mongos> db.shards.find()
{ "_id" : "shard_a", "host" : "shard_a/192.168.100.90:10000,192.168.110.71:10000" }
{ "_id" : "shard_b", "host" : "shard_b/192.168.100.90:10001,192.168.110.71:10001" }
6、查看分片数据库
mongos> use config
mongos> db.databases.find()
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
{ "_id" : "shard", "partitioned" : true, "primary" : "shard_b" }
{ "_id" : "test", "partitioned" : false, "primary" : "shard_b" }
"_id",字符串。表示数据库名。
"partioned",布尔型。如果为true则表示开启了分片功能。
"primary",字符串,这个值与“_id”对应表示这个数据库的“大本营“在哪里,不论分片与否,数据库总是会有个“大本营”,创建数据库时会随机选择一个片,也就是说大本营是开始创建数据库文件的位置。虽然分片的时候数据库也会用到很多别的服务器,但是从这分片开始。
7、添加分片
mongos> use admin
mongos> db.runCommand({addshard:"192.168.71.43:27017" })
注意:同样这里的192.168.71.43不能用localhost或127.0.0.1代替,并且当路由进程和分片在同一台机器上要指定allowLocal为true,因为MongoDB尽量避免错误的配置,将集群配置在本地,所以这个配置指明当前仅仅是用于开发。如:db.runCommand({addshard:"192.168.71.43:27017",allowLocal:true })
8、删除分片
如果要删除分片的话可以removeshard命令,移除分片需要一个过程,MongoDB会把移除的片上的数据(块)挪到其他片上
db.runCommand({"removeshard":"192.168.32.13:27020"})
注意:如果删除的片是数据库的大本营(基片),必须手动移动或删除数据库,用moveprimary命令,如删除提示"you need to drop or movePrimary these databases"。可以通过查看config.databases看到分片的primary。
mongos> use config
mongos> db.databases.find()
通过moveprimary命令移除test3到192.168.32.13:27019:
 mongos> use admin
 db.runCommand({"moveprimary":"test3","to":"192.168.32.13:27019"})
再执行removeshard命令则能成功移除分片了
9、查看Chunks设置
mongodb不是一个分片上存储一个区间,而是每个分片包含多个区间,这每个区间就是一个块。如果存在多个可用的分片,只要块的数量足够多,MongoDB就会把数据迁移到其他分片上。
mongos> use config
mongos> db.settings.find()
10、查看Chunks分配
mongos> use config
mongos> db.chunks.find()

你可能感兴趣的:(MongoDB,MongoDB学习与应用)