本文以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洞察和审计功能。
背景信息
数据库代理的读写分离功能可使写请求自动转发到主实例,读请求自动转发到各个只读实例,实现读写请求的自动分流,减轻主实例的压力。在您开通并配置了数据库代理服务后,可通过本文介绍的方法验证读写请求是否按照配置的比例进行分流,实现读写分离。
验证流程
在本例中,以ECS实例通过内网连接RDS MySQL实例为例进行验证。主要步骤如下:
在RDS控制台将只读实例的读写分离权重设置为100的整数倍,主实例的权重设置为0。只有主实例的权重设置为0,才能保证读请求全部分配给只读实例处理。在本例中,只读实例与主实例的权重比例设置为10000:0。
通过ECS使用测试账号连接数据库代理地址,执行读操作,在RDS控制台的SQL洞察和审计功能中查看只读实例和主实例的SQL命令执行记录。
通过ECS使用测试账号连接数据库代理地址,执行写操作,在RDS控制台的SQL洞察和审计功能中查看只读实例和主实例的SQL命令执行记录。
根据只读实例和主实例的SQL命令执行记录判断读请求和写请求由哪个实例处理,是否实现了读写分离。
操作步骤
在RDS控制台设置读写分离权重。
访问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;
在RDS控制台的SQL洞察和审计功能中,查看主实例和只读实例的SQL请求处理记录,确认SELECT命令请求均由只读实例处理。
访问RDS实例列表,在上方选择地域,然后单击主实例ID。
在主实例左侧导航栏,选择
,选择时间范围,单击查询,未查询到SELECT命令执行记录。在主实例左侧导航栏,单击基本信息,将鼠标悬停于只读实例的右侧的数字处,在弹出的对话框中,单击只读实例ID。
在只读实例详情页的左侧导航栏,选择
,选择时间范围,单击查询,可以看到6次SELECT命令的执行记录,如下图所示。
验证写请求的处理情况。
说明在上一步中已通过ECS服务器连接RDS MySQL实例并进入数据库testdb01(详细步骤请参见步骤2)。
在数据库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 );
在RDS控制台的SQL洞察和审计功能中,查看主实例和只读实例的SQL请求处理记录(详细步骤请参见步骤2),确认CREATE命令请求均由主实例处理,在只读实例中未查询到CREATE命令请求记录。主实例的SQL请求记录如下图所示。
验证结论
由上述验证步骤可以看到,在RDS MySQL只读实例与主实例的读写分离权重设置为10000:0的情况下,只有写请求会由主实例处理,全部的读请求均由只读实例处理,实现了读写分离。