• MongoDB Cluster的操作


     
     这是按照指引create的 MongoDB Cluster
     三种不同类型的server有不同的角色,所有机器都有mongod进程,mongos上会多一个端口为27020端口的mongos的进程
     对于外面可见的只有mongos server上的27017端口,至于shared server上的27018和mongo server上的27020,必须进到本机才能访问
     

    集群角色
    ContainerName
    IP:port
    Config Server
    cfg_1
    10.1.1.2:27019
    Config Server
    cfg_2
    10.1.1.3:27019
    Config Server
    cfg_3
    10.1.1.4:27019
    Shard Server
    shard1_1
    10.1.1.5:27018
    Shard Server
    shard1_2
    10.1.1.6:27018
    Shard Server
    shard1_3
    10.1.1.7:27018
    Shard Server
    shard2_1
    10.1.1.8:27018
    Shard Server
    shard2_2
    10.1.1.9:27018
    Shard Server
    shard2_3
    10.1.1.10:27018
    Shard Server
    shard3_1
    10.1.1.11:27018
    Shard Server
    shard3_2
    10.1.1.12:27018
    Shard Server
    shard3_3
    10.1.1.13:27018
    Mongos
    mongos_1
    10.1.1.14:27020
    Mongos
    mongos_2
    10.1.1.15:27020
    Mongos
    mongos_3
    10.1.1.16:27020
     

    Shard Server 

     
    通过"db.printReplicationInfo()"命令可以查看oplog的信息:
    shard1:SECONDARY> db.printReplicationInfo()
    通过"db.printSlaveReplicationInfo()"可以查看slave的同步状态:
    查看Replica Set的状态
    cs0:PRIMARY> rs.status()

     

    db.stat()
    获取当前数据库的信息,比如Obj总数、数据库总大小、平均Obj大小等
     

     

    db.serverStatus()
    connections当前连接和可用连接数,听过一个同行介绍过,mongodb最大处理到2000个连接就不行了(要根据你的机器性能和业务来设定),所以设大了没意义。设个合理值的话,到达这个值mongodb就拒绝新的连接请求,避免被太多的连接拖垮。
    indexCounters:btree:misses索引的不命中数,和hits的比例高就要考虑索引是否正确建立。
     
     

     

     

     

     
    db.currentOp()获取当前正在执行的操作
    在没有负载的机器上,该命令基本上都是返回空的
     如果你发现一个操作太长,把数据库卡死的话,可以用这个命令杀死他
    > db.killOp("shard3:466404288")
    这是一个负载比较高的  主从结构的 mongoDB中  主库 的结果  (insert操作)
    > db.currentOp()
    {
          "inprog" : [
                   {
                           "opid" : 411,
                           "active" : false,
                           "op" : "none",
                           "ns" : "",
                           "query" : {
                                    
                           },
                           "desc" : "repl writer worker 1",  # 和副本集之间的操作有关
                           "threadId" : "0x7f2f2203d700",
                           "waitingForLock" : false,
                           "numYields" : 0,
                           "lockStats" : {
                                    "timeLockedMicros" : {
                                             "r" : NumberLong(0),
                                             "w" : NumberLong(8503)
                                    },
                                    "timeAcquiringMicros" : {
                                             
                                    }
                           }
                   },
    {
                           "opid" : 1037017522,
                           "active" : true, 
                           "secs_running" : 0, 
                           "op" : "insert",  #操作名
                           "ns" : "onroad.gps_point",  #命名空间
                           "insert" : {
                                    "_id" : ObjectId("56206e122dda660e74674bd1"),  #要插入数据的ID 
                                    "user_id" : 315936739,  #要插入的用户ID
                                    "data" : "xxxxxxxx",  #要插入的数据
                                    "data_time" : NumberLong(1444965431)
                           },
                           "client" : "10.10.1.2:46880",
                           "desc" : "conn2377693",
                           "threadId" : "0x7e6b91b13700",
                           "connectionId" : 2377693,
                           "locks" : {
                                    "^onroad" : "W"
                           },
                           "waitingForLock" : true,
                           "numYields" : 0,
                           "lockStats" : {
                                    "timeLockedMicros" : {
                                             
                                    },
                                    "timeAcquiringMicros" : {
                                             
                                    }
                           }
                   },
    

      

    Mongos Server

    启动mongos服务
    连接mongos
    查看当前集群结果:
    mongos> sh.status()
     

     

    sh.status() //有jumbo字段的就是特大块
     
    查看chunk
    mongos> use config
    switched to db config
    mongos> db.chunks.find()
    { "_id" : "testdb.testdoc-name_MinKey", "ns" : "testdb.testdoc", "min" : { "name" : { "$minKey" : 1 } }, "max" : { "name" : { "$maxKey" : 1 } }, "shard" : "shard3", "lastmod" : Timestamp(1, 0), "lastmodEpoch" : ObjectId("61ca9f42fbb9a1274080696b"), "history" : [ { "validAfter" : Timestamp(1640668994, 6), "shard" : "shard3" } ] }
    { "_id" : "config.system.sessions-_id_MinKey", "ns" : "config.system.sessions", "min" : { "_id" : { "$minKey" : 1 } }, "max" : { "_id" : { "$maxKey" : 1 } }, "shard" : "shard1", "lastmod" : Timestamp(1, 0), "lastmodEpoch" : ObjectId("61ca9fa1fbb9a12740806cd7"), "history" : [ { "validAfter" : Timestamp(1640669089, 4), "shard" : "shard1" } ] }
     
    可以看所有shard的database信息
    db.stat()

     

    在mongos服务器上停止平衡器。
    mongos> sh.stopBalancer()
    锁定配置服务器和各分片服务器,登录配置服务器和各分片服务器的Secondary执行命令
    db.fsyncLock()
    开始备份数据库
    mongodump -h mongo2.example.net --port 27027 --authenticationDatabase admin -u myUserAdmin -p abc123 -o /data/backup/config mongodump -h mongo2.example.net --port 27017 --authenticationDatabase admin -u myUserAdmin -p abc123 -o /data/backup/shard1 mongodump -h mongo3.example.net --port 27018 --authenticationDatabase admin -u myUserAdmin -p abc123 -o /data/backup/shard2 mongodump -h mongo1.example.net --port 27019 --authenticationDatabase admin -u myUserAdmin -p abc123 -o /data/backup/shard3
    锁定配置服务器和各分片服务器
    db.fsyncUnlock()
    在mongos中开启平衡器
    sh.setBalancerState(true);
    rs.initiate( { _id: "cs0", configsvr: true, members: [ { _id : 0, host : "mongo1.example.net:27027" }, { _id : 1, host : "mongo2.example.net:27027" }, { _id : 2, host : "mongo3.example.net:27027" } ] } )
     
     
     

  • 相关阅读:
    npm tip: go to the package's home page
    centos7在Evolution中配置163邮箱,被阻止收件解决方法
    emacs-显示行号以及跳转到指定行
    2020年学习目标之一——emacs
    学习前端的时候,突然想起了Sharepoint母版页里的占位符,算知识的融会不?
    问题记录--jekyll serve 启动的时候如何指定80端口
    为什么总是无法访问VMware内的web服务?
    python开发目录合并小工具 PathMerge
    python计算文件的md5值
    python+selenium 简单尝试
  • 原文地址:https://www.cnblogs.com/sui84/p/15754799.html
Copyright © 2020-2023  润新知