什么是数据库代理
本文介绍RDS MySQL的数据库代理服务。
RDS MySQL数据库代理又分独享代理和共享代理,是位于数据库服务端和应用服务端之间的网络代理服务,用于代理应用服务端访问数据库时的所有请求,具有高可用、高性能、可运维、简单易用等特点。独享代理还提供自动读写分离、事务拆分、连接池等高级功能。
当前仅支持开通独享代理。更多信息,请参见附录:共享代理简介。
适用场景
事务内有大量请求,导致主实例负载过高的场景。
连接数过多导致主实例负载过高的场景。
短连接为主的业务。
有读写分离需求的业务场景。
纯只读和有隔离需求的业务。
说明假设您购买了包含1个主实例和4个只读实例的RDS实例,现在需要将A业务(纯只读)和B业务(可读可写)都连接至该实例。您可以将只读实例1和只读实例2组成代理终端A(只读模式)提供给业务A,主实例、只读实例3和只读实例4组成代理终端B(读写模式)提供给业务B,以实现两个业务在数据库使用上的物理隔离,避免相互影响。
代理终端简介
代理终端是数据库独享代理的核心,是阿里云自主研发的可自定义连接地址功能,RDS MySQL实例中最多支持7个代理终端,您可以修改各代理终端的读写属性来满足不同的业务场景,增强业务的灵活性。
读写属性说明
每个代理终端都可以分别设置各自的读写属性。
读写:用来支持读写分离功能实现业务线性扩展。
该模式下创建的代理终端中至少包含一个主实例和一个只读实例,写请求都只会发往主实例。支持如事务拆分、连接池等读写分离功能。
只读:用来支持只读的业务,比如报表。
该模式下创建的代理终端中至少包含一个只读实例,主实例不会参与路由,不支持事务拆分、连接池等功能。
当代理终端的读写属性设置为只读时,RDS会根据代理终端下配置的只读实例轮循分配连接,即一个客户端连接仅对应到一个只读实例的一个连接,而主实例不会参与到该分配,可用的业务连接总数是所有只读实例上的连接数之和。
关于如何修改代理终端的读写属性,请参见设置代理终端。
功能概览
数据库代理包含如下功能:
代理服务:在代理服务总览页面,可以进行升级独享代理小版本、新增连接地址等操作。
类别
参数
说明
代理地址
运行状态
代理运行状态。
实例ID
代理ID。
关联代理实例数量
代理连接地址关联的代理数量,可以通过增加代理数量提升代理处理请求的能力。
连接地址
代理终端
代理终端名称,一个代理终端中可以创建多个连接地址。更多信息,请参见什么是读写分离。
连接地址
代理连接地址,独享代理目前提供一个默认代理连接地址,代理终端功能绑定该地址。 您可以额外新增、修改、删除代理地址。更多信息,请参见设置独享代理连接地址。
端口
代理连接地址的端口。
说明您可以单击右侧的修改端口按钮修改代理连接端口,取值:1000~5999。
网络地址类型
代理地址的网络地址类型。暂不支持切换网络地址类型。
代理实例
代理类型
当前仅支持独享代理。
代理规格
代理的规格,当前仅支持2核CPU、4 GB内存的规格。
开通个数(个)
代理的数量,多个代理可以实现负载均衡,分担代理压力。最多16个代理。
说明推荐的代理个数计算方式:
主实例CPU核数 + 该主实例下所有只读实例CPU核数 / 8
(结果向上取整),最多16个。例如主实例为8核CPU,该实例下有1个4核CPU的只读实例,则推荐代理数量为
(8+4)/8 ≈ 2
。代理终端(原读写分离)
通过独享代理地址(读写分离地址)实现读写请求的自动转发。更多信息,请参见什么是读写分离。
连接池:有效解决连接数过多或短连接业务(例如PHP)频繁建立新连接导致实例负载过高的问题。更多信息,请参见设置连接池类型。
事务拆分:将事务内写操作之前的读请求转发到只读实例,降低主实例负载。更多信息,请参见事务拆分。
监控数据:使用独享代理时,您可以随时查看独享代理的CPU使用率,了解独享代理的负载情况,以便及时调整代理数量。具体操作,请参见查看监控数据。
SSL:对独享代理连接地址进行SSL加密,可以保证数据的传输安全。具体操作,请参见设置独享代理SSL加密。
注意事项
请参见数据库代理注意事项。
使用方法
请参见开通并配置数据库代理服务。
附录:共享代理简介
RDS MySQL提供两种数据库代理服务的部署模式:独享代理和共享代理。
共享代理也叫多租户代理,属于多用户共享代理资源,争抢资源会导致代理服务不稳定,同时不支持独享代理的高级特性,如连接池、SSL加密、事务拆分等;共享代理中的读写分离地址类型依赖主实例的网络地址类型,当您切换了主实例的网络类型,读写分离地址的网络类型也会被切换。目前共享代理模式已下线,更多信息,请参见【通知】2021年04月01日起共享代理功能停止更新维护。
独享代理也叫单租户代理,使用独立代理计算资源为当前实例提供代理服务,相比共享代理有如下优势:
更好的稳定性。
更好的隔离性。
更好的性能。每个RDS实例最多可以创建16个代理实例,Sysbench基准测试OLTP场景下,QPS稳定在2万到5万,建议以实际业务压测数据为准。
说明独享代理本身并没有最大连接数的限制,连接数的限制还是由后端数据库中计算节点的规格决定。
扩容方便快捷,您可以快速调整代理数量。
代理性能可监控,您可以根据监控数据及业务规划调整代理个数。
提供独享代理连接地址,应用使用该地址后不用反复变更应用内的地址,减少维护成本。只要不释放代理,代理连接地址可以永远使用。例如您在大促时期开启读写分离,大促结束后释放只读实例,关闭读写分离,也不用变更应用内的连接地址。
支持自动读写分离,减少维护成本。例如,有只读实例时,一般需要在应用程序中添加每个主实例和只读实例的地址,手动实现读写分离。而开通独享代理后,应用程序中只需配置一个代理连接地址,该地址会自动实现读写分离,将读请求发送至只读实例,将写请求发送至主实例。即使增加或删除只读实例,也无需调整应用程序的设置。
由于共享代理的局限性,新实例目前不支持共享代理。RDS MySQL仅为已开通共享代理的存量实例继续提供服务。已开启共享代理的实例建议升级为独享代理,享受更多高级特性。具体操作,请参见共享代理升级为独享代理。