如果您需要修改数据库代理连接地址的读写属性,或者不希望使用系统默认的读权重策略,可以参考本文,RDS PostgreSQL支持调整数据库代理连接地址的读写属性,并且支持自定义各只读实例的读权重比例。
前提条件
已开通数据库代理服务,具体请参见开通数据库代理。
您需要已经创建只读实例 ,才可以设置读写属性,使用读写分离功能。创建方法,请参见创建PostgreSQL只读实例。
读写属性说明
数据库代理的IP白名单和RDS主实例的IP白名单是保持一致的。RDS主实例的IP白名单更新,数据库代理的IP白名单也会同步更新。
读写属性支持设置为读写或只读。
读写:用来支持读写分离功能实现业务线性扩展。
该模式下代理连接地址(原代理终端)访问策略中需要至少包含一个主实例和一个只读实例,写请求都只会发往主实例。
只读:用来支持只读的业务,比如报表查询。
该模式下代理连接地址访问策略中需要至少配置一个只读实例,主实例不会参与路由。
当代理连接地址访问策略的读写属性设置为只读时,RDS会根据代理连接地址访问策略中配置的只读实例轮循分配连接,即一个客户端连接仅对应到一个只读实例的一个连接,而主实例不会参与到该分配,可用的业务连接总数是所有只读实例上的连接数之和。
读写属性处理逻辑
读写属性 | 权限分配方式 | 主实例权重 | 正常情况 | 删除最后一个只读实例 | 只读实例全部故障 |
只读 | 系统分配或自定义 | 主实例权重不可设置 |
|
|
|
读写 | 系统分配 | 等于0 具体请参见系统默认读权重分配规则。 |
|
|
|
自定义 | 大于0 |
|
|
| |
等于0 |
|
|
|
不转发:表示在只读属性中,主实例不参与只读请求的转发。
连接报错:表示在只读属性中,代理终端不可读不可写时连接会报错。
在读写模式下,当主实例权重配置为0时,默认不将读请求转发到主实例,但是当只读节点异常,强制Hint指定,或者开启了事务拆分的情况下,读请求会被转发到主实例。
操作步骤
- 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
在左侧导航栏单击数据库代理。
在连接信息区域,找到目标代理连接地址(终端)ID,单击目标代理连接地址右侧的修改配置。
在弹出的对话框中,勾选读写属性右侧的读写(读写分离)或只读(不连接主实例,无法接受写请求)。
在读权重分配区域,选择系统分配或自定义。
系统分配:系统根据实例规格自动分配各个实例的读权重。后续该主实例下新增的只读实例也会自动按照系统分配的权重加入到读写分离链路中,无需手动设置。更多信息,请参见系统默认读权重分配规则。
自定义:手动设置各个实例的读权重,范围为0~10000。后续该主实例下新增只读实例的读权重默认为0,需要您手动修改。
说明实例的读权重越高,处理的读请求越多。例如,假设主实例有3个只读实例,主实例读权重为0,只读实例读权重分别为100、200和200,则表示主实例不处理读请求(写请求仍然自动发往主实例),3个只读实例按照
1:2:2
的比例处理读请求。修改本参数实时生效,不会造成业务闪断。修改完成后,已存在的连接不会断开重连且读权重不变,只有新连接才会根据新权重进行分配。
只读实例释放后将自动移除权重。
实例宕机或者延迟超时将自动移除权重,实例恢复后权重也将自动恢复。
您可以在读请求的SQL中加入
/*FORCE_MASTER*/
,指定该请求被转发到主实例。如果需要转发到只读实例,则使用/*FORCE_SLAVE*/
。示例:
/*FORCE_MASTER*/ SELECT * FROM table_name;
相关API
API | 描述 |
查询数据库代理详情。 | |
查询数据库代理的代理连接地址信息。 | |
修改数据库代理的代理连接地址读写属性和读权重。 |