tencent cloud

文档反馈

读写分离扩展云数据库 MySQL 性能

最后更新时间:2022-06-13 15:37:16

    本文为您介绍通过数据库代理开启读写分离功能,实现横向扩展,提升云数据库 MySQL 的性能。

    数据库代理实现读写分离架构

    数据库代理

    数据库代理是位于云数据库服务和应用服务之间的网络代理服务,用于代理应用服务访问数据库时的所有请求。
    数据库代理访问地址独立于原有的数据库访问地址,通过数据库代理地址的请求,全部通过代理集群中转访问数据库的主从节点,进行读写分离,将读请求转发至只读实例,降低主库的负载。

    自动读写分离

    用户业务场景中存在读多写少、业务负载无法预测等场景,有大量读请求的应用场景下,单个实例可能无法承受读取压力,甚至对业务产生影响。
    为了实现读取能力的弹性扩展,分担数据库压力,可以创建一个或多个只读实例,利用只读实例满足大量的数据库读取需求。但此类解决方案需要业务侧支持读写分离改造,其代码的健壮性决定了业务读写分离的质量,对客户的技术要求较高,而且灵活性和可扩展性较差。

    故创建只读实例后,可通过购买数据库代理开启读写分离功能,在应用程序中配置数据库代理地址,就可以使写请求自动转发到主实例,读请求自动转发到各个只读实例。

    通过数据库代理开启读写分离功能

    步骤1:开通数据库代理

    1. 登录 MySQL 控制台,在实例列表,选择需要开启代理的主实例,单击实例 ID 或操作列的管理,进入实例管理页面。
    2. 在实例管理页面,选择数据库代理页,单击立即开启
    3. 在弹出的对话框,选择规格节点,单击确定,然后刷新页面。
      • 网络类型:仅支持私有网络 VPC,默认与主实例保持一致。
      • 代理规格:2核4000MB内存、4核8000MB内存、8核16000MB内存。
      • 节点个数:代理节点个数,推荐代理个数为:主实例和只读实例 CPU 核数之和的 1/8(向上取整),例如主实例为4核 CPU,只读实例为8核 CPU,则推荐代理数量 = (4 + 8 ) / 8 ≈ 2
      • 连接池状态:连接池能有效解决短连接业务频繁建立新连接导致实例负载过高的问题。
      • 安全组:是重要的网络安全隔离手段,可根据需要选择已有安全组或新建安全组。
    4. 开通成功后,可在数据库代理页查看基本信息、管理代理节点、修改数据库代理地址、调整配置等。
      说明:

      • 您可通过查看代理节点列表的连接数或查看各代理节点的性能监控,来判断各节点是否出现访问不均衡现象。若出现各代理节点连接数不均衡的现象,可单击重新负载均衡打散连接。
      • 重新负载均衡会触发代理节点重启,重启过程中会有短暂服务不可用现象,建议在低峰期重启服务,请确保业务具备重连机制。

    步骤2:开通数据库代理读写分离

    1. 登录 MySQL 控制台
    2. 在上方选择地域,单击实例 ID 或操作列的管理,进入实例管理页。
    3. 在实例管理页的数据库代理页,选择读写分离页,单击立即开启
    4. 在弹出的对话框,选择相关配置,单击确定
      注意:

      • 仅状态为运行中的主实例和只读实例,才能加入数据库代理中。
      • 目前异地 RO 和延迟 RO 不允许挂载到数据库代理下。
    • 只读实例延迟剔除:是否启动剔除策略。当只读实例发生复制异常(复制延迟、复制中断)时,数据库代理会将只读实例暂时移出读写分离。延迟剔除阈值默认为10秒、只读实例最小保留数为1个。
      说明:

      只读实例剔除设置阈值和实例最小保留数后,仅对新连接生效。

    • 延迟剔除阈值:只读实例同步主实例数据时允许的最长延迟时间。若一个只读实例的延迟时间超过该阈值,则不论该只读实例的权重是多少,读请求都不会转发至该只读实例。取值范围为大于或等于1的整数。
      • 若只读实例延迟超过阈值时,则会被剔除,被剔除的实例权重自动设置为0,且系统会向用户发出告警(须先订阅“数据库代理挂载节点剔除”告警,配置请参见 告警功能)。
      • 当只读实例延迟小于阈值时,会重新加入到数据库代理中。同时,不管是否启用延迟剔除功能,只读实例故障被剔除后,待实例修复也会重新加入到数据库代理中。
      • 通过设置只读最小保留数,数据库代理发现当前路由中的只读实例小于设定的值时,将会把异常的只读实例加回读写分离,直至参与读写分离的只读实例个数满足最小保留数。
        注意:

        当只读库发生致命故障(如宕机)时,最小保留数无法作用于致命故障的实例。

    • 只读实例最小保留数:需要保证的实例下限数,若现有只读实例数小于等于此下限且延迟时间超过阈值,现有只读实例均不被剔除。
    • 读权重分配:为实例分配读权重,可选择系统自动分配或自定义,权重分配范围为0 - 100的整数。读权重分配配置后,会立即对所有连接生效。
      • 数据库代理将按照权重设置分配读请求的流量,如,两个只读库的权重分别为10和20,那么他们的读请求流量将按照1:2的比例分配。
      • 权重仅为读请求权重,写请求会直接路由到主库,不参与权重的计算。如,客户端发送了10条写语句和10条读语句,主库和只读库的权重比为1:1,这时主库会收到10条写语句和5条读语句,只读库收到5条读语句。
      • 选择系统自动分配权重时,系统会根据实例的 CPU 和内存规格来自动分配权重,此时仅能设置主实例的权重。
      • 如果只读实例的权重为0,则数据库代理不会对该只读实例建连,如果只读实例的权重从0改为非0,权重无法立即生效,只能对新连接生效。
    • 故障转移:设置是否开启,推荐开启,当只读实例异常时,数据库代理会将读请求发送至主实例。
      说明:

      故障转移配置后,仅对新连接生效。

    • 自动添加只读实例:设置是否开启,开启后,若您购买新的只读实例,会自动添加到数据库代理中。
      • 当读权重为系统自动分配时,新购只读实例按照规格大小默认权重分配。
      • 当读权重为自定义时,新购只读实例默认加入时权重为0,可通过数据库代理读写分离的调整配置修改。

    成功开启数据库代理读写分离

    成功开启数据库代理读写分离后,数据库代理页面如下:

    相关文档

    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持