• 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});
    
  • 相关阅读:
    VsCode 各场景高级调试与使用技巧
    rust type
    解决Chrome浏览器控制台请求返回值中的中文显示为乱码的问题
    js 固定时间运行任务
    rust 泛型
    根据值选择
    js reload window.onerror
    rust 个例
    rust index
    rust return impl Trait
  • 原文地址:https://www.cnblogs.com/abclife/p/5425413.html
Copyright © 2020-2023  润新知