本文为您介绍通过数据库代理开启读写分离功能,实现横向扩展,提升云数据库 MySQL 的性能。
数据库代理实现读写分离架构
数据库代理
数据库代理是位于云数据库服务和应用服务之间的网络代理服务,用于代理应用服务访问数据库时的所有请求。
数据库代理访问地址独立于原有的数据库访问地址,通过数据库代理地址的请求,全部通过代理集群中转访问数据库的主从节点,进行读写分离,将读请求转发至只读实例,降低主库的负载。
自动读写分离
用户业务场景中存在读多写少、业务负载无法预测等场景,有大量读请求的应用场景下,单个实例可能无法承受读取压力,甚至对业务产生影响。
为了实现读取能力的弹性扩展,分担数据库压力,可以创建一个或多个只读实例,利用只读实例满足大量的数据库读取需求。但此类解决方案需要业务侧支持读写分离改造,其代码的健壮性决定了业务读写分离的质量,对客户的技术要求较高,而且灵活性和可扩展性较差。
故创建只读实例后,可通过购买数据库代理,为数据库代理连接地址设置读写属性,在应用程序中配置数据库代理地址,就可以使写请求自动转发到主实例,读请求自动转发到各个只读实例。
通过设置数据库代理地址的读写属性开启读写分离功能
步骤1:开通数据库代理
1. 登录 MySQL 控制台,在实例列表,选择需要开启代理的主实例,单击实例 ID 或操作列的管理,进入实例管理页面。
2. 在实例管理页面,选择数据库代理页,单击立即开启。
3. 在弹出的对话框,完成如下配置,单击下一步:网络、安全组设置。
参数 | 说明 |
代理版本 | |
代理规格 | 支持选择规格为2核4000MB内存、4核8000MB内存、8核16000MB内存。 |
可用区及节点个数 | 1. 选择数据库代理可用区,支持单击新增可用区来多选,可选择的可用区数量与当前地域可选可用区数量相关,最多支持选择三个可用区。 2. 选择节点个数,推荐的代理节点个数为主实例和只读实例 CPU 核数的之和的1/8(向上取整),例如主实例为4核 CPU,只读实例为8核 CPU,则推荐代理数量 = (4 + 8) / 8 ≈ 2。 注意: 如果所选数据库代理与主实例不在同一可用区,通过数据库代理连接时,写入性能可能会下降。
若计算推荐节点个数后所需代理节点数量超过购买限制,建议选择更高规格代理。 |
4. 完成网络、安全组设置,单击立即购买。
参数 | 说明 |
选择网络 | 选择数据库代理的网络,仅支持私有网络 VPC。 |
安全组 | 默认选择的安全组与主实例保持一致,也可根据需要选择已有安全组或新建安全组。 注意: |
备注 | 非必填项,可为要开通的数据库代理服务进行备注。 |
5. 开通成功后,可在数据库代理页查看基本信息,管理代理节点,在连接地址下对数据库代理访问地址、网络类型和备注进行修改,也可在连接地址操作项查看连接配置详情、调整配置、重新均衡负载操作。
说明:
您可通过查看代理节点列表的连接数或查看各代理节点的性能监控,来判断各节点是否出现访问不均衡现象。若出现各代理节点连接数不均衡的现象,可单击重新均衡负载打散连接。
重新均衡负载会触发代理节点重启,重启过程中会有短暂服务不可用现象,建议在低峰期重启服务,请确保业务具备重连机制。
步骤2:设置数据库代理地址的读写属性
1. 登录 MySQL 控制台,在上方选择地域,然后单击目标实例 ID,进入实例管理页。
2. 在实例管理页,选择数据库代理 > 概览,在连接地址下找到目标访问地址,在其操作列单击调整配置。
3. 在调整配置页面,选择对此访问连接的读写属性,完成读权重分配,单击确定。
注意:
仅状态为运行中的主实例和只读实例,才能加入数据库代理中。
目前异地 RO 和延迟 RO 不允许挂载到数据库代理下。
参数 | 说明 |
读写属性 | 选择读写分离。 |
只读实例延迟剔除 | 设置只读实例延迟剔除策略,此项开启,可设置延迟剔除阈值和只读实例最小保留数。无论此项是否启用,只读实例故障时均会尝试剔除和恢复。 延迟剔除阈值:输入大于1或等于1的整数,单位为秒。 只读实例最小保留数:数量与主实例拥有只读实例数相关,设置为0时,当只读节点全部被剔除后,所有访问会转发到主实例上,直至只读实例重新加入。 |
连接池状态 | 连接池功能主要用于减少短连接业务频繁建立新连接带来的实例负载。此项开启后,可选择支持的连接池类型,目前支持会话级连接池(数据库代理版本1.3.12及以上版本),事务级连接池(数据库代理版本1.4.1及以上版本)。 |
事务拆分 | 设置是否开启,开启后,在一个事务中拆分读和写到不同的实例上去执行,读请求转发到只读实例,降低主实例负载。 |
读权重分配 | 支持选择系统自动分配或自定义,如开通数据库代理时配置了多个可用区,则支持对不同可用区下的代理节点访问数据库的权重进行分别配置。 |
故障转移(读写属性为读写分离) | 设置是否开启,开启后,数据库代理出现故障时,连接地址将会路由到主实例。 |
自动添加只读实例 | 设置是否开启,开启后,若您购买新的只读实例,会自动添加到数据库代理中。 当读权重为系统自动分配时,新购只读实例按照规格大小默认权重分配。 当读权重为自定义时,新购只读实例默认加入时权重为0,可通过数据库代理页,连接地址下的调整配置来修改。 |
成功开启数据库代理读写分离
成功开启数据库代理读写分离后,数据库代理页面如下: