Config Database
在此页面上
config
数据库中的集合支持:
注意
分片集群可能会在config
数据库中显示不同的collection,具体取决于您连接到mongos
还是mongod
:
在
mongos
上,config
数据库显示位于配置服务器上的集合,例如collections
或chunks
。在
mongod
上,config
数据库显示指定分区的特定集合,如migrationCoordinators
或rangeDeletions
。
当配置服务器和服务器托管在同一节点上时,mongos
config
可能有权访问数据库中的某些collection。
限制
从 MongoDB 5.0 开始,不允许对 config.transactions
集合进行非事务读取,读取关注点和选项如下:
"majority"
,且设置了 afterClusterTime 选项在一个因果一致的会话中使用 MongoDB 驱动程序和
"majority"
时
重要
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
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.clientAddr
一个保存客户端地址的字符串,一个启动此更改的
mongos
实例。
config.changelog.time
反映更改发生时间的 ISODate 时间戳。
config.chunks
config.chunks
集合会为集群中的每个数据块存储一个文档。以下示例显示了一个文档:{ _id: ObjectId('65a954c0de11596e08e7c1dc'), uuid: UUID('a4479215-a38d-478f-a82b-e5e95d455e55'), min: { a: Long('121204345') }, max: { a: Long('993849349') }, shard: 'shard01', lastmod: Timestamp({ t: 1, i: 0 }), history: [ { validAfter: Timestamp({ t: 1705596095, i: 14 }), shard: 'shard01' } ] } 在文档中:
_id
是数据块标识符。min
和max
是数据段的分片键的值范围。shard
是将数据段存储在集群中的分片的名称。
提示
如要查找一个集合中的数据块,请从
config.collections
集合中检索集合的uuid
标识符。然后,使用uuid
从config.chunks
集合中检索uuid
相同的匹配文档。
config.collections
从 MongoDB8.0 开始,
config.collections
会为所有分片集合和使用moveCollection
移动的非分片集合存储元数据。在8.0之前的MongoDB版本中,
config.collections
仅存储分片的集合的元数据。config.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.csrs.indexes
7.0 版本中的新增功能。
indexes
集合为分片上可用的每个全局索引存储一个文档。该集合中的每个文档都包含以下字段:
config.databases
databases
集合为集群中的每个数据库存储一个文档。对于每个数据库,相应的文档显示名称、数据库的主分片 和版本。
{ "_id" : "test", "primary" : "shardA", "version" : { "uuid" : UUID("516a5f79-5eb9-4844-8ee9-b8e9de91b760"), "timestamp" : Timestamp(1626894204, 1), "lastMod" : 1 } } { "_id" : "hr", "primary" : "shardA", "version" : { "uuid" : UUID("8e39d61d-6259-4c33-a5ed-bcd2ae317b6f"), "timestamp" : Timestamp(1626895015, 1), "lastMod" : 1 } } { "_id" : "reporting", "primary" : "shardB", "version" : { "uuid" : UUID("07c63242-51b3-460c-865f-a67b3372d792"), "timestamp" : Timestamp(1626895826, 1), "lastMod" : 1 } } sh.status()
方法会在数据库部分返回此信息。
config.migrationCoordinators
migrationCoordinators
集合存在于每个分片上,并为从此分片到另一个分片的每个正在进行的数据块迁移存储一个文档。如果无法将文档写入分片副本集的大多数节点,则数据块迁移将失败。迁移完成后,将从集合中删除描述迁移的文档。
config.mongos
mongos
集合可为隶属于集群的每个mongos
实例存储一个文档。集群会维护此集合以便用于报告。mongos
集合中的每个文档都包含这些字段:字段数据类型说明_id
字符串advisoryHostFQDNs
字符串数组mongos
的完全限定域名(FQDN)的数组。created
Date当
mongos
启动时。5.2 版本中的新增功能。
mongoVersion
字符串正在运行mongos
的 MongoDB 版本。ping
Dateup
NumberLong截至上次 ping 时mongos
已启动的秒数。waiting
布尔此字段始终为true
,包含此字段只是为了向后兼容。以下文档显示了
example.com:27017
上运行的mongos
的状态。[ { _id: 'example.com:27017', advisoryHostFQDNs: [ "example.com" ], created: ISODate("2021-11-22T16:32:13.708Z"), mongoVersion: "5.2.0", ping: ISODate("2021-12-15T22:09:23.161Z"), up: Long("2007429"), waiting: true } ]
config.rangeDeletions
rangeDeletions
集合存在于每个分片上,并为每个包含孤立文档的数据块范围存储一个文档。如果无法将文档写入分片副本集的大多数节点,则数据块迁移将失败。清除孤立的数据段范围时,将从集合中删除范围描述文档。
config.settings
settings
集合包含以下分片配置设置:范围大小。要更改范围大小,请参阅修改分片集群中的范围大小。指定的
chunksize
值以 MB 为单位。负载均衡器设置。要更改负载均衡器设置(包括负载均衡器状态),请参阅管理分片集群负载均衡器。
Autosplit:
从 MongoDB 6.0.3 开始,不再执行自动数据块分割。这是因为均衡策略的改进。自动分割命令仍然存在,但不执行操作。
在 MongoDB 6.1 以前的版本中:
balancerStart
还会为分片集群启用自动分割。balancerStop
还会为分片集群禁用自动分割。要启用或禁用自动分割标志,请使用相应的
sh.enableAutoSplit()
方法或sh.disableAutoSplit()
方法。
settings
集合中的示例文档:{ "_id" : "chunksize", "value" : 64 } { "_id" : "balancer", "mode" : "full", "stopped" : false }
config.shards
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
tags
集合包含集群中每个区域范围的文档。tags
集合中的文档类似于以下内容:{ "_id" : { "ns" : "records.users", "min" : { "zipcode" : "10001" } }, "ns" : "records.users", "min" : { "zipcode" : "10001" }, "max" : { "zipcode" : "10281" }, "tag" : "NYC" }
config.version
version
集合保存当前元数据版本号。此集合仅包含一个文档。例如:{ "_id" : 1, "minCompatibleVersion" : 5, "currentVersion" : 6, "clusterId" : ObjectId("5d8bc01a690d8abbd2014ddd") } 要访问
version
集合,必须使用db.getCollection()
方法。例如,要检索集合的文档:db.getCollection("version").find()
支持会话的集合
config
数据库包含内部集合,用于支持独立集群、副本集和分片分片集群的因果一致性会话,以及副本集和分片群集的可重试写入和事务。
警告
请勿手动修改或删除这些集合。
要访问mongod
或mongos
实例的这些集合,请将mongosh
连接到该实例。
config.system.sessions
system.sessions
集合存储了可供部署的所有成员使用的会话记录。当用户在
mongod
或mongos
实例上创建会话时,会话记录最初仅存在于该实例的内存中。实例会定期将其缓存的会话同步到system.sessions
集合;同步后,部署的所有节点都可以看到这些会话。若要查看
system.sessions
集合中的记录,请使用$listSessions
。警告
请勿手动修改或删除
system.sessions
集合。在分片集群中,
system.sessions
集合已分片。向分片集群添加分片时,如果要添加的分片已经包含自己的
system.sessions
集合,MongoDB 将在添加进程中删除新分片的system.sessions
集合。