Config Database

在本页面

config数据库中的集合支持:

Important

config数据库的架构是内部,在 MongoDB 的发行版之间可能会更改。 config数据库不是可靠的 API,在正常操作或维护过程中,用户不应将数据写入config数据库。

支持分片群集操作的集合

要访问config数据库并查看支持分片操作的集合列表,请将mongo shell 连接到分片群集中的mongos实例,然后发出以下命令:

use config

show collections

config 数据库主要供内部使用,在正常操作过程中,切勿手动在其中插入或存储数据。但是,如果需要验证分片群集的配置服务器的写可用性,可以将文档插入测试集合(确保没有该名称的集合之后):

Warning

在正常运行的系统上对config数据库进行修改可能会导致数据集不稳定或不一致。如果必须修改config数据库,请使用mongodump创建config数据库的完整备份。

db.testConfigServerWriteAvail.insert( { a : 1 } )

如果操作成功,则配置服务器可用于处理写入。

服务器的 Future 版本可能会在 config 数据库中包含不同的集合,因此在为测试集合选择名称时要小心。

MongoDB 在config数据库中使用以下集合来支持分片:

config. changelog

Internal MongoDB Metadata

config数据库是内部数据库:应用程序和 Management 员在正常操作过程中不应修改或依赖其内容。

changelog集合为分片集合的元数据的每次更改存储一个文档。

Example

以下示例显示了从changelog集合拆分的块的单个记录:

{
"_id" : "<hostname>-<timestamp>-<increment>",
"server" : "<hostname><:port>",
"clientAddr" : "127.0.0.1:63381",
"time" : ISODate("2012-12-11T14:09:21.039Z"),
"what" : "split",
"ns" : "<database>.<collection>",
"details" : {
"before" : {
"min" : {
"<database>" : { $minKey : 1 }
},
"max" : {
"<database>" : { $maxKey : 1 }
},
"lastmod" : Timestamp(1000, 0),
"lastmodEpoch" : ObjectId("000000000000000000000000")
},
"left" : {
"min" : {
"<database>" : { $minKey : 1 }
},
"max" : {
"<database>" : "<value>"
},
"lastmod" : Timestamp(1000, 1),
"lastmodEpoch" : ObjectId(<...>)
},
"right" : {
"min" : {
"<database>" : "<value>"
},
"max" : {
"<database>" : { $maxKey : 1 }
},
"lastmod" : Timestamp(1000, 2),
"lastmodEpoch" : ObjectId("<...>")
}
}
}

changelog集合中的每个文档都包含以下字段:

  • config.changelog. _id

    • changelog._id的值为:<hostname>-<timestamp>-<increment>
  • config.changelog. server

    • 存放此数据的服务器的主机名。
  • config.changelog. clientAddr

    • 包含 Client 端地址的字符串,是发起此更改的mongos实例。
  • config.changelog. time

    • 反映更改发生时间的ISODate时间戳。
  • config.changelog. what

    • 反映记录的更改类型。可能的值为:
  • dropCollection

  • dropCollection.start

  • dropDatabase

  • dropDatabase.start

  • moveChunk.start

  • moveChunk.commit

  • split

  • multi-split

  • config.changelog. ns

    • 发生更改的名称空间。
  • config.changelog. details

    • document包含有关更改的其他详细信息。 details文档的结构取决于更改的类型。

config. chunks

Internal MongoDB Metadata

config数据库是内部数据库:应用程序和 Management 员在正常操作过程中不应修改或依赖其内容。

chunks集合为集群中的每个块存储一个文档。考虑以下名为records.pets-animal_\"cat\"的块的文档示例:

{
   "_id" : "mydb.foo-a_\"cat\"",
   "lastmod" : Timestamp(1000, 3),
   "lastmodEpoch" : ObjectId("5078407bd58b175c5c225fdc"),
   "ns" : "mydb.foo",
   "min" : {
         "animal" : "cat"
   },
   "max" : {
         "animal" : "dog"
   },
   "shard" : "shard0004"
}

这些文档在minmax字段中存储了描述碎片的分片键的值范围。另外,shard字段标识“拥有”块的集群中的分片。

config. collections

Internal MongoDB Metadata

config数据库是内部数据库:应用程序和 Management 员在正常操作过程中不应修改或依赖其内容。

collections集合为群集中的每个分片集合存储一个文档。给定records数据库中名为pets的集合,则collections集合中的文档将类似于以下内容:

{
   "_id" : "records.pets",
   "lastmod" : ISODate("1970-01-16T15:00:58.107Z"),
   "dropped" : false,
   "key" : {
         "a" : 1
   },
   "unique" : false,
   "lastmodEpoch" : ObjectId("5078407bd58b175c5c225fdc"),
   "uuid" : UUID("23f01653-53c7-4da2-aa01-ac3cbcf572d6")
}

config. databases

Internal MongoDB Metadata

config数据库是内部数据库:应用程序和 Management 员在正常操作过程中不应修改或依赖其内容。

databases集合为集群中的每个数据库存储一个文档。对于每个数据库,相应的文档显示名称,数据库的primary shard以及数据库的分片启用状态。

{ "_id" : "mydb", "primary" : "shard0000", "partitioned" : true }

config. lockpings

Internal MongoDB Metadata

config数据库是内部数据库:应用程序和 Management 员在正常操作过程中不应修改或依赖其内容。

lockpings集合跟踪分片群集中的活动组件。给定一个在example.com:30000上运行mongos的集群,lockpings集合中的文档将类似于:

{ "_id" : "example.com:30000:1350047994:16807", "ping" : ISODate("2012-10-12T18:32:54.892Z") }

config. locks

Internal MongoDB Metadata

config数据库是内部数据库:应用程序和 Management 员在正常操作过程中不应修改或依赖其内容。

locks集合存储分布式锁。配置服务器副本集的主副本通过将文档插入locks集合来获取锁定。

{
   "_id" : "test.myShardedCollection",
   "state" : 2,
   "process" : "ConfigServer",
   "ts" : ObjectId("5be0b9ede46e4f441a60d891"),
   "when" : ISODate("2018-11-05T21:52:00.846Z"),
   "who" : "ConfigServer:Balancer",
   "why" : "Migrating chunk(s) in collection test.myShardedCollection"
}

从 3.4 版开始,state字段将始终具有值2,以防止任何旧的mongos实例执行平衡操作。 when字段指定配置服务器成员成为主服务器的时间。

在版本 3.4 中,当平衡器处于活动状态时,平衡器将获得一个锁,如以下 3.4 示例所示:

{
   "_id" : "balancer",
   "state" : 2,
   "ts" : ObjectId("5be0bc6cb20effa83b15baa8"),
   "who" : "ConfigServer:Balancer",
   "process" : "ConfigServer",
   "when" : ISODate("2018-11-05T21:56:13.096Z"),
   "why" : "CSRS Balancer"
}

从 3.6 版开始,平衡器不再需要“锁定”。如果您已从 3.4 升级到 3.6,则可以选择删除任何剩余的"_id" : "balancer"文档。

config. mongos

Internal MongoDB Metadata

config数据库是内部数据库:应用程序和 Management 员在正常操作过程中不应修改或依赖其内容。

mongos集合为与群集关联的每个mongos实例存储一个文档。 mongos实例每 30 秒将 ping 发送到群集的所有成员,以便群集可以验证mongos是否处于活动状态。 ping字段显示上次 ping 的时间,而up字段报告自上次 ping 以来mongos的正常运行时间。群集维护此集合以用于报告目的。

以下文档显示了在example.com:27017上运行的mongos的状态。

{
   "_id" : "example.com:27017",
   "advisoryHostFQDNs" : [
      "example.com"
   ],
   "mongoVersion" : "3.6.13",
   "ping" : ISODate("2019-09-25T22:25:12.427Z"),
   "up" : NumberLong(260),
   "waiting" : true
}

config. settings

Internal MongoDB Metadata

config数据库是内部数据库:应用程序和 Management 员在正常操作过程中不应修改或依赖其内容。

settings集合包含以下分片配置设置:

以下是settings集合的示例:

{ "_id" : "chunksize", "value" : 64 }
{ "_id" : "balancer", "mode" : "full", "stopped" : false }
{ "_id" : "autosplit", "enabled" : true }

config. shards

Internal MongoDB Metadata

config数据库是内部数据库:应用程序和 Management 员在正常操作过程中不应修改或依赖其内容。

shards集合在单独的文档中表示集群中的每个分片,如下所示:

{ "_id" : "shard0000", "host" : "localhost:30000", "state" : 1 }

如果该分片是副本集,则host字段显示副本集的名称,斜杠,副本集每个成员的主机名的逗号分隔列表,如以下示例所示:

{ "_id" : "shard0001", "host" : "shard0001/localhost:27018,localhost:27019,localhost:27020", "state" : 1 }

如果分片已分配zones,则此文档具有tags字段,其中包含分配了该区域的数组,如以下示例所示:

{ "_id" : "shard0002", "host" : "localhost:30002", "state" : 1, "tags": [ "NYC" ] }

config. tags

Internal MongoDB Metadata

config数据库是内部数据库:应用程序和 Management 员在正常操作过程中不应修改或依赖其内容。

tags集合包含群集中每个区域范围的文档。 tags集合中的文档类似于以下内容:

{
    "_id" : { "ns" : "records.users", "min" : { "zipcode" : "10001" } },
    "ns" : "records.users",
    "min" : { "zipcode" : "10001" },
    "max" : { "zipcode" : "10281" },
    "tag" : "NYC"
}

config. version

Internal MongoDB Metadata

config数据库是内部数据库:应用程序和 Management 员在正常操作过程中不应修改或依赖其内容。

version集合保存当前的元数据版本号。该集合仅包含一个文档。例如:

{ "_id" : 1, "minCompatibleVersion" : 5, "currentVersion" : 6, "clusterId" : ObjectId("5d8be83a21f577e4b5139b11") }

要访问version集合,您必须使用db.getCollection()方法。例如,要检索集合的文档:

db.getCollection("version").find()

支持会话的集合

3.6 版的新功能。

从 MongoDB 3.6 开始,config数据库包含* internal *集合,以支持因果一致的会话的独立副本,副本集和分片群集以及副本集和分片群集的可重试写入。

Warning

不要手动修改或删除这些集合。

要访问mongodmongos实例的这些集合,请将mongo shell 连接到该实例。

  • config.system. sessions
    • system.sessions集合存储可供部署的所有成员使用的会话记录。

当用户在mongodmongos实例上创建会话时,该会话的记录最初仅存在于该实例的内存中。实例将定期将其缓存的会话同步到system.sessions集合;那时,它们对部署的所有成员都是可见的。

要查看system.sessions集合中的记录,请使用$listSessions

Warning

不要手动修改或删除system.sessions集合。

在分片群集中,system.sessions集合被分片。将分片添加到分片群集时,如果要添加的分片已经包含其自己的system.sessions集合,则 MongoDB 在添加过程中会删除新分片的system.sessions集合。

  • config. transactions
    • transactions集合存储用于支持retryable writes的副本集和分片群集的记录。

Warning

不要手动修改或删除transactions集合。