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" } ] } )
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2021-01-01 MongoDB语法