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