配置服务器
配置服务器存储分片集群的元数据。元数据反映了分片集群内所有数据和组件的状态和组织。元数据包括每个分片上的数据段列表以及定义数据段的范围。
实例缓存此数据,并使用该数据将读写操作路由到正确的分片。当集群的元数据发生变化(例如 mongos
mongos
添加 分片)时, 会更新缓存。分片还从配置服务器读取数据段元数据。
配置服务器还存储“自管理部署上的身份验证”配置信息,例如基于角色的访问控制或集群的内部身份验证设置。
MongoDB 还使用配置服务器来管理分布式锁。
每个分片集群必须拥有自己的配置服务器。请勿对不同的分片集群使用相同的配置服务器。
警告
在配置服务器上执行的管理操作可能会对分片集群的性能和可用性产生巨大影响。根据受影响的配置服务器的数量,集群可能会在一段时间内处于只读或离线状态。
副本集配置服务器
在用于配置服务器时,副本集的配置有以下限制:
不能有仲裁节点。
不得包含延迟节点。
必须构建索引(即任何成员的
members[n].buildIndexes
设置都应为 false)。
配置服务器上的读取和写入操作
admin
数据库和config
数据库存在于配置服务器上。
写入配置服务器
admin
数据库包含与身份验证和授权相关的集合,以及其他供内部使用的 system.* 集合。
config
数据库包含含有分片集群元数据的集合。MongoDB 会在元数据发生变化时(例如在数据块迁移或数据块分割后)将数据写入config
数据库。
在正常操作或维护过程中,用户应避免直接写入配置数据库。
在写入配置服务器时,MongoDB 使用了 "majority"
的写关注。
从配置服务器读取
MongoDB 从 admin
数据库读取身份验证和授权数据以及其他内部用途。
当 mongos
启动或元数据发生变化之后(例如数据段迁移之后),MongoDB 会从 config
数据库中读取。分片还从配置服务器读取数据段元数据。
从副本集配置服务器读取时,MongoDB 使用读关注级别的 "majority"
。
元数据视图必须是最新的
为了使操作成功,特定分片成员上的元数据视图必须是最新的。分片和发出请求的路由器必须具有相同版本的数据段元数据。
如果元数据不是最新的,则操作将失败并返回StaleConfig
错误,并触发元数据刷新进程。刷新元数据可能会导致额外的操作延迟。
在从节点上,如果存在明显的复制延迟,元数据刷新可能需要很长时间。对于从节点读取,设置maxStalenessSeconds
以最大限度地减少复制延迟的影响。
配置服务器的可用性
如果配置服务器副本集丢失其主节点并且无法选择主节点,则集群的元数据将变为只读。您仍然可以从分片读取和写入数据,但在副本集可以选择主节点之前,不会发生数据段迁移或数据段分割。
在分片集群中,mongod
和 mongos
实例监控分片集群中的副本集(例如分片副本集、配置服务器副本集)。
如果所有配置服务器都变得不可用,那么集群可能会无法正常运行。为了确保配置服务器始终可用,并且功能与数据均完好无损,备份配置服务器非常重要。与集群中存储的数据相比,配置服务器上的数据量较小,并且配置服务器的活动负载也相对较低。
有关详细信息,请参阅配置服务器副本集成员变得不可用。
分片集群元数据
配置服务器将元数据存储在 config
数据库中。
重要
在配置服务器上进行任何维护之前,请务必备份 config
数据库。
要访问config
数据库,请在 mongosh
中发出以下命令:
use config
一般来说,您绝对不 应该直接编辑 config
数据库的内容。config
数据库包含以下集合:
有关这些集合及其在分片集群中的角色的更多信息,请参阅配置数据库。有关读取和更新元数据的更多信息,请参见配置服务器上的读取和写入操作。
分片集群的安全性
使用自管理内部/成员身份验证来实施集群内部安全,并防止未经授权的集群组件访问集群。您必须使用适当的安全设置启动集群中的每个mongod
,才能强制执行内部身份验证。
从 MongoDB 5.3 开始,SCRAM-SHA-1不能用于集群内身份验证。仅支持 SCRAM-SHA-256。
在先前的 MongoDB 版本中,SCRAM-SHA-1 和 SCRAM-SHA-256 均可用于集群内身份验证,即使未显式启用 SCRAM。
有关部署安全分片集群的教程,请参阅使用密钥文件身份验证部署自管理分片集群。