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
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"
}
这些文档在min
和max
字段中存储了描述碎片的分片键的值范围。另外,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集合包含以下分片配置设置:
-
块大小。要更改块大小,请参阅修改分片群集中的块大小。指定的
chunksize
值以兆字节为单位。 -
平衡器状态。要更改状态,请参阅禁用平衡器。
-
自动拆分。要启用或禁用自动拆分标志,请使用相应的sh.enableAutoSplit()方法或sh.disableAutoSplit()方法。
以下是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
不要手动修改或删除这些集合。
要访问mongod或mongos实例的这些集合,请将mongo shell 连接到该实例。
config.system.
sessions
system.sessions
集合存储可供部署的所有成员使用的会话记录。
当用户在mongod或mongos实例上创建会话时,该会话的记录最初仅存在于该实例的内存中。实例将定期将其缓存的会话同步到system.sessions
集合;那时,它们对部署的所有成员都是可见的。
要查看system.sessions
集合中的记录,请使用$listSessions。
Warning
不要手动修改或删除system.sessions
集合。
在分片群集中,system.sessions
集合被分片。将分片添加到分片群集时,如果要添加的分片已经包含其自己的system.sessions
集合,则 MongoDB 在添加过程中会删除新分片的system.sessions
集合。
config.
transactions
transactions
集合存储用于支持retryable writes的副本集和分片群集的记录。
Warning
不要手动修改或删除transactions
集合。