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" } ] } )
 
 
 

原文地址:https://www.cnblogs.com/sui84/p/15754799.html