RDS PostgreSQL提供数据库代理服务,支持读写分离,本文介绍配置方法。

前提条件

RDS PostgreSQL实例需要满足以下要求:
  • 实例大版本为PostgreSQL 10或以上版本。
  • 实例存储类型为云盘。
  • 实例系列为高可用版。
  • 实例为主实例。
  • RDS PostgreSQL数据库代理功能正在逐步开放中,当前支持的地域及可用区如下:
    地域 可用区
    华东1(杭州) 可用区G、可用区H、可用区I和可用区J
    华东2(上海) 可用区B、可用区E、可用区F、可用区G和可用区I
    华北2(北京) 可用区F、可用区G、可用区H和可用区I
    华北3(张家口) 可用区A、可用区B和可用区C
    华南1(深圳) 可用区D、可用区E和可用区F
    中国(香港) 可用区B
    新加坡 可用区A、可用区B和可用区C
    马来西亚(吉隆坡) 可用区A和可用区B
    印度尼西亚(雅加达) 可用区A、可用区B和可用区C
    德国(法兰克福) 可用区A
    美国(弗吉尼亚) 可用区B

费用说明

请参见数据库代理费用

注意事项

  • 开通数据库代理后,不建议迁移主实例可用区。如果迁移主实例可用区,将会导致主实例与数据库代理不在同一可用区,从而使数据库访问延迟增高,响应变慢。
  • 请确保已创建只读实例。没有只读时,可以开启数据库代理功能,但无法设置代理终端。创建方法,请参见创建PostgreSQL只读实例

操作步骤

步骤一:开启数据库代理服务

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
  2. 在左侧导航栏单击数据库代理
  3. (可选)首次开启数据库代理服务时,需要单击SLR授权后的点击授权,在对话框中单击确定。阿里云将自动创建服务关联角色AliyunServiceRoleForRdsProxyOnEcs,允许RDS Proxy服务通过该角色为用户完成弹性网卡的挂载动作,进而打通网络链路。
    说明 服务关联角色AliyunServiceRoleForRdsProxyOnEcs的更多信息,请参见服务关联角色
  4. 单击立即开启代理,填写代理个数,然后单击立即开启
    说明
    • 推荐的代理个数计算方式:主实例CPU核数 + 该主实例下所有只读实例CPU核数 / 8 (结果向上取整),最多60个。

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

    • 代理个数用于计算最终数据库代理的性能规格,不代表实际代理个数。开通的数量越多,数据库代理可承担的数据库负载越高。

      例如:单位代理规格为CPU 2核 内存 4GB,开通2个数据库代理,最终数据库代理规格为CPU 4核 内存 8GB

    开启数据库代理后,您可以在代理服务页签看到数据库代理的基本信息。代理服务基本信息
    表 1. 数据库代理基本信息介绍
    类别 参数 说明
    代理地址 运行状态 代理运行状态。
    实例ID RDS PostgreSQL实例ID。
    关联代理实例数量 代理连接地址关联的代理数量,可以通过增加代理数量提升代理处理请求的能力。
    连接地址 代理终端 代理终端名称,一个代理终端中可以创建多个连接地址。具体方法,请参见新增代理连接地址
    连接地址 代理连接地址,数据库代理提供一个默认代理连接地址,代理终端功能绑定该地址。 您可以额外新增、修改、删除代理地址。更多信息,请参见设置数据库代理连接地址
    端口 代理连接地址的端口。
    说明 您可以单击右侧的修改按钮修改代理连接端口,取值:1000~5999。
    网络地址类型 代理地址的网络地址类型。暂不支持切换网络地址类型。
    代理实例 代理类型 当前仅支持独享代理
    单位代理规格 每个代理的规格,当前仅支持CPU 2核, 内存 4GB的规格。
    开通数量(个) 代理的数量。
    当前代理规格 根据单位代理规格开通数量(个)计算,例如,开通数量为2,则当前代理规格为CPU 4核, 内存 8GB

步骤二:设置代理终端

开通数据库代理后,您还需要设置代理终端,配置数据库代理的核心功能。

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
  2. 在左侧导航栏单击数据库代理
  3. 单击代理终端页签,并单击设置代理终端
  4. 设置如下参数,并单击确定设置代理终端
    参数 说明
    自定义代理终端 指定代理终端的名称,最多支持30个字符。
    读写属性 设置读写方式。读写属性的更多信息,请参见读写属性处理逻辑
    • 读写(默认):同时连接主实例和只读实例,可以接受写请求。主实例接受写请求,并可分配读权重。

      该模式下创建的代理终端中至少包含一个主实例和一个只读实例,写请求都只会发往主实例。

    • 只读:仅连接只读实例,不接受写请求。主实例不可分配读权限。

      该模式下创建的代理终端中至少包含一个只读实例,主实例不会参与路由。

      当代理终端的读写属性设置为只读时,RDS会根据代理终端下配置的只读实例轮循分配连接,即一个客户端连接仅对应到一个只读实例的一个连接,而主实例不会参与到该分配,可用的业务连接总数是所有只读实例上的连接数之和。

    延迟阈值 只读实例同步主实例数据时允许的最长延迟时间。若一个只读实例的延迟时间超过该阈值,则不论该只读实例的权重是多少,读请求都不会转发至该只读实例。

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

    说明 仅在读写属性为读写(读写分离)时可选。
    读写分离权重分配 实例的读权重越高,处理的读请求越多。

    例如,假设主实例有3个只读实例,读权重分别为0、100、200和200,则表示主实例不处理读请求(写请求仍然自动发往主实例),3个只读实例按照1:2:2的比例处理读请求。

    • 系统分配:系统根据实例规格自动分配各个实例的读权重。后续该主实例下新增的只读实例也会自动按照系统分配的权重加入到读写分离链路中,无需手动设置。更多信息,请参见系统权重分配规则
    • 自定义:手动设置各个实例的读权重,范围为0至10000。后续该主实例下新增只读实例的读权重默认为0,需要您手动修改。
    说明
    • 不支持为已经设置只读实例延时复制时间的实例设置权重。
    • 修改本参数实时生效,不会造成业务闪断。修改完成后,已存在的连接不会断开重连,只有新连接才会根据新权重进行分配。
    • 实例释放后将自动移除权重。
    • 实例宕机或者延迟超时将自动移除权重,实例恢复后权重也将自动恢复。

设置完成后,您需要在应用程序中配置代理终端地址,就可以使写请求自动转发到主实例,读请求自动转发到各个只读实例。

读写属性处理逻辑

读写属性 权限分配方式 主实例权重 正常情况 删除最后一个只读实例 只读实例全部故障
只读 系统分配自定义 主实例权重不可设置
  • 主实例:不可读不可写
  • 代理终端:可读不可写
  • 主实例:可读可写
  • 代理终端:可读可写
  • 主实例:可读可写
  • 代理终端:可读可写
读写 系统分配 大于0

具体请参见系统权重分配规则

  • 主实例:可读可写
  • 代理终端:可读可写
  • 主实例:可读可写
  • 代理终端:可读可写
  • 主实例:可读可写
  • 代理终端:可读可写
自定义 大于0
  • 主实例:可读可写
  • 代理终端:可读可写
  • 主实例:可读可写
  • 代理终端:可读可写
  • 主实例:可读可写
  • 代理终端:可读可写
等于0
  • 主实例:不可读可写
  • 代理终端:可读可写
  • 主实例:可读可写
  • 代理终端:可读可写
  • 主实例:可读可写
  • 代理终端:可读可写

相关API

API 描述
ModifyDBProxy 开启或者关闭数据库代理功能。
DescribeDBProxy 查询数据库代理详情。
ModifyDBProxyEndpoint 设置数据库代理终端。