标签:
mongos> sh.status(); mongos> sh.status(true);
2.检查配置信息
config.changelog #跟踪集群记录操作 config.chunks #集合中块的信息 config.collections #集群内所有分片集合的信息 config.databases #集群内所有数据库的信息 config.settings #块大小设置 config.shards #集群内所有分片信息 config.tags #标签设置
3.连接信息
mongos> db.adminCommand({"connPoolStats":1}) { "hosts" : { "localhost:30000::0" : { "available" : 1, "created" : 1 }, "localhost:30000::30" : { "available" : 3, "created" : 3 }, "localhost:30001::0" : { "available" : 1, "created" : 1 }, "localhost:30002::0" : { "available" : 1, "created" : 1 } }, "replicaSets" : { }, "createdByType" : { "master" : 6 }, "totalAvailable" : 6, "totalCreated" : 6, "numDBClientConnection" : 9, "numAScopedConnection" : 1, "ok" : 1 } mongos>
#限制连接数
客户端连接到mongos,mongos会创建至少一个到分片的连接; 一个mongos最多支持创建20000个连接.
参数maxCons选项可以限制连接数,可以在运行mongos的时候,指定参数maxConns,计算分片能够处理的来自单一mongos的连接数量:
maxCons = 20000-(mongos进程的数量*3)- (每个副本集的成员数量*3)- (其他/mongos进程的数量)
(mongos进程的数量*3) :每个mongos会为每个mongod创建3个连接:一个用于转发客户端请求;一个用于追踪错误信息,即写回监听器;一个用于监控副本集状态
(每个副本集的成员数量*3):主节点会与每个备份节点创建一个连接,而每个备份节点会与主节点创建两个连接,因此总共是3个连接
(其他/mongos进程的数量):其他进程是指可能连接到mongod的进程数量
4.添加服务器
(1) 添加分片
$./mongod --dbpath /mdb/data/s5 --logpath /mdb/mlog/s5.log --fork --port 27025 --smallfiles > sh.addShard("172.31.11.230:27025");
(2) 添加mongos
./mongos --logpath /mdb/mlog/ss2.log --fork --port 30001 --configdb 172.31.11.230:27020
(3) 添加配置服务器
./mongod --dbpath /mdb/data/sc --logpath /mdb/mlog/sc.log --fork --port 27020 --configsvr mongos连接多个”配置服务器“: ./mongos --configdb config-1:port,config-2:port,config-3:port...
5.删除除分片 要保证均衡器是开启的
如果要删除的分片没有被作为primary库,直接使用
> db.adminCommand({"removeShard":"172.31.11.230:27028"})
如果被作为primary库,需要将这些数据库移走:
> db.adminCommand({"movePrimary":"blog","to":"172.31.11.230:27109"}) > db.adminCommand({"removeShard":"172.31.11.230:27028"})
6.修改块的大小
> use config > db.settings.save({"_id":"chunksize","value":32}); #单位是m
7.手动移动块
sh.moveChunk("test.users",{"user_id":NumberLong("223439877780288900")},"spock");
将user_id为223439877780288900的块移到名为spock的分片上。
必须使用片键来找出需要移动的块。通常指定一个块的最简单的方法是指定他的下边界,不过指定块范围内的任何值都可以(最大值除外)。
8.特大块 如果块的大小超过了config.settings中设置的大小,均衡器就无法移动这个块了。 (1)检查特大块 sh.status(); 如果块出现jumbo属性,表明该块是特大块 (2)使用datasize命令检查块大小 使用config.chunks集合,查看块范围 > use config > var chunks = db.chunks.find({"ns":"shop.goods"}).toArray() > chunks.forEach(printjson); #可以查看上一步得到的变量的值 根据块的范围,找出可能的特大块 > use dbName > db.runCommand({"datasize":"dbName.collName", "keyPattern":{"date":1}, #片名 "min":chunks[0].min, "max":chunks[0].max}) (3) 特大块分发 ·关闭均衡器 > sh.setBalancerState(false); ·临时调高最大块的大小值 > use config > db.settings.findOne({"_id":"chunksize"}); > db.settings.save({"_id":"chunksize","value":1024}); ·使用moveChunk命令移动特大块 > sh.moveChunk("test.users",{"user_id":NumberLong("223439877780288900")},"spock"); > db.adminCommand({"moveChunk":"dbName.collName", "find":{"date":new Date("10/03/2015")}, "to":"shard0002", "secondary"Throttle:true #要求迁移过程间歇进行,以免影响性能 }) ·使用splitChunk命令对from分片剩余的块进行拆分(实现from分片数目和其他分片的块均衡) ·修改块大小 > use config > db.settings.findOne({"_id":"chunksize"}); > db.settings.save({"_id":"chunksize","value":32}); ·启用均很器 > sh.setBalancerState(true) (4) 防止特大块出现 细化片键的粒度,尽可能保证每个文档都有唯一的片键。 9.手动刷新配置 如果mongos无法从配置服务器获取配置信息,可以手动刷新 > db.adminCommand({"flushRouterConfig":1});
标签:
原文地址:http://www.cnblogs.com/abclife/p/5425413.html