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操作)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
> 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" } ] } )
 
 
 

posted on   白马酒凉  阅读(461)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2021-01-01 MongoDB语法
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示