PolarDB MySQL无损快速的热备切换
1. 选择实验资源
本实验支持实验资源体验、开通免费试用、个人账户资源三种实验资源方式。
在实验开始前,请您选择其中一种实验资源,单击确认开启实验。
- 如果您选择的是实验资源体验,资源创建过程需要3~5分钟(视资源不同开通时间有所差异,ACK等资源开通时间较长)。完成实验资源的创建后,在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等)。
说明:实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。
- 如果您选择的是开通免费试用,下方卡片会展示本实验支持的试用规格,可以选择你要试用的云产品资源进行开通。您在实验过程中,可以随时用右下角icon唤起试用卡片。
说明:试用云产品开通在您的个人账号下,并占用您的试用权益。如试用超出免费试用额度,可能会产生一定费用。
阿里云支持试用的产品列表、权益及具体规则说明请参考开发者试用中心。
2. 创建资源
本步骤指导您如何创建云服务器ECS和云数据库PolarDB。
如果您已创建云服务器ECS和云数据库PolarDB,请您选择个人账户资源,并跳过本小节,直接进行实验操作即可。
本步骤仅作为参考使用,您可以根据需求自行选择配置。
如果您选择的是开通免费试用,参考以下步骤云服务器ECS和云数据库PolarDB。
- 在本实验页面下方卡片会展示本实验支持的试用规格,依次选择一个试用规格,单击立即试用。
- 在云服务器ECS试用开通页面,根据页面引导进行开通云服务器ECS,其中操作系统选择CentOS 7.7 64位,地域需要与云数据库PolarDB在同一地域下,其他配置根据您的需求自行选择即可。
- 在云数据库PolarDB试用开通页面,根据页面引导进行开通云数据库PolarDB MySQLs,其中数据库类型选择MySQL,计费类型为Serverless,数据库版本号选择8.0,地域需要与云服务器ECS在同一地域下,其他配置根据您的需求自行选择即可。
如果您选择的是个人账户资源,参考以下步骤云服务器ECS和云数据库PolarDB。
- 创建云服务器ECS。
1.1 前往云服务器ECS控制台,在概览页面的我的资源区域,单击创建实例。
1.2 在云服务器ECS购买页面,根据页面引导进行开通云服务器ECS,其中操作系统选择CentOS 7.7 64位,地域需要与云数据库PolarDB在同一地域下,其他配置根据您的需求自行选择即可。
- 创建云数据库PolarDB。
2.1 前往云数据库PolarDB创建页面。
2.2 在云数据库PolarDB创建页面,根据页面引导进行开通云数据库PolarDB MySQL,其中数据库类型选择MySQL,数据库版本号选择8.0,地域需要与云服务器ECS在同一地域下,其他配置根据您的需求自行选择即可。计费问题请参考官方文档。
3. 实验环境配置
安装MySQL
- 更新yum源。
执行如下命令,更新MySQL的yum源。
rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
- 安装MySQL并查看版本。
执行如下命令,安装MySQL。
yum -y install mysql-community-server --nogpgcheck
执行成功上述命令后,继续在窗口执行MySQL版本检测命令:
mysql -V
上述两部操作执行完成后的页面如图所示。
- 启动MySQL服务,并将其设置为开机自启动。
执行如下命令,启动MySQL。
systemctl start mysqld
安装sysbechch
- 下载安装sysbechch
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash sudo yum -y install sysbench
- 查看版本信息
sysbench --version
4. 配置PolarDB MySQL集群
本步骤将指导您在PolarDB MySQL集群上创建用于压测的数据库和账号,配置白名单实现ECS访问,并设置相关参数。。
- 双击打开远程桌面的Chromium网页浏览器。
- 在RAM用户登录框中单击下一步,并复制粘贴页面左上角的子用户密码到用户密码输入框,单击登录。
- 复制下方地址,在Chromium网页浏览器打开新页签,粘贴并访问云数据库PolarDB控制台。
https://polardb.console.aliyun.com/
- 在集群列表页面顶部菜单栏,地域切换为华东1(杭州)。
- 在集群列表页面,找到目标集群,单击集群ID。
说明:您可以在云产品资源列表中查看到PolarDB实例ID。
- 配置白名单。
a.在左侧导航栏中,选择配置与管理>集群白名单。
b.在集群白名单页面,单击default分组右侧的配置。
c.在配置白名单面板中,将白名单内IP地址区域的ip修改为实验室分配给您的ECS实例的公网IP地址,单击确定。
说明:您可以在云产品资源列表中查看到ECS公网IP地址。
- 创建账号。
a.在左侧导航栏中,选择配置与管理>账号管理。
b.在账号管理页面,单击创建账号。
c.在创建账号面板中,参考说明配置账号信息,单击确定。
参数说明:
- 数据库账号:输入数据库账号名称,例如test_user。
- 账号类型:选择高权限账号。
- 密码:输入账号密码,例如Password123。
- 确认密码:再次输入账号密码。
- 创建用于压测的数据库。
a.在左侧导航栏中,选择配置与管理>数据库管理。
b.在数据库管理页面。单击创建数据库。
c.在创建数据库面板中,参考说明配置数据库信息,单击创建。
参数说明:
- 数据库(DB)名称:输入数据库名称,例如hotrep。
- 支持字符集:默认设为utf8mb4。
- 备注说明:非必填。用于备注该数据库的相关信息,便于后续数据库管理,最多支持256个字符。
- 设置集群参数。
a.在左侧导航栏,选择配置与管理>参数配置。
b.在参数配置页面,单击修改参数。
c.在参数列表中,在搜索框中输入loose_innodb_trx_resume,单击图标,找到loose_innodb_trx_resume参数,将该参数的集群参数值修改为ON,单击提交修改。
d.在保存改动面板中,单击确定。
返回如下页面,请您耐心等待两分钟,并刷新页面,当loose_innodb_trx_resume参数的集群参数值为ON时,表示您修改完成。
5. 为只读节点开启热备
本实验的PolarDB MySQL集群包含一个RW节点和一个RO节点。本步骤将指导您为该RO节点开启热备。
- 为RO节点开启热备。
a.在左侧导航栏中, 单击基本信息。
b.在基本信息页面的数据库节点区域,单击右上角的图标切换视图。
c.在数据库节点区域,找到需要设置热备功能的只读节点,单击操作列下的开启热备。
d.在开启热备对话框中,单击确认。
返回如下页面,请您耐心等待大约六分钟,只读节点的状态变为运行中,表示热备开启完成。
- 为集群申请公网集群地址。
a.在基本信息页面的数据库代理企业通用版区域,选择同时指向了主节点和只读节点的集群地址,单击公网右侧的申请。
b.在申请访问地址对话框中,请您自定义输入集群公网地址的前缀,单击确定。
c.在基本信息页面,请您耐心等待大约30秒并刷新页面,将鼠标移至数据库代理企业通用版区域的集群地址上,在上方的悬浮框中,您可以看到刚刚申请的公网地址信息(包括地址和端口),该公网地址信息在后续步骤将使用到。
6. 通过ECS向数据库插入数据并执行压测
本步骤将指导您在配置完成PolarDB MySQL实例后,通过云服务器ECS,向PolarDB MySQL数据库插入数据和进行压测。
- 在实验室页面右侧,单击 图标,切换至Web Terminal,即ECS终端。
说明:Web Terminal打开后,已自动通过ECS的公网IP地址连接至ECS。
- 在终端中,参考说明修改如下命令中的部分参数取值,然后执行命令,向数据库中插入数据。
sysbench --threads=4 --time=7200 --mysql_host=xxxxxx.rwlb.rds.aliyuncs.com --mysql-port=3306 --mysql-db=hotrep --mysql-user=test_user --mysql-password=Password123 /usr/share/sysbench/oltp_read_write.lua --tables=10 --table_size=10000 prepare
参数说明:
- mysql_host:PolarDB MySQL集群的公网连接地址。本实验中使用步骤三中申请的公网连接地址。
- mysql-port:PolarDB MySQL集群的公网地址端口号。本实验中使用步骤三中申请的公网地址端口信息,默认为3306。
- mysql-db:数据库名称。本实验中使用步骤二中创建的数据库,例如hotrep。
- mysql-user:数据库用户名。本实验中使用步骤二中创建的用户,例如test_user。
- mysql-password:数据库用户的密码。本实验中使用步骤二中创建的用户的密码,例如Password123。
请您耐心等待大约20秒钟,返回结果如下,表示导入测试数据完成。
- 参考说明修改如下命令中的部分参数取值,然后执行命令,开始压测。
sysbench --threads=4 --time=7200 --histogram=on --mysql_host=xxxxxx.rwlb.rds.aliyuncs.com --mysql-port=3306 --mysql-db=hotrep --mysql-user=test_user --mysql-password=Password123 /usr/share/sysbench/oltp_read_write.lua --report-interval=1 --tables=10 --table_size=10000 run
参数说明:
- mysql_host:PolarDB MySQL集群的公网连接地址。本实验中使用步骤三中申请的公网连接地址。
- mysql-port:PolarDB MySQL集群的公网地址端口号。本实验中使用步骤三中申请的公网地址端口信息,默认为3306。
- mysql-db:数据库名称。本实验中使用步骤二中创建的数据库,例如hotrep。
- mysql-user:数据库用户名。本实验中使用步骤二中创建的用户,例如test_user。
- mysql-password:数据库用户的密码。本实验中使用步骤二中创建的用户的密码,例如Password123。
返回结果如下,表示开始压测。
7. 开启一个事务
本步骤将指导您如何通过云服务器ECS连接到PolarDB集群,并准备一行数据before test,并开启一个事务,将该数据更新为start test。
- 通过新的ECS终端连接到PolarDB MySQL集群。
a.在实验室页面的Web Terminal中,在正在执行的ECS终端窗口中,单击右上角按钮,开启一个新的ECS终端。
b.在新终端中,参考说明修改如下命令中的参数,然后执行命令,连接到PolarDB MySQL集群。
mysql --host xxxxxx.rwlb.rds.aliyuncs.com --port 3306 -utest_user -pPassword123
参数说明:
- --host:PolarDB MySQL集群的公网连接地址。本实验中使用步骤三中申请的公网连接地址。
- --port:PolarDB MySQL集群的端口号。本实验中使用步骤三中申请的公网地址端口信息,默认为3306。
- -u:数据库用户名。本实验中使用步骤二中创建的用户,例如test_user。
- -p:数据库用户的密码。本实验中使用步骤二中创建的用户的密码,例如Password123。
c.执行如下SQL语句,连接到步骤二中创建的hotrep数据库。
use hotrep;
d.分别执行如下SQL语句,创建数据表t1,并插入一条数据before test。
create table t1 (id int primary key, data varchar(128)); insert into t1 values (1, "before test");
e.执行查询命令,确认t1表中已存在一行数据before test。
select * from t1;
返回结果如下,您可查看到t1表中已存在一行数据before test。
f.依次执行如下命令,开启一个事务,在事务中将before test更新为start test,并查询确认结果为start test
begin; update t1 set data="start test" where id=1; select * from t1;
8. 模拟触发故障容灾
本步骤将指导您如何在PolarDB MySQL集群中模拟故障容灾的发生。
- 前往PolarDB MySQL集群的DMS页面。
a.在实验室页面右侧,单击图标,切换至远程桌面。
b.在左侧导航栏中,选择配置与管理>数据库管理。
c.在数据库管理页面,找您创建的数据库,单击操作列下的SQL查询。
d.在登录实例对话框中,输入您在步骤二中创建的数据库账号和数据库密码,例如test_user/Password123,单击测试连接。
e.在成功对话框中,单击确认。
f.在登录实例对话框中,单击登录。
g.在DMS页面左侧,选择数据库实例>已登录实例>hotrep-PolarDB,双击hotrep。
返回如下页面,表示您成功通过DMS登录PolarDB MySQL集群,并连接到hotrep数据库。
- 在SQLConsole页签,输入如下SQL语句,单击执行(F8),激活PolarDB MySQL集群的模拟故障容灾功能。
call dbms_fault.crash();
9. 观察业务中断情况和事务情况
本步骤将指导您在触发模拟故障容灾后,如何观察业务中断情况和事务续传情况。
- 在实验室页面右侧,单击 图标,切换至Web Terminal,即ECS终端。
- 在ECS终端中,观察压测的执行情况。压测的执行情况可以反应业务的连接情况。 如下图您可以看到,在触发故障容灾后,压测程序的TPS出现了跌零,持续10秒左右后立即恢复,并恢复正常的压测。在触发故障容灾后到恢复正常的压测期间,并没有出现报错,数据库连接也未发生中断。
- 在看到TPS恢复后,在右侧连接到PolarDB MySQL集群的ECS终端中,执行相关SQL语句,观察事务的续传情况。
a.执行如下SQL语句,查询数据表t1。
select * from t1;
返回结果如下,您可从返回的结果是start test得知,数据库可以正常执行查询,并返回容灾前当前事务更新的状态。
b.依次执行如下SQL语句,该SQL语句可继续执行触发故障容灾之前的事务(见步骤五),将其更新为trx resume success并提交。
update t1 set data="trx resume success" where id=1; commit;
c.执行如下SQL语句,查询数据表t1。
select * from t1;
返回结果如下,您可从返回的结果是trx resume success得知,事务执行成功。这说明热备RO上触发故障容灾后,事务不中断。
10. 实验拓展
在完成以上步骤实验后,您可以关闭RO节点的热备功能,并重新执行步骤四至步骤七,从而体验未开启热备功能的普通RO节点在遇到故障容灾之后,业务的中断情况和事务续传情况。本实验中不再赘述普通RO的实验流程。
您也可以观看热备RO与普通RO故障容灾的表现对比的视频,了解普通RO节点的表现情况。
从以上对比可知,在故障容灾failover场景(如主节点宕机)下:
- 热备RO可以实现连接和事务不中断,且不出现中断报错。
- 普通RO会出现较长时间的连接中断,且出现中断报错。事务也会发生中断。
11. 释放资源
在完成实验之后,若您想保留实验相关的云产品资源,请随时关注账户扣费情况。若您不想保留实验相关的云产品资源,释放云产品资源即可。
实验链接:https://developer.aliyun.com/adc/scenario/5c6eb86de7754f4ca40cd0898e8d1dd6