连接路由节点
mongos> show databases;
admin 0.000GB
config 0.326GB
csms 122.412GB
切换到config 数据库,里面是我们mongo的配置信息
mongos> use config
mongos> show tables;
actionlog
changelog
chunks
collections
databases
lockpings
locks
migrations
mongos
settings
shards
tags
transactions
version
1、config.shard 记录了集群的所有分片信息
mongos> db.shards.find()
{ "_id" : "set1", "host" : "set1/172.17.17.70:27056,172.17.17.71:27057", "state" : 1, "tags" : [ "tag1", "province_a" ] }
{ "_id" : "set2", "host" : "set2/172.17.17.71:27056,172.17.17.72:27057", "state" : 1, "tags" : [ "tag2", "province_b" ] }
{ "_id" : "set3", "host" : "set3/172.17.17.70:27057,172.17.17.72:27056", "state" : 1, "tags" : [ "tag3", "province_c" ] }
_id 来自于副本集的名称,所以集群中的每个副本集名称都必须是唯一的。
2、config.database 记录集群中所有数据库的信息,不管数据库分片没有分片
mongos> db.databases.find()
{ "_id" : "csms", "primary" : "set3", "partitioned" : true }
如果数据库分片,则partitioned=true,primary 是主数据库,数据库的所有新集合均默认被创建在数据库的主分片上
3、config.collection
mongos> db.collections.findOne()
{
"_id" : "csms.recordFollowEwb",
"lastmodEpoch" : ObjectId("5ae960dc3f56cf5dcfeed63d"),
"lastmod" : ISODate("1970-02-19T17:02:47.298Z"),
"dropped" : false,
"key" : {
"ewbNo" : "hashed"
},
"unique" : false,
"uuid" : UUID("cc9a11fa-f177-4c07-a94d-4410f3712cd9")
}
_id:集合命名空间
lastmodEpoch:
dropped:是否已经被删除
lastmod:
unique:片键是否是唯一索引。该字段只有当值为true才会出现,片键默认是不唯一的。
key:片键
4、config.chunk 记录集合中所有块的信息
mongos> db.chunks.find().pretty()
{
"_id" : "csms.test-skey_\"003\"ct_MinKey",
"lastmod" : Timestamp(33, 204),
"lastmodEpoch" : ObjectId("5ae9671e3f56cf5dcfef32e6"),
"ns" : "csms.test",
"min" : {
"skey" : "003",
"ct" : { "$minKey" : 1 }
},
"max" : {
"skey" : "003",
"ct" : ISODate("2018-05-07T09:53:26.348Z")
},
"shard" : "set1"
}
_id:块的唯一标识符
ns:块所属的集合名词
min:块范围的最小值
max:块范围的最大值
shard:所属分片
lastmod 和lastmodEpoch 用于记录块版本,当一个块被拆分成两块,为了区分该块与之前的块。因此我们用t和i字段表示块的主(major)版本和副版本(minor)
主版本在块迁移至新的分片时候发生改变,副版本在块被拆分时候发生改变
5、config.chanagelog 用于跟踪记录集群的操作,该集合会记录所有的拆分和迁移操作
{
"_id" : "pmongokdgd04-2018-07-12T14:01:56.201+0800-5b46eed4747b3ed757d4ed29",
"server" : "pmongokdgd04",
"clientAddr" : "172.17.17.72:41423",
"time" : ISODate("2018-07-12T06:01:56.201Z"),
"what" : "multi-split",
"ns" : "csms.test",
"details" : {
"before" : {
"min" : {
"skey" : "028",
"ct" : ISODate("2018-07-10T11:17:10.846Z")
},
"max" : {
"skey" : "028",
"ct" : { "$maxKey" : 1 }
},
"lastmod" : Timestamp(33, 2537),
"lastmodEpoch" : ObjectId("5ae9671e3f56cf5dcfef32e6")
},
"number" : 1,
"of" : 3,
"chunk" : {
"min" : {
"skey" : "028",
"ct" : ISODate("2018-07-10T11:17:10.846Z")
},
"max" : {
"skey" : "028",
"ct" : ISODate("2018-07-11T07:29:06.892Z")
},
"lastmod" : Timestamp(33, 2538),
"lastmodEpoch" : ObjectId("5ae9671e3f56cf5dcfef32e6")
}
}
}
{
"_id" : "pmongokdgd04-2018-07-12T14:01:56.202+0800-5b46eed4747b3ed757d4ed2b",
"server" : "pmongokdgd04",
"clientAddr" : "172.17.17.72:41423",
"time" : ISODate("2018-07-12T06:01:56.202Z"),
"what" : "multi-split",
"ns" : "csms.test",
"details" : {
"before" : {
"min" : {
"skey" : "028",
"ct" : ISODate("2018-07-10T11:17:10.846Z")
},
"max" : {
"skey" : "028",
"ct" : { "$maxKey" : 1 }
},
"lastmod" : Timestamp(33, 2537),
"lastmodEpoch" : ObjectId("5ae9671e3f56cf5dcfef32e6")
},
"number" : 2,
"of" : 3,
"chunk" : {
"min" : {
"skey" : "028",
"ct" : ISODate("2018-07-11T07:29:06.892Z")
},
"max" : {
"skey" : "028",
"ct" : ISODate("2018-07-12T05:15:15.251Z")
},
"lastmod" : Timestamp(33, 2539),
"lastmodEpoch" : ObjectId("5ae9671e3f56cf5dcfef32e6")
}
}
}
{
"_id" : "pmongokdgd04-2018-07-12T14:01:56.202+0800-5b46eed4747b3ed757d4ed2d",
"server" : "pmongokdgd04",
"clientAddr" : "172.17.17.72:41423",
"time" : ISODate("2018-07-12T06:01:56.202Z"),
"what" : "multi-split",
"ns" : "csms.test",
"details" : {
"before" : {
"min" : {
"skey" : "028",
"ct" : ISODate("2018-07-10T11:17:10.846Z")
},
"max" : {
"skey" : "028",
"ct" : { "$maxKey" : 1 }
},
"lastmod" : Timestamp(33, 2537),
"lastmodEpoch" : ObjectId("5ae9671e3f56cf5dcfef32e6")
},
"number" : 3,
"of" : 3,
"chunk" : {
"min" : {
"skey" : "028",
"ct" : ISODate("2018-07-12T05:15:15.251Z")
},
"max" : {
"skey" : "028",
"ct" : { "$maxKey" : 1 }
},
"lastmod" : Timestamp(33, 2540),
"lastmodEpoch" : ObjectId("5ae9671e3f56cf5dcfef32e6")
}
}
}
"what" : "multi-split" :通过这里我们可以看到做的是chunk拆分
"number" : 1,"of" : 3, 说明chunk被拆分成了3分,当前是3分的第一分
before:chunk的拆分前范围是 {028, ISODate("2018-07-10T11:17:10.846Z")} {028, "$maxKey"}
"chunk" : chunk 拆分后,每个分片的范围
{028,ISODate("2018-07-10T11:17:10.846Z")} {028,ISODate("2018-07-11T07:29:06.892Z")}
{028,ISODate("2018-07-11T07:29:06.892Z")}{028,ISODate("2018-07-12T05:15:15.251Z"}
{028,ISODate("2018-07-12T05:15:15.251Z")} {028, "$maxKey"}
"lastmod" : Timestamp(33, 2540) 被拆分后,一直在增长
{
"_id" : "pmongokdgd04-2018-07-12T03:47:11.699+0800-5b465ebf1b51b632a41160c6",
"server" : "pmongokdgd04",
"clientAddr" : "172.17.17.70:48424",
"time" : ISODate("2018-07-11T19:47:11.699Z"),
"what" : "moveChunk.from",
"ns" : "config.system.sessions",
"details" : {
"min" : {
"_id" : {
"id" : UUID("00001a80-0486-4236-a48a-9abd420cd1d8"),
"uid" : BinData(0,"IfpXJILbfH9Uxq0b3Xecr8MkNNtCf6HnCwqV83gL0UU=")
}
},
"max" : {
"_id" : {
"id" : UUID("14ef8128-805c-425d-954e-27478d30274d"),
"uid" : BinData(0,"IfpXJILbfH9Uxq0b3Xecr8MkNNtCf6HnCwqV83gL0UU=")
}
},
"step 1 of 6" : 0,
"step 2 of 6" : 2,
"step 3 of 6" : 202,
"to" : "set2",
"from" : "set1",
"note" : "aborted"
}
}
"what" : 有两种形式 "moveChunk.from" 和 "moveChunk.to"
"step 1 of N:以毫秒为单位,显示了步骤的耗时长短
当from 分片收到mongos发来的movechunk命令时会
(1)检查命令参数
(2)向配置服务器申请获得一个分布锁,以便进入迁移过程
(3)尝试连接到to的分片
(4)数据复制,这整个过程的临界区
(5)与to分片和配置服务器一起确认迁移是否完成
to 和from 分片间进行的是直接通信:每个分片都是直接连接到另外一个分片和配置服务器上,以进行迁移。
如果from 分片在迁移过程的最后一步出现短暂的网络连接问题,它可能会处于无法撤销迁移操作,也无法仅需进行下去的状态
这种情况下,mongod会关闭。
当to 分片收到from 分片发来的命令时,会执行如下操作
(1)迁移索引。如果该分片不包含任何来自迁移集合的块,则需知道有哪些字段上建立过索引。如果再此之前to分片已有来自于该集合的块,则可忽略此步骤
(2)删除块范围内已存在的任何数据。之前失败迁移,可能会留有数据残余,或者是正处于恢复过程当中,此时我们不希望残留数据与新数据混杂在一起
(3)将块中的所有文档复制到to 分片
(4)复制期间,在to分片上重新执行曾在这些文档上执行过的操作
(5)等待to分片将新迁移过来的数据复制到集群的大多数服务器上
(6)修改块的原数据,以完成迁移过程,表明数据已经被成功迁移到to分片上。
6、config.tags 标签
{
"_id" : {
"ns" : "csms.test",
"min" : {
"skey" : "012",
"ct" : { "$minKey" : 1 }
}
},
"ns" : "csms.test",
"min" : {
"skey" : "012",
"ct" : { "$minKey" : 1 }
},
"max" : {
"skey" : "012",
"ct" : { "$maxKey" : 1 }
},
"tag" : "province_a"
}
7、config.settings 均衡器设置和块大小的文档信息
mongos> db.settings.find()
{ "_id" : "balancer", "mode" : "off", "stopped" : true }