验证读写分离

本文介绍如何通过ECS实例内网连接验证RDS MySQL高可用实例的读写分离。

前提条件

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

  • 已为主实例创建MySQL只读实例

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

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

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

  • 已为实例设置IP白名单

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

  • 开通数据库代理

  • 已开通SQL洞察和审计

背景信息

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

验证流程

本例以ECS实例通过内网连接RDS MySQL实例为例,验证读写分离功能。主要步骤如下:

  1. RDS控制台设置只读实例权重为100的整数倍,主实例权重为0(例如10000:0),确保所有读请求均分配至只读实例。

  2. 通过ECS使用测试账号连接数据库代理地址,分别执行读操作和写操作。

  3. RDS控制台的SQL洞察和审计功能中,查看只读实例和主实例的SQL命令执行记录。

  4. 根据SQL执行记录,判断读请求是否由只读实例处理、写请求是否由主实例处理,从而验证读写分离是否生效。

操作步骤

  1. 设置读写分离权重。

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

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

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

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

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

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

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

  2. 通过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;
  3. 执行写操作。在数据库testdb01中执行3次写操作命令,例如执行如下命令:

    说明

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

    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
    );                               
  4. 查看主实例和只读实例的SQL请求处理记录。

    确认SELECT命令请求均由只读实例处理。确认CREATE命令请求均由主实例处理,在只读实例中未查询到CREATE命令请求记录。

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

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

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

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

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

验证结论

在权重设置为10000:0时,只有写请求由主实例处理,所有读请求均由只读实例处理,实现了读写分离。