Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

Config Database

在此页面上

  • 限制
  • 支持分片集群操作的集合
  • 支持会话的集合

config 数据库中的集合支持:

  • 分片集群操作,以及

  • 从 MongoDB 3.6开始,独立集群、副本集和分片集群的因果一致会话以及副本集和分片集群的可重试写入。

注意

分片集群可能会在config数据库中显示不同的collection,具体取决于您连接到mongos还是mongod

  • mongos 上,config 数据库显示位于配置服务器上的集合,例如 collectionschunks

  • mongod 上,config 数据库显示指定分区的特定集合,如 migrationCoordinatorsrangeDeletions

当配置服务器和服务器托管在同一节点上时,mongos config可能有权访问数据库中的某些collection。

从 MongoDB 5.0 开始,不允许对 config.transactions 集合进行非事务读取,读取关注点和选项如下:

重要

config 数据库的模式为模式,可能会在 MongoDB 不同版本之间发生变动。config 数据库并非可靠的 API,用户不应在正常操作或维护过程中向 config 数据库写入数据。

注意

无法在多文档中对 config 数据库的集合执行读/写操作。

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

use config
show collections

注意

如果使用访问控制运行,请确保您有特权允许对数据库执行 listCollections 动作。

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

警告

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

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

操作成功后,配置服务器就可以用于进程写入。

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

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

config.changelog

提示

内部 MongoDB 元数据

配置数据库属于内部数据库:应用程序和管理员在正常操作过程中不应修改或依赖其内容。

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

例子

下面的示例显示了从 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("<...>")
},
"owningShard" : "<value>"
}
}

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

config.changelog._id

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

config.changelog.server

保存此数据的服务器的主机名。

config.changelog.clientAddr

一个保存客户端地址的字符串,一个启动此更改的 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

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

config.chunks

提示

内部 MongoDB 元数据

配置数据库属于内部数据库:应用程序和管理员在正常操作过程中不应修改或依赖其内容。

chunks集合为数据块集群的每个数据段存储一个文档。 考虑以下数据块mydb.foo-a_\"cat\"的数据段的文档示例:

{
"_id" : "mydb.foo-a_\"cat\"",
"lastmod" : Timestamp(2, 1),
"uuid": "c025d039-e626-435e-b2d2-c1d436038041",
"min" : {
"animal" : "cat"
},
"max" : {
"animal" : "dog"
},
"shard" : "shard0004",
"history" : [ { "validAfter" : Timestamp(1569368571, 27), "shard" : "shard0004" } ]
}

这些文档存储描述 minmax 字段中数据段的分片键值的范围。此外,shard 字段标识集群中“拥有”该数据段的分片。

config.collections

提示

内部 MongoDB 元数据

配置数据库属于内部数据库:应用程序和管理员在正常操作过程中不应修改或依赖其内容。

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

{
"_id" : "records.pets",
"lastmod" : ISODate("2021-07-21T15:48:15.193Z"),
"timestamp": Timestamp(1626882495, 1),
"key" : {
"a" : 1
},
"unique" : false,
"lastmodEpoch" : ObjectId("5078407bd58b175c5c225fdc"),
"uuid" : UUID("f8669e52-5c1b-4ea2-bbdc-a00189b341da")
}
config.databases

提示

内部 MongoDB 元数据

配置数据库属于内部数据库:应用程序和管理员在正常操作过程中不应修改或依赖其内容。

databases 集合为集群中的每个数据库存储一个文档。

对于每个数据库,相应的文档会显示该数据库的名称、主分片、分片启用状态以及版本。

{ "_id" : "test", "primary" : "shardA", "partitioned" : true, "version" : { "uuid" : UUID("516a5f79-5eb9-4844-8ee9-b8e9de91b760"), "timestamp" : Timestamp(1626894204, 1), "lastMod" : 1 } }
{ "_id" : "hr", "primary" : "shardA", "partitioned" : false, "version" : { "uuid" : UUID("8e39d61d-6259-4c33-a5ed-bcd2ae317b6f"), "timestamp" : Timestamp(1626895015, 1), "lastMod" : 1 } }
{ "_id" : "reporting", "primary" : "shardB", "partitioned" : false, "version" : { "uuid" : UUID("07c63242-51b3-460c-865f-a67b3372d792"), "timestamp" : Timestamp(1626895826, 1), "lastMod" : 1 } }

sh.status() 方法会在数据库部分返回此信息。

config.lockpings

提示

内部 MongoDB 元数据

配置数据库属于内部数据库:应用程序和管理员在正常操作过程中不应修改或依赖其内容。

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

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

提示

内部 MongoDB 元数据

配置数据库属于内部数据库:应用程序和管理员在正常操作过程中不应修改或依赖其内容。

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.migrationCoordinators

migrationCoordinators 集合存在于每个分片上,并为从此分片到另一个分片的每个正在进行的数据块迁移存储一个文档。如果无法将文档写入分片副本集的大多数节点,则数据块迁移将失败。

迁移完成后,将从集合中删除描述迁移的文档。

config.mongos

提示

内部 MongoDB 元数据

配置数据库属于内部数据库:应用程序和管理员在正常操作过程中不应修改或依赖其内容。

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

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

{
"_id" : "example.com:27017",
"advisoryHostFQDNs" : [
"example.com"
],
"mongoVersion" : "4.2.0",
"ping" : ISODate("2019-09-25T19:26:52.360Z"),
"up" : NumberLong(50),
"waiting" : true
}
config.rangeDeletions

rangeDeletions 集合存在于每个分片上,并为每个包含孤立文档的数据块范围存储一个文档。如果无法将文档写入分片副本集的大多数节点,则数据块迁移将失败。

清除孤立的数据段范围时,将从集合中删除范围描述文档。

config.settings

提示

内部 MongoDB 元数据

配置数据库属于内部数据库:应用程序和管理员在正常操作过程中不应修改或依赖其内容。

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

以下是settings集合中的一些示例文档:

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

提示

内部 MongoDB 元数据

配置数据库属于内部数据库:应用程序和管理员在正常操作过程中不应修改或依赖其内容。

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

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

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

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

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

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

提示

内部 MongoDB 元数据

配置数据库属于内部数据库:应用程序和管理员在正常操作过程中不应修改或依赖其内容。

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

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

提示

内部 MongoDB 元数据

配置数据库属于内部数据库:应用程序和管理员在正常操作过程中不应修改或依赖其内容。

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

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

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

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

版本 3.6 中的新增功能

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

警告

请勿手动修改或删除这些集合。

要访问 mongodmongos 实例的这些集合,请将 mongosh 与实例连接。

config.system.sessions

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

当用户在 mongodmongos 实例上创建会话时,会话记录最初仅存在于该实例的内存中。实例会定期将其缓存的会话同步到 system.sessions 集合;同步后,部署的所有节点都可以看到这些会话。

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

警告

请勿手动修改或删除 system.sessions 集合。

在分片集群中, system.sessions 集合已分片。

  • 向分片集群添加分片时,如果要添加的分片已经包含自己的system.sessions 集合,MongoDB 将在添加进程中删除新分片的 system.sessions 集合。

  • 从版本 4.4(和 4.2.7)开始,MongoDB 会自动将 system.sessions 集合分割为至少 1024 个数据块,并将这些数据块均匀地分布在集群中的分片中。

config.transactions

transactions 集合存储用于支持副本集和分片集群的可重试写入事务的记录。

警告

请勿手动修改或删除 transactions 集合。

后退

对分片集群进行故障排除