这是按照指引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" } ] } )