全部产品
Search
文档中心

云数据库 RDS:验证读写分离

更新时间:Dec 15, 2023

本文以ECS实例通过内网连接RDS MySQL实例为例,介绍验证RDS MySQL高可用系列实例的读写分离的方法。

前提条件

  • 已创建RDS MySQL高可用系列主实例。

  • 已为主实例创建只读实例,操作方法请参见创建MySQL只读实例

  • 已为实例创建至少1个数据库(含至少1个表)和1个测试账号(普通账号或高权限账号均可),操作方法请参见创建数据库和账号

    说明
    • 如果您创建的测试账号为普通账号,还需要给该账号赋予待操作数据库的读写(DDL+DML)权限。

    • 在本例中创建的数据库为testdb01,表为products,测试账号为cxx1。

  • 已为实例设置IP白名单。操作方法请参见设置IP白名单

  • 连接RDS MySQL实例的ECS实例与RDS MySQL实例在同一个VPC下,并且已经安装了MySQL客户端。

  • 已开通数据库代理服务。

  • 已开通SQL洞察和审计功能。

    说明

    开通数据库代理服务、SQL洞察和审计功能需要付费,操作方法和计费详情,请参见开通数据库代理SQL洞察和审计

背景信息

数据库代理的读写分离功能可使写请求自动转发到主实例,读请求自动转发到各个只读实例,实现读写请求的自动分流,减轻主实例的压力。在您开通并配置了数据库代理服务后,可通过本文介绍的方法验证读写请求是否按照配置的比例进行分流,实现读写分离。

验证流程

在本例中,以ECS实例通过内网连接RDS MySQL实例为例进行验证。主要步骤如下:

  1. 在RDS控制台将只读实例的读写分离权重设置为100的整数倍,主实例的权重设置为0。只有主实例的权重设置为0,才能保证读请求全部分配给只读实例处理。在本例中,只读实例与主实例的权重比例设置为10000:0。

  2. 通过ECS使用测试账号连接数据库代理地址,执行读操作,在RDS控制台的SQL洞察和审计功能中查看只读实例和主实例的SQL命令执行记录。

  3. 通过ECS使用测试账号连接数据库代理地址,执行写操作,在RDS控制台的SQL洞察和审计功能中查看只读实例和主实例的SQL命令执行记录。

  4. 根据只读实例和主实例的SQL命令执行记录判断读请求和写请求由哪个实例处理,是否实现了读写分离。

操作步骤

  1. 在RDS控制台设置读写分离权重。

    1. 访问RDS实例列表,在上方选择地域,然后单击主实例ID。

    2. 在左侧导航栏,单击数据库代理,然后在连接信息区域,找到目标代理连接地址ID(原代理终端ID)。

    3. 单击目标代理连接地址操作列的修改配置

    4. 在弹出的对话框中,完成以下配置:

      • 读写属性设置为读写(读写分离)

      • 读权重分配选择自定义,将只读实例的权重设为10000,主实例的权重设为0,完成后单击确定

    5. 连接信息区域,获取目标代理连接地址ID关联的内网(专有网络)的代理连接地址。

  2. 验证读请求的处理情况。

    1. 通过ECS服务器使用账号cxx1连接数据库并执行读操作。

      1. 登录到待连接RDS MySQL实例的ECS服务器。

        说明

        登录ECS的操作,请参见连接ECS实例

      2. 执行如下命令,连接RDS MySQL实例。

        mysql -h代理连接地址 -P端口 -u用户名 -p密码

        命令中的参数说明如下表所示。

        名称

        含义

        说明

        代理连接地址

        步骤1中获取的实例的类型为内网(专有网络)的代理连接地址。

        如果使用本地客户端连接RDS MySQL实例,则需要使用类型为外网的代理连接地址。

        大写字母P

        之后填写端口

        不涉及。

        -u

        之后填写用户名

        不涉及。

        小写字母p

        之后填写密码

        输入密码时,需要在-p后面直接输入,不允许有空格。

        您也可以不在-p后输入密码,在执行命令后再输入,以防止密码明文显示。

      3. 执行如下命令,进入数据库testdb01。

        USE testdb01;
      4. 执行6次读操作命令,例如执行如下命令:

        SELECT * FROM products LIMIT 20;
    2. 在RDS控制台的SQL洞察和审计功能中,查看主实例和只读实例的SQL请求处理记录,确认SELECT命令请求均由只读实例处理。

      1. 访问RDS实例列表,在上方选择地域,然后单击主实例ID。

      2. 在主实例左侧导航栏,选择自治服务 > SQL洞察和审计,选择时间范围,单击查询,未查询到SELECT命令执行记录。

      3. 在主实例左侧导航栏,单击基本信息,将鼠标悬停于只读实例的右侧的数字处,在弹出的对话框中,单击只读实例ID。

      4. 在只读实例详情页的左侧导航栏,选择自治服务 > SQL洞察和审计,选择时间范围,单击查询,可以看到6次SELECT命令的执行记录,如下图所示。执行记录

  3. 验证写请求的处理情况。

    说明

    在上一步中已通过ECS服务器连接RDS MySQL实例并进入数据库testdb01(详细步骤请参见步骤2)。

    1. 在数据库testdb01中执行3次写操作命令,例如执行如下命令:

      CREATE TABLE Products11 (
       prod_id CHAR(10) NOT NULL,
       vend_id CHAR(10) NOT NULL,
       prod_name CHAR(254) NOT NULL,
       prod_price DECIMAL(8,2) NOT NULL,
       prod_desc VARCHAR(1000) NULL
      );                               
    2. 在RDS控制台的SQL洞察和审计功能中,查看主实例和只读实例的SQL请求处理记录(详细步骤请参见步骤2),确认CREATE命令请求均由主实例处理,在只读实例中未查询到CREATE命令请求记录。主实例的SQL请求记录如下图所示。执行记录

验证结论

由上述验证步骤可以看到,在RDS MySQL只读实例与主实例的读写分离权重设置为10000:0的情况下,只有写请求会由主实例处理,全部的读请求均由只读实例处理,实现了读写分离。