配置数据库
配置数据库中的数据集合config
数据库支持
注意
分片集群在配置数据库中可能显示不同的数据集合,具体取决于是否连接到 mongos
或 mongod
:
在
mongos
上,配置数据库显示位于配置服务器上的数据集合,例如collections
或chunks
。在
mongod
上,config
数据库显示了特定于给定分片的集合,例如migrationCoordinators
或rangeDeletions
。
当配置服务器和分片托管在同一节点上时,mongos
可能能够访问 config
数据库中的某些分片本地集合。
限制
从 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 服务器的写可用性,您可以在测试集合中插入一个文档(在确保没有同名的集合后)
警告
修改运行中的系统上的 config
数据库可能会导致系统不稳定或数据集不一致。如果您必须修改 config
数据库,请使用 mongodump
创建 config
数据库的完整备份。
db.testConfigServerWriteAvail.insertOne( { a : 1 } )
如果操作成功,config 服务器可用来处理写操作。
服务器未来的版本可能包括在 config 数据库中不同的集合,因此在为您的测试集合选择名称时要小心。
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
从MongoDB 8.0开始,
config.collections
存储所有分片集合和非分片集合(通过moveCollection
移动)的元数据。在MongoDB 8.0之前的版本中,
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
字符串mongos
运行的主机名和端口。_id 的格式为<hostname>:<port>
。advisoryHostFQDNs
字符串数组包含mongos
的完全限定域名 (FQDN) 的数组。创建时间
日期mongos
启动的时间。新版本5.2.
mongoVersion
字符串mongos
运行的 MongoDB 版本。ping
日期up
NumberLong自最后一次 ping 以来mongos
运行的秒数。等待
Boolean此字段始终为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
值以兆字节为单位。均衡器设置。要更改均衡器设置,包括均衡器状态,请参阅管理分片集群均衡器。
自动拆分
从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()
支持会话的集合
配置数据库包含用于支持独立副本集、分片集群中因果一致性会话的会话、可重试写操作和副本集及分片集群中的事务的内部集合。
警告
请勿手动修改或删除这些集合。
要访问mongod
或mongos
实例的这些集合,请将mongosh
连接到该实例。
config.system.sessions
system.sessions
集合存储所有部署成员可访问的会话记录。当用户在
mongod
或mongos
实例上创建会话时,会话记录最初仅存在于实例的内存中。实例会定期将其缓存的会话同步到system.sessions
集合;此时,它们对部署中的所有成员可见。要查看
system.sessions
集合中的记录,请使用$listSessions
。警告
请勿手动修改或删除
system.sessions
集合。在分片集群中,
system.sessions
集合是分片的。当向分片集群添加分片时,如果要添加的分片已经包含其自己的
system.sessions
集合,MongoDB将在添加过程中删除新分片的system.sessions
集合。
config.transactions
《transactions》集合存储用于支持可重试写操作和副本集和分片集群的事务的记录。
警告
请勿手动修改或删除《transactions》集合。