You need to enable JavaScript to run this app.
导航
管理只读节点
最近更新时间:2024.12.02 15:28:49首次发布时间:2023.09.20 21:57:15

文档数据库 MongoDB 版支持只读节点功能,只读节点可以提供单独的连接地址,适合独立系统和应用进行直连访问,扩展主从节点读请求能力,帮助分担主从节点数据读取压力。

功能简介

大量读请求会给 MongoDB 的主从节点带来极大的数据读取压力,可能会导致业务请求延时高、响应慢等问题。为分担主从节点的数据读取请求,MongoDB 提供了具备独立地址的只读节点(ReadOnly Node),您可以在创建 MongoDB 实例时根据业务需要添加只读节点,满足业务读写分离需求,减轻主从节点的访问压力。

功能优势

  • 通过操作日志(Oplog)从延迟最低的主节点(Primary Node)或从节点(Secondary Node)同步数据,应用于有大量读请求的场景,以减轻主从节点的访问压力。
  • 当存在 2 个或以上只读节点时,可以通过只读节点连接地址实现读请求负载均衡。关于只读连接地址的更多详情,请参见只读节点地址
  • 只读节点具有独立的连接地址,且与已有主从节点的连接互不干扰,适合独立系统和应用进行直连访问。
  • 只读节点与主从节点采用一致的节点规格,自动从延迟最低的主节点或从节点同步数据,无需额外维护。

使用限制

限制类型说明
实例或组件限制当前仅副本集实例和分片集群实例中 Shard 分片支持添加只读节点。

连接地址限制

  • 当前仅在私网连接地址中支持使用只读节点。
  • 若副本集实例存在只读节点,开启公网解析时会同时为只读节点的内网地址开启公网解析功能。

数量限制

MongoDB 实例类型不同,支持添加的只读节点数量不同。其中:

  • 副本集:每个实例最多可添加至 5 个只读节点。
  • 分片集群:仅 Shard 分片支持添加只读节点,每个 Shard 分片最多可添加至 5 个只读节点。

变更配置限制

  • 只读节点的规格与实例(或 Shard 分片)的主从节点规格保持一致,因此升级或降级副本集实例规格或分片集群 Shard 节点规格时,已添加的只读节点规格也会同步变更。
  • 变更只读节点数量操作与副本集实例中其它配置变更操作互斥,即变更副本集实例的节点规格或存储空间时,不支持同时变更只读节点数量。
  • 仅当分片集群实例中不存在只读节点,且所有 Shard 分片的配置(包括节点规格和存储空间)一样时,才支持开启批量修改 Shard 分片配置功能。

更多关于变更实例配置的更多详情,请参见变更实例配置

其他限制

  • 只读节点仅供读请求访问,不参与主从节点选举。
  • 只读节点与主节点或从节点之间的数据复制方式为异步复制。正常情况下存在毫秒级的延迟,在主节点写入压力大的时候可能出现秒级的延迟。

不同类型的节点对比

文档数据库 MongoDB 版当前支持 4 种类型的节点:主节点、从节点、隐藏节点和只读节点。不同类型节点的使用场景和注意事项不同,具体区别如下表所示。

节点类型使用场景注意事项

主节点(Primary Node)

也称主库,可提供读写功能。集群状态正常时,来自客户端的所有数据都会写入主节点。

  • 每个副本集实例中只能有一个主节点。
  • 每个分片集群的 Shard 分片中只能有一个主节点。

从节点(Secondary Node)

保障高可用,通过 oplog(操作日志)同步主节点的数据,可在主节点故障时通过选举成为新的主节点。

  • 主节点故障时,从节点支持提升为主节点,来执行和响应数据的读写请求。
  • 客户端连接从节点时,只能读取数据不能写入数据。

隐藏节点(Hidden Node)

仅用于保障高可用,对用户不可见。通过 oplog 同步主节点的数据,可在从节点故障时接替该故障节点成为新的从节点保障高可用。

  • 每个副本集实例中只能有一个隐藏节点。
  • 每个分片集群的 Shard 分片中只能有一个隐藏节点。
  • 隐藏节点只参与投票选取主节点,不能被选举为主节点。

只读节点(ReadOnly Node)

主要适用于数据量极大的读请求场景,其通过操作日志(oplog)从主节点或从节点同步数据,系统将读请求自动路由至只读节点,以减轻主节点访问压力。

  • 只读节点具有独立的连接地址,适合独立系统及应用直连访问,与已有主从节点的连接互不干扰。
  • 只读节点不会被选举为主节点,也不会参与投票选举主节点。
  • 只读节点与主节点或从节点之间的数据复制方式为异步复制。

计费说明

单个只读节点的价格与副本集实例或者分片集群实例 Shard 中对应规格的单节点价格一致。关于 MongoDB 单节点的价格详情,请参见计费项与价格

只读节点地址

说明

  • 仅当实例中存在只读节点时,您才可以看到只读节点的连接地址。
  • 通过只读节点地址连接实例时,读请求将只会发送到只读节点。
  • 当实例中的某个只读节点出现故障时,读请求会自动切换到下一个只读节点,不会影响应用的读操作。如果所有的只读节点都出现了故障,读请求会执行失败。
  • 您可以通过 Mongo Shell 等工具使用只读节点连接地址来连接 MongoDB 实例。具体操作步骤,请参见通过 Mongo Shell 工具连接实例

MongoDB 只读节点连接地址格式如下。

mongodb://<user>:<password>@<host1>:3717,<host2>:3717,...,<hostN>:3717/?authSource=admin&readPreference=secondary&readPreferenceTags=role:readonly&replicaSet=<replicaSetId>&retryWrites=true

连接地址中相关参数说明如下表。

参数是否必填说明示例
<user>必填数据库账号的名称。root
<password>必填数据库账号的密码。Pwd_123456

<host>:3717

必填

只读节点所对应的域名和端口号,默认端口号为 3717。
当前仅副本集实例和分片集群实例中 Shard 分片的私网地址支持通过只读节点连接。其中:

  • 副本集实例:单独提供一个包含了所有只读节点的私网连接地址。

    副本集

  • 分片集群实例:仅 Shard 分片的私网地址中会包含只读节点的连接地址。
    分片集

  • 副本集实例只读节点连接地址域名示例:

    mongoreplicae047fe00****100.mongodb.ivolces.com:3717

  • 分片集群实例只读节点连接地址域名示例:

    mongoshard9a2ab41e****s0100.mongodb.ivolces.com``:3717

authSource

必填

设置鉴权数据库名称,默认鉴权数据库为 admin
数据库账号必须在所属的数据库下进行鉴权,才能鉴权成功。

authSource=admin

readPreference

选填

用于实现只读节点地址的读写分离和负载均衡。该参数可以将写请求发送到主节点,读请求随机发送到从节点和只读节点,可选取值如下:

  • readPreference=secondary:如果从节点和只读节点都出现故障,读请求失败,不会发送到主节点。
  • readPreference=secondaryPreferred:如果从节点和只读节点都出现故障,该参数将读请求发送到主节点。

说明

关于 readPreference 参数的更多详情,请参见 Read Preference

readPreference=secondary

readPreferenceTags

选填

该参数可以将读请求优先发送到标签对应的只读节点。固定取值为role:readonly,不允许修改。

说明

关于 readPreferenceTags 参数的更多详情,请参见 readPreferenceTags

readPreferenceTags=role:readonly

replicaSet必填该参数可以将读请求发送到副本集实例或分片集群实例中当前 Shard 分片的所有节点,取值为实例高可用连接地址的唯一标识 ID。replicaSet=rs-mongo-replica-e047fe003****
retryWrites必填文档数据库 MongoDB 版在每个连接地址的最后都默认添加了 &retryWrites=true 字段,来保证重连机制。retryWrites=true

包含只读节点的完整连接地址示例如下:

  • 副本集实例

    mongodb://root:Pwd_123456@mongoreplicae047fe00****100.mongodb.ivolces.com:3717,mongoreplicae047fe00****200.mongodb.ivolces.com:3717/?authSource=admin&readPreference=secondary&readPreferenceTags=role:readonly&replicaSet=rs-mongo-replica-e047fe00****&retryWrites=true
    
  • 分片集群实例(Shard 分片)

    mongodb://root:Pwd_123456@mongoshard9a2ab41e****s00.mongodb.ivolces.com:3717,mongoshard9a2ab41e****s01.mongodb.ivolces.com:3717,mongoshard9a2ab41e****s0100.mongodb.ivolces.com:3717/?authSource=admin&readPreference=secondary&readPreferenceTags=role:readonly&replicaSet=rs-mongo-shard-9a2ab41e****-s0&retryWrites=true
    

使用只读节点