本文介绍如何通过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实例为例,验证读写分离功能。主要步骤如下:
在RDS控制台设置只读实例权重为100的整数倍,主实例权重为0(例如10000:0),确保所有读请求均分配至只读实例。
通过ECS使用测试账号连接数据库代理地址,分别执行读操作和写操作。
在RDS控制台的SQL洞察和审计功能中,查看只读实例和主实例的SQL命令执行记录。
根据SQL执行记录,判断读请求是否由只读实例处理、写请求是否由主实例处理,从而验证读写分离是否生效。
操作步骤
设置读写分离权重。
访问RDS实例列表,在上方选择地域,然后单击主实例ID。
在左侧导航栏,单击数据库代理,然后在连接信息区域,找到目标代理连接地址ID(原代理终端ID)。
单击目标代理连接地址操作列的修改配置。
在弹出的对话框中,完成以下配置:
将读写属性设置为读写(读写分离)。
读权重分配选择自定义,将只读实例的权重设为10000,主实例的权重设为0,完成后单击确定。
在连接信息区域,获取目标代理连接地址ID关联的内网(专有网络)的代理连接地址。
通过ECS服务器使用账号cxx1连接数据库并执行读操作。
登录到待连接RDS MySQL实例的ECS服务器。
说明登录ECS的操作,请参见连接ECS实例。
执行如下命令,连接RDS MySQL实例。
mysql -h代理连接地址 -P端口 -u用户名 -p密码
命令中的参数说明如下表所示。
名称
含义
说明
代理连接地址
步骤1中获取的实例的类型为内网(专有网络)的代理连接地址。
如果使用本地客户端连接RDS MySQL实例,则需要使用类型为外网的代理连接地址。
大写字母P
之后填写端口
不涉及。
-u
之后填写用户名
不涉及。
小写字母p
之后填写密码
输入密码时,需要在
-p
后面直接输入,不允许有空格。您也可以不在
-p
后输入密码,在执行命令后再输入,以防止密码明文显示。执行如下命令,进入数据库testdb01。
USE testdb01;
执行6次读操作命令,例如执行如下命令:
SELECT * FROM products LIMIT 20;
执行写操作。在数据库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 );
查看主实例和只读实例的SQL请求处理记录。
确认SELECT命令请求均由只读实例处理。确认CREATE命令请求均由主实例处理,在只读实例中未查询到CREATE命令请求记录。
访问RDS实例列表,在上方选择地域,然后单击主实例ID。
在主实例左侧导航栏,选择
,选择时间范围,单击查询,未查询到SELECT命令执行记录。在主实例左侧导航栏,单击基本信息,将鼠标悬停于只读实例的右侧的数字处,在弹出的对话框中,单击只读实例ID。
在只读实例详情页的左侧导航栏,选择
,选择时间范围,单击查询,可以看到6次SELECT命令的执行记录,如下图所示。在主实例实例详情页的左侧导航栏,选择
,选择时间范围,单击查询,可以看到3次CREATE命令的执行记录,如下图所示。
验证结论
在权重设置为10000:0时,只有写请求由主实例处理,所有读请求均由只读实例处理,实现了读写分离。