文档菜单
文档首页
/
MongoDB 手册
/ /

配置数据库

本页内容

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

配置数据库中的数据集合config 数据库支持

  • 分片集群操作

  • 因果一致性会话(用于独立实例、副本集和分片集群)以及可重试写入(用于副本集和分片集群)。

注意

分片集群在配置数据库中可能显示不同的数据集合,具体取决于是否连接到 mongosmongod

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

  • mongod 上,config 数据库显示了特定于给定分片的集合,例如 migrationCoordinatorsrangeDeletions

当配置服务器和分片托管在同一节点上时,mongos 可能能够访问 config 数据库中的某些分片本地集合。

从 MongoDB 5.0 开始,不允许在具有以下读取关注点和选项的 config.transactions 集合上执行非事务读取

重要

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

提示

内部 MongoDB 元数据

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

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 元数据

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

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 是块的标识符。

  • minmax 是块分片键的值范围。

  • shard 是存储块在集群中的分片名称。

提示

要查找集合中的块,从config.collections 集合检索集合的 uuid 标识符。然后,使用 uuidconfig.chunks 集合检索具有相同 uuid 的匹配文档。

config.collections

提示

内部 MongoDB 元数据

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

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

提示

内部 MongoDB 元数据

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

indexes集合为每个分片上可用的全局索引存储一个文档。

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

字段
数据类型
描述
name
字符串
全局索引的名称。
keyPattern
文档
索引键规范。
options
文档
提供有关指定的 索引选项 的信息,包括索引是否为全局索引。
lastmod
时间戳
时间戳 提供有关索引上次修改时间和索引版本的信息。
collectionUUID
UUID
分片集合的 UUID。
indexCollectionUUID
UUID
跟踪全局索引的辅助集合的 UUID。
config.databases

提示

内部 MongoDB 元数据

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

集群中的 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

提示

内部 MongoDB 元数据

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

mongos 集合存储了与集群关联的每个 mongos 实例的文档。集群维护此集合以进行报告目的。

mongos 集合中的每个文档包含以下字段

字段
数据类型
描述
_id
字符串
mongos 运行的主机名和端口。_id 的格式为 <hostname>:<port>
advisoryHostFQDNs
字符串数组
包含 mongos 的完全限定域名 (FQDN) 的数组。
创建时间
日期

mongos 启动的时间。

版本5.2.

mongoVersion
字符串
mongos 运行的 MongoDB 版本。
ping
日期
mongos 实例每 30 秒向 配置服务器 发送 ping。此字段指示最后一次 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

提示

内部 MongoDB 元数据

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

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

settings集合中的示例文档

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

提示

内部 MongoDB 元数据

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

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 元数据

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

tags 集合存储集群中每个区域范围的文档。在 tags 集合中的文档类似于以下内容

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

提示

内部 MongoDB 元数据

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

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

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

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

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

配置数据库包含用于支持独立副本集、分片集群中因果一致性会话的会话、可重试写操作和副本集及分片集群中的事务的内部集合。

警告

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

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

config.system.sessions

system.sessions集合存储所有部署成员可访问的会话记录。

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

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

警告

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

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

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

config.transactions

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

警告

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

返回

参考