MongoDB

1.状态检查
mongos> sh.status();
mongos> sh.status(true);

2.检查配置信息

配置信息都存在config数据库中
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});
原文地址:https://www.cnblogs.com/abclife/p/5425413.html