开通并配置数据库代理服务
RDS提供数据库独享代理服务,基于独享代理提供更多高级功能,例如读写分离、连接池、事务拆分、SSL加密等。
前提条件
主实例需满足以下条件:
实例大版本
实例系列
内核小版本
MySQL 8.0
高可用版
20190915或以上
集群版
无要求
MySQL 5.7
高可用版
20190925或以上
集群版
无要求
MySQL 5.6
高可用版
20200229或以上
说明您可以前往实例基本信息页面查看以上信息。如果配置信息区域有升级内核小版本按钮,您可以单击按钮查看当前版本;如果没有按钮,表示已经是最新版。详情请参见升级内核小版本。
对于非集群版实例,您需要已经创建只读实例。对于集群版实例,您可以直接使用实例的主备节点做读写分离。
实例不处于华东1(杭州)可用区C和D。
说明如果实例处于不支持的可用区,可以迁移可用区后再开通独享代理。详情请参见迁移可用区。
费用说明
请参见数据库独享代理费用说明。
功能限制
数据库独享代理暂不支持压缩协议。
数据库独享代理暂不支持切换交换机。
步骤一:开启数据库代理服务
本节介绍如何在控制台上开启数据库代理服务,您也可以在创建只读实例时同时开启数据库代理服务,详情请参见创建MySQL只读实例。
- 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
在左侧导航栏单击数据库代理。
单击立即开启代理,选择网络类型并填写代理个数,然后单击立即开启。
说明(必须步骤)在开启数据库代理服务之后,您还需要设置代理终端才能实现读写分离等诸多功能。具体操作,请参见步骤二:设置代理终端。
不同类型实例支持的默认代理地址网络类型不同,详情请参见设置独享代理连接地址。
推荐的代理个数计算方式:
主实例CPU核数 + 该主实例下所有只读实例CPU核数 / 8
(结果向上取整),最多16个。例如主实例为8核CPU,该实例下有1个4核CPU的只读实例,则推荐代理数量为
(8+4)/8 ≈ 2
。
步骤二:设置代理终端
开通数据库独享代理后,您还需要设置代理终端,配置独享代理的核心功能。
- 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
在左侧导航栏单击数据库代理。
单击代理终端(原读写分离)页签,并单击设置代理终端。
设置如下参数,并单击确定。
参数
说明
自定义代理终端
指定代理终端的名称,最多支持30个字符。
读写属性
设置读写方式。
读写(读写分离)(默认):同时连接主实例和只读实例,可以接受写请求。
只读(不连接主实例,无法接受写请求):仅连接只读实例,不接受写请求。
更多信息,请参见什么是读写分离。
连接池
代理连接地址设置的连接池类型:
事务级连接池:适用于总连接数比较多(如连接数上万)的场景。
会话级连接池:适用于PHP短连接场景。
关闭连接池(默认):不使用连接池。
更多信息,请参见设置连接池类型。
说明仅在读写属性为读写(读写分离)时可选。
延迟阈值
只读实例同步主实例数据时允许的最长延迟时间。若一个只读实例的延迟时间超过该阈值,则不论该只读实例的权重是多少,读请求都不会转发至该只读实例。
取值范围为0秒到3600秒。受限于SQL的执行情况,只读实例有一定的几率会出现延迟,建议该值不小于30秒。
说明仅在读写属性为读写(读写分离)时可选。
事务拆分
是否开启事务拆分功能。事务拆分能够将事务内写操作之前的读请求转发到只读实例,降低主实例负载。默认为开启。
说明仅在读写属性为读写(读写分离)时可选。
读写分离权重分配
实例的读权重越高,处理的读请求越多。例如,假设主实例有3个只读实例,读权重分别为0、100、200和200,则表示主实例不处理读请求(写请求仍然自动发往主实例),3个只读实例按照1:2:2的比例处理读请求。
系统分配:系统根据实例规格自动分配各个实例的读权重。后续该主实例下新增的只读实例也会自动按照系统分配的权重加入到读写分离链路中,无需手动设置。更多信息请参见系统权重分配规则。
自定义:手动设置各个实例的读权重,范围为0至10000。后续该主实例下新增只读实例的读权重默认为0,需要您手动修改。
说明不支持为已经设置只读实例延时复制时间的实例设置权重。
修改本参数实时生效,不会造成业务闪断。修改完成后,已存在的连接不会断开重连,只有新连接才会根据新权重进行分配。
如果为集群版实例,则配置的权重为主节点和备节点的权重。
后续步骤
开启了数据库代理服务以及设置代理终端后,您需要在应用程序中配置代理终端地址(即独享代理地址),就可以使写请求自动转发到主实例,读请求自动转发到各个只读实例。如果没有开启,您需要在应用程序中单独配置读连接地址与写连接地址。
您可以实例列表页单击查看只读实例。
(可选)步骤三:新增代理终端
单个RDS MySQL实例最多支持7个代理终端,您可以通过新增多个代理终端,将不同的读写策略应用到不同的客户端。
前提条件
已开通多个代理实例,代理实例数量需大于代理终端数量。更多信息,请参见调整代理数量。
- 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
在左侧导航栏单击数据库代理。
单击页面右上角的新增代理终端。
设置如下参数,并单击确定。
参数
说明
自定义代理终端
指定代理终端的名称,最多支持30个字符。
读写属性
设置读写方式。
读写(读写分离)(默认):同时连接主实例和只读实例,可以接受写请求。
只读(不连接主实例,无法接受写请求):仅连接只读实例,不接受写请求。
更多信息,请参见什么是读写分离。
连接池
代理连接地址设置的连接池类型:
事务级连接池(默认):适用于总连接数比较多(如连接数上万)的场景。
会话级连接池:适用于PHP短连接场景。
关闭连接池:不使用连接池。
更多信息,请参见设置连接池类型。
说明仅在读写属性为读写(读写分离)时可选。
延迟阈值
只读实例同步主实例数据时允许的最长延迟时间。若一个只读实例的延迟时间超过该阈值,则不论该只读实例的权重是多少,读请求都不会转发至该只读实例。
取值范围为0秒到3600秒。受限于SQL的执行情况,只读实例有一定的几率会出现延迟,建议该值不小于30秒。
说明仅在读写属性为读写(读写分离)时可选。
事务拆分
是否开启事务拆分功能。事务拆分能够将事务内写操作之前的读请求转发到只读实例,降低主实例负载。默认为开启。
说明仅在读写属性为读写(读写分离)时可选。
读写分离权重分配
实例的读权重越高,处理的读请求越多。例如,假设主实例有3个只读实例,读权重分别为0、100、200和200,则表示主实例不处理读请求(写请求仍然自动发往主实例),3个只读实例按照1:2:2的比例处理读请求。
系统分配:系统根据实例规格自动分配各个实例的读权重。后续该主实例下新增的只读实例也会自动按照系统分配的权重加入到读写分离链路中,无需手动设置。更多信息请参见系统权重分配规则。
自定义:手动设置各个实例的读权重,范围为0至10000。后续该主实例下新增只读实例的读权重默认为0,需要您手动修改。
说明不支持为已经设置只读实例延时复制时间的实例设置权重。
修改本参数实时生效,不会造成业务闪断。修改完成后,已存在的连接不会断开重连,只有新连接才会根据新权重进行分配。
如果为集群版实例,则配置的权重为主节点和备节点的权重。
后续步骤
新增代理终端后,您需要在应用程序中配置代理终端地址(即独享代理地址),就可以使写请求自动转发到主实例,读请求自动转发到各个只读实例。如果没有开启,您需要在应用程序中单独配置读连接地址与写连接地址。
读写属性处理逻辑
读写属性 | 权限分配方式 | 主实例权重 | 正常情况 | 删除最后一个只读实例 | 只读实例全部故障 |
只读 | 系统分配或自定义 | 主实例权重不可设置 | 主实例:不可读不可写(不转发) 代理终端:可读不可写 | 主实例:不可读不可写(不转发) 代理终端:不可读不可写(连接报错) | 主实例:不可读不可写(不转发) 代理终端:不可读不可写(连接报错) |
读写 | 系统分配 | 等于0 具体请参见系统权重分配规则。 | 主实例:不可读可写 代理终端:可读可写 | 主实例:可读可写 代理终端:可读可写 | 主实例:可读可写 代理终端:可读可写 |
自定义 | 大于0 | 主实例:可读可写 代理终端:可读可写 | 主实例:可读可写 代理终端:可读可写 | 主实例:可读可写 代理终端:可读可写 | |
等于0 | 主实例:不可读可写 代理终端:可读可写 | 主实例:可读可写 代理终端:可读可写 | 主实例:可读可写 代理终端:可读可写 |
不转发:表示在只读属性中,主实例不参与只读请求的转发。
连接报错:表示在只读属性中,代理终端不可读不可写时连接会报错。
在读写模式下,当主实例权重配置为0时,默认不将读请求转发到主实例,但是当只读节点异常,强制Hint指定,或者开启了事务拆分的情况下,读请求会被转发到主实例。
相关API
API | 描述 |
开启或者关闭RDS实例的数据库独享代理功能。 | |
查询RDS实例的数据库独享代理详情。 |