集群元信息
配置服务器存储了集群的元信息。元信息保存了集群的状态和组织结构,元信息包含每个分片保存的数据块信息以及每个数据块的范围,mongos会缓存这些信息用来做读写的路由分发。
配置服务器在 Config Database 中保存元信息。在对配置服务器进行维护之前一定要备份 config数据库。通过在 mongo 终端中使用如下命令访问 config 数据库。
1 2 3 4 5 6 |
configsvr> show dbs config 0.003GB local 0.002GB configsvr> use config switched to db config configsvr> show tables |
一般情况下,不应该手动编辑 config 数据库的内容, config数据库包含以下集合。
1 2 |
config.actionlog config.changelog |
此集合存储为每一个有更改的分片集合存储元数据信息,集合样例如下:
1 2 3 4 5 6 7 8 9 10 11 12 |
{ "_id" : "localhost.localdomain-2016-01-18T05:57:46.656+0800-569c0e5a69c77fa03420a3", "server" : "localhost.localdomain", "clientAddr" : "192.168.60.10:57179", "time" : ISODate("2016-01-17T21:57:46.656Z"), "what" : "addShard", "ns" : "", "details" : { "name" : "shard0001", "host" : "192.168.60.10:27028" } } |
_id
时间的名称,值为主机名+时间戳+自动增长值。
Server
服务器的主机名。
clientAddr
持有客户端的地址,由mongos实例初始化这个更换。
Time
使用一个ISODate时间戳反映这一变化。
What
表达类型的变化记录,可能的值是:dropCollection、dropCollection.start、dropDatabase、dropDatabase.start、moveChunk.start、moveChunk.commit、split、multi-split。
Ns
变化发生的名称空间。
details
一个包含有关更改的附加细节的文档,但详细文档的结构取决于更改的类型。
config.chunks
此集合存储集群中的每一个Chunk信息,大致有Chunk的ID、名称空间、存储的数据是从哪里开始到哪里结束(这个跟片键有关)以及存储到那个shard上面。集合样例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "_id" : "shardtest.user-userid_MinKey", "lastmod" : Timestamp(3, 2), "lastmodEpoch" : ObjectId("569e8ce762d9c77fa034908d"), "ns" : "shardtest.user", "min" : { "userid" : { "$minKey" : 1 } }, "max" : { "userid" : NumberLong("-6148914691236517204") }, "shard" : "shard0000" } |
config.collections
此集合存储集群中的每一个分片集合,包括已经删除的集合,其中有数据库名字以及集合的名字。且当dropped的值为false时表示此集合没有被删除,为true时表示此集合被删除。另外还有次集合使用的片键是什么?集合的样例如下:
1 2 3 4 5 6 7 8 9 10 |
{ "_id" : "shardtest.user", "lastmodEpoch" : ObjectId("569e8ce762d9c77fa034908d"), "lastmod" : ISODate("1970-02-19T17:02:47.298Z"), "dropped" : false, "key" : { "userid" : "hashed" }, "unique" : false } |
config.databases
此集合存储集群中的每一个数据库,并追踪数据库分片是否已经启用,当一个数据库分片启用后partitioned为true,primary字段会持有一个主分片的名字。集合样例如下:
1 2 |
{ "_id" : "shardtest", "primary" : "shard0000", "partitioned" : true } { "_id" : "test", "primary" : "shard0001", "partitioned" : false } |
config.lockpings
此集合存储集群中保持活动组件的信息,下面给出一个样例:
1 2 3 4 |
{ "_id" : "localhost.localdomain:27017:1453061162:1804289383", "ping" : ISODate("2016-01-19T19:38:25.782Z") } { "_id" : "localhost.localdomain:27018:1453128742:303362360", "ping" : ISODate("2016-01-19T19:38:07.401Z") } { "_id" : "localhost.localdomain:27028:1453128742:467951609", "ping" : ISODate("2016-01-19T19:38:07.402Z") } { "_id" : "localhost.localdomain:27038:1453209619:1223725355", "ping" : ISODate("2016-01-19T19:38:23.037Z") } |
config.locks
此集合存储集群中分布式锁,这确保了每一次只有一个mongos实例可以执行管理任务在集群中。作为平衡器以锁插入一个类似以下的锁收集文件的人。
1 2 3 4 5 6 7 8 9 |
{ "_id" : "balancer", "process" : "example.net:40000:1350402818:16807", "state" : 2, "ts" : ObjectId("507daeedf40e1879df62e5f3"), "when" : ISODate("2012-10-16T19:01:01.593Z"), "who" : "example.net:40000:1350402818:16807:Balancer:282475249", "why" : "doing balance round" } |
If a mongos holds the balancer lock, the state field has a value of 2, which means that balancer is active. The when field indicates when the balancer began the current operation.
config.mongos
此集合存储一个文档,mongos实例每30秒发送ping信息至集群中的所有成员使之能够确认mongos实例是活动的。而文档中显示的是最后一次ping的时间,该群集维护这个集合是用于报告用途。集合样例如下:
1 |
{ "_id" : "localhost.localdomain:27017", "ping" : ISODate("2016-01-19T19:26:16.630Z"), "up" : NumberLong(170413), "waiting" : true, "mongoVersion" : "3.2.0" } |
config.settings
此集合中保存的是chunk的默认大小(64MB),以及均衡器是否开启,当stopped为false时表示均衡器为开启状态。集合样例如下:
1 2 |
{ "_id" : "chunksize", "value" : NumberLong(64) } { "_id" : "balancer", "stopped" : false } |
config.shards
此集合存储集群中shard的节点信息,有shard的唯一ID以及主机名。集合样例如下:
1 2 3 |
{ "_id" : "shard0000", "host" : "192.168.60.10:27018" } { "_id" : "shard0001", "host" : "192.168.60.10:27028" } { "_id" : "shard0002", "host" : "192.168.60.10:27038" } |
config.tags
此收集保存每个标签关键文件在集群范围内的分片,集合中的文档类似如下:
1 2 3 4 5 6 7 |
{ "_id" : { "ns" : "records.users", "min" : { "zipcode" : "10001" } }, "ns" : "records.users", "min" : { "zipcode" : "10001" }, "max" : { "zipcode" : "10281" }, "tag" : "NYC" } |
config.version
此集合中保存了当前元数据的版本号,插入此集合方法如下:
1 2 |
configsvr> db.getCollection("version").find() { "_id" : 1, "minCompatibleVersion" : 5, "currentVersion" : 6, "clusterId" : ObjectId("569bf42a62d9c77fa0341b56") } |