为了扩展主从节点的读请求能力,云数据库MongoDB提供具备独立连接地址的只读节点,适合独立系统直连访问,以减轻大量读请求给主从节点造成的压力。

在有大量读请求的应用场景下,数据库的主从节点可能难以承受读取压力,甚至对业务造成影响。为了分担主从节点的读取压力,您可以根据业务需求创建一个或多个只读节点,来满足大量的数据读取需求,增加应用的吞吐量。

只读节点架构

只读节点结构图
只读节点(ReadOnly)的特点如下:
  • 只读节点(ReadOnly)通过操作日志(Oplog)从延迟最低的主节点(Primary)或从节点(Secondary)同步数据,应用于有大量读请求的场景,以减轻主节点(Primary)和从节点(Secondary)的访问压力。
  • 只读节点(ReadOnly)具有独立的连接地址,适合分析程序(如Analysis Server)直连访问,与已有主从节点的连接互不干扰。
  • 两个或以上只读节点(ReadOnly)可以使用ReadOnly Connection String URI实现读请求负载均衡。

只读节点与从节点的区别

节点 说明 适用场景
只读节点(ReadOnly)
  • 只读节点具有高可用保障,即某个只读节点故障时,系统会自动将其与隐藏节点切换,若未自动切换,您可以自行切换,只读节点的连接地址保持不变。
    说明 如何切换只读节点和隐藏节点,请参见切换节点角色

    触发节点的角色切换后,会产生1次30秒内的连接闪断,建议您在业务低峰期操作或确保应用具备重连机制。

  • 只读节点具有独立的连接地址,适合独立系统及应用直连访问,与已有主从节点的连接互不干扰。
  • 只读节点不在“主节点的备用列表”中,不会被选举为主节点,也不会参与投票选举主节点。
两个或以上只读节点可以使用ReadOnly Connection String URI实现读请求负载均衡,适用于从现有实例中读取大量数据的业务场景,如BI分析、大数据分析等。
从节点(Secondary)
  • 从节点具有高可用保障,即某个从节点故障时,系统会自动将其与隐藏节点切换,若未自动切换,您可以自行切换,从节点的连接地址保持不变。
    说明 如何切换从节点和隐藏节点,请参见切换节点角色

    触发节点的角色切换后,会产生1次30秒内的连接闪断,建议您在业务低峰期操作或确保应用具备重连机制。

  • 从节点故障时,不会被选举为主节点。
  • 主节点故障时,每个从节点都有可能被选举为新的主节点,来执行和响应数据的读写请求。
主从节点可以使用Connection String URI实现读写分离,适用于读多写少的并发场景,从而在性能扩展的同时,避免节点故障对业务带来的影响。

功能优势

  • 您可以根据业务需求随时更改只读节点个数,节省业务成本。
  • 只读节点具有独立的连接地址,适合独立系统及应用直连访问,与已有主从节点的连接互不干扰。
  • 只读节点与主从节点采用一致规格,自动从延迟最低的主节点或从节点同步数据,免去维护的烦恼。
  • 独立的只读节点提供只读服务,不占用主节点的资源。增减只读节点的操作,不会对主从节点的业务构成干扰,也不会中断主从节点的连接访问。
  • 云数据库MongoDB副本集实例提供统一的地址(ReadOnly ConnectionStringURI)连接所有只读节点,您只需添加只读节点的个数即可扩展数据库的处理能力,应用程序无需做任何修改。
    说明 关于ReadOnly ConnectionStringURI地址的更多信息,请参见副本集实例连接说明

功能限制

  • 目前仅云数据库MongoDB副本集实例和分片集群实例支持只读节点。
  • 只读节点仅供读请求访问,不参与主从节点选举。
  • 一个副本集实例可以添加最多5个只读节点。
  • 一个分片集群实例中的每个Shard可以添加最多5个只读节点。
  • 只读节点与主节点或从节点之间的数据复制方式为异步复制,正常情况下存在毫秒级的延迟,在主节点写入压力大的时候可能出现秒级的延迟。

价格

单个只读节点的价格等同于副本集实例或者分片集群实例Shard中单个节点的价格。