读写分离是指通过一个读写分离地址实现读写请求的自动转发。通过RDS MySQL的读写分离地址,可以使写请求自动转发到主实例,读请求按照设置的权重自动转发到各个只读实例。

背景信息

共享代理已经可以升级为独享代理,独享代理拥有比共享代理更好的性能,读写分离也更加方便。

说明 存量实例已经不支持在共享代理时开通读写分离,开通时会失败报错。您需要关闭共享代理,刷新界面,然后开启独享代理,才能使用读写分离功能。

下文指导您如何关闭共享代理和开启独享代理,最后开通读写分离。

本文仅适用于开通共享代理模式的实例。非共享代理模式的用户请参见什么是数据库代理

操作步骤

  1. 进入数据库代理页面关闭共享代理。
    1. 登录RDS管理控制台,在左侧单击实例列表,然后在上方选择地域。
      选择地域
    2. 单击目标实例ID,在左侧导航栏单击数据库代理
    3. 单击已开通左侧开关,关闭共享数据库代理。
  2. 开启独享代理。
    1. 刷新控制台页面,然后单击立即开启
      说明 请确认立即开启的界面如下图所示。
      立即开启
    2. 选择网络类型并填写代理个数,然后单击立即开启
      开通数据库代理
      说明
      • (必须步骤)在开启数据库代理服务之后,您还需要设置代理终端才能实现读写分离等诸多功能。具体操作,请参见步骤二:设置代理终端
      • 不同类型实例支持的默认代理地址网络类型不同,详情请参见设置独享代理连接地址
      • 推荐的代理个数计算方式:主实例CPU核数 + 该主实例下所有只读实例CPU核数 / 8 (结果向上取整),最多60个。

        例如主实例为8核CPU,该实例下有1个4核CPU的只读实例,则推荐代理数量为(8+4)/8 ≈ 2

  3. 开启读写分离。
    1. 选择读写分离页签,单击立即开启
    2. 设置如下参数,并单击确定
      参数说明
      自定义代理终端指定代理终端的名称,最多支持30个字符。
      读写属性设置读写方式。
      • 读写(读写分离)(默认):同时连接主实例和只读实例,可以接受写请求。
      • 只读(不连接主实例,无法接受写请求):仅连接只读实例,不接受写请求。

      更多信息,请参见什么是读写分离

      连接池代理连接地址设置的连接池类型:
      • 事务级连接池:适用于总连接数比较多(如连接数上万)的场景。
      • 会话级连接池:适用于PHP短连接场景。
      • 关闭连接池(默认):不使用连接池。

      更多信息,请参见设置连接池类型

      说明 仅在读写属性读写(读写分离)时可选。
      延迟阈值只读实例同步主实例数据时允许的最长延迟时间。若一个只读实例的延迟时间超过该阈值,则不论该只读实例的权重是多少,读请求都不会转发至该只读实例。

      取值范围为0秒到3600秒。受限于SQL的执行情况,只读实例有一定的几率会出现延迟,建议该值不小于30秒。

      说明 仅在读写属性读写(读写分离)时可选。
      事务拆分是否开启事务拆分功能。事务拆分能够将事务内写操作之前的读请求转发到只读实例,降低主实例负载。默认为开启
      说明 仅在读写属性读写(读写分离)时可选。
      读写分离权重分配实例的读权重越高,处理的读请求越多。例如,假设主实例有3个只读实例,读权重分别为0、100、200和200,则表示主实例不处理读请求(写请求仍然自动发往主实例),3个只读实例按照1:2:2的比例处理读请求。
      • 系统分配:系统根据实例规格自动分配各个实例的读权重。后续该主实例下新增的只读实例也会自动按照系统分配的权重加入到读写分离链路中,无需手动设置。更多信息请参见系统权重分配规则
      • 自定义:手动设置各个实例的读权重,范围为0至10000。后续该主实例下新增只读实例的读权重默认为0,需要您手动修改。
      说明
      • 不支持为已经设置只读实例延时复制时间的实例设置权重。
      • 修改本参数实时生效,不会造成业务闪断。修改完成后,已存在的连接不会断开重连,只有新连接才会根据新权重进行分配。
      • 如果为集群版实例,则配置的权重为主节点和备节点的权重。

后续步骤

开启了数据库代理服务以及设置代理终端后,您需要在应用程序中配置代理终端地址(即独享代理地址),就可以使写请求自动转发到主实例,读请求自动转发到各个只读实例。如果没有开启,您需要在应用程序中单独配置读连接地址与写连接地址。

说明 您可以实例列表页单击展开查看只读实例。查看读实例

关于独享代理的读写分离介绍,请参见开通并配置数据库代理服务