操作手册
【实践】PolarDB MySQL无损快速的热备切换
本实验带您体验在故障容灾场景下,PolarDB MySQL无损快速的热备切换。
场景简介
PolarDB面向高可用场景,推出了新的方案——快速热备切换。您可事先为集群中的只读节点开启热备功能,从而在主备切换的过程中实现快速切换和连接保持。
本场景将为您提供云服务器ECS和PolarDB MySQL集群资源。通过本教程的操作,带您体验在故障容灾场景下,PolarDB MySQL无损快速的热备切换。
费用说明
本实验使用云服务器ECS实例和PolarDB MySQL,实验总费用不超过1.7元。如果您调整了资源规格、使用时长,或执行了本方案以外的操作,可能导致费用发生变化,请以控制台显示的实际价格和最终账单为准。
背景知识
本场景主要涉及以下云产品和服务:
前提条件
创建实验资源
在实验页面,勾选我已阅读并同意《阿里云云起实践平台服务协议》和我已授权阿里云云起实践平台创建、读取及释放实操相关资源后,单击开始实操。
创建资源需要5分钟左右的时间,请您耐心等待。
在云产品资源列表,您可以查看本场景涉及的云产品资源信息。
安全设置
资源创建完成后,为了保护您阿里云主账号上资源的安全,请您重置云服务器ECS的登录密码。
重置云服务器ECS的登录密码。
重要注意需修改容灾测试故障实例和容灾测试恢复实例两台服务器的登录密码。
在云产品资源列表的ECS云服务器区域,单击管理。
在实例详情页签的基本信息区域,单击重置密码。
在重置实例密码对话框中,设置新密码和确认密码,重置密码的方式选择在线重置密码,配置SSH密码登录策略选择开启,单击确认修改。
返回如下结果,表示ECS实例root用户的登录密码重置成功。
设置安全组端口。
在云产品资源列表的安全组区域,单击管理。
在访问规则区域的入方向中,添加HTTP(80)、MySQL(3306)端口。
重要添加端口时,授权对象建议选择您的本机IP地址。
配置PolarDB MySQL集群
本步骤将指导您在PolarDB MySQL集群上创建用于压测的数据库和账号,配置白名单实现ECS访问,并设置相关参数。
在云产品资源列表的云原生数据库区域,单击管理,进入PolarDB MySQL集群基本信息页。
配置白名单。在左侧导航栏中,选择配置与管理 > 集群白名单。在集群白名单页面,单击default分组右侧的配置。
在配置白名单面板中,将白名单内IP地址区域的IP修改为实验室分配给您的ECS实例的公网IP地址,单击确定。
说明您可以在云产品资源列表中查看到ECS公网IP地址。
创建账号。
在左侧导航栏中,选择配置与管理 > 账号管理。在账号管理页面,单击创建账号。
在创建账号面板中,参考说明配置账号信息,单击确定。
参数
说明
参数
说明
账号名
输入数据库账号名称,例如test_user。
账号类型
选择高权限账号。
密码
自定义。
创建用于压测的数据库。
在左侧导航栏中,选择配置与管理 > 数据库管理。 在数据库管理页面,单击创建数据库。
在创建数据库面板中,参考说明配置数据库信息,单击创建。
参数
说明
参数
说明
数据库(DB)名称
输入数据库名称,例如hotrep。
支持字符集
默认设为utf8mb4。
备注说明
非必填。用于备注该数据库的相关信息,便于后续数据库管理,最多支持256个字符。
设置集群参数。
在左侧导航栏,选择配置与管理 > 参数配置。 在参数配置页面,单击修改参数。
在参数列表中,在搜索框中输入
loose_innodb_trx_resume
,单击图标,找到
loose_innodb_trx_resume
参数,将该参数的集群参数值修改为ON,单击提交修改。在保存改动面板中,单击确定。
返回如下页面,请您耐心等待两分钟,并刷新页面,当
loose_innodb_trx_resume
参数的集群参数值为ON时,表示您修改完成。
为只读节点开启热备
本实验的PolarDB MySQL集群包含一个RW节点和一个RO节点。本步骤将指导您为该RO节点开启热备。
为RO节点开启热备。在左侧导航栏中, 单击基本信息。在基本信息页面的数据库节点区域,单击右上角的
图标切换视图。
在数据库节点区域,查看节点是否开启热备。
(可选)若只读节点未开启热备功能,单击操作列下的开启热备。
在开启热备对话框中,单击确认。
返回如下页面,请您耐心等待大约六分钟,只读节点的状态变为运行中,表示热备开启完成。
为集群申请公网集群地址。在基本信息页面的数据库连接区域,选择同时指向了主节点和只读节点的集群地址,单击公网右侧的申请。
在申请访问地址对话框中,请您自定义输入集群公网地址的前缀,单击确定。
在基本信息页面,请您耐心等待大约30秒并刷新页面,将鼠标移至数据库连接区域的集群地址上,在上方的悬浮框中,您可以看到刚刚申请的公网地址信息(包括地址和端口),该公网地址信息在后续步骤将使用到。
通过ECS向数据库插入数据并执行压测
本步骤将指导您在配置完成PolarDB MySQL实例后,通过云服务器ECS,向PolarDB MySQL数据库插入数据和进行压测。
在云产品资源列表的ECS云服务器区域,单击远程连接,连接云服务器ECS。
在登录实例对话框中,输入用户自定义密码,单击确定。
在终端中,参考说明修改如下命令中的部分参数取值,然后执行命令,向数据库中插入数据。
参数
说明
参数
说明
mysql_host
PolarDB MySQL集群的公网连接地址。
mysql-port
PolarDB MySQL集群的公网地址端口号,默认为3306。
mysql-db
数据库名称,例如hotrep。
mysql-user
数据库用户名,例如test_user。
mysql-password
数据库用户的密码。
sysbench --threads=4 --time=7200 --mysql_host=xxxxxx.rwlb.rds.aliyuncs.com --mysql-port=3306 --mysql-db=hotrep --mysql-user=test_user --mysql-password=PolarDB数据库密码 /usr/share/sysbench/oltp_read_write.lua --tables=10 --table_size=10000 prepare
请您耐心等待大约20秒钟,返回结果如下,表示导入测试数据完成。
参考说明修改如下命令中的部分参数取值,然后执行命令,开始压测。
参数
说明
参数
说明
mysql_host
PolarDB MySQL集群的公网连接地址。
mysql-port
PolarDB MySQL集群的公网地址端口号,默认为3306。
mysql-db
数据库名称,例如hotrep。
mysql-user
数据库用户名,例如test_user。
mysql-password
数据库用户的密码。
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=PolarDB数据库密码 /usr/share/sysbench/oltp_read_write.lua --report-interval=1 --tables=10 --table_size=10000 run
返回结果如下图所示,表示开始压测。
开启一个事务
本步骤将指导您如何通过云服务器ECS连接到PolarDB集群,并准备一行数据before test,并开启一个事务,将该数据更新为start test。
在正在执行的ECS终端窗口中,单击右上角
按钮,开启一个新的ECS终端。
在新终端中,参考说明修改如下命令中的参数,然后执行命令,连接到PolarDB MySQL集群。
参数
说明
参数
说明
--host
PolarDB MySQL集群的公网连接地址。
--port
PolarDB MySQL集群的公网地址端口号,默认为3306。
-u
数据库用户名,例如test_user。
-p
数据库用户的密码。
mysql --host xxxxxx.rwlb.rds.aliyuncs.com --port 3306 -utest_user -pPolarDB数据库密码
执行如下SQL语句,进入创建的hotrep数据库。
use hotrep;
执行如下SQL语句,创建数据表t1,并插入一条数据before test。
create table t1 (id int primary key, data varchar(128)); insert into t1 values (1, "before test");
执行查询命令,确认t1表中已存在一行数据
before test
。select * from t1;
返回结果如下,您可查看到t1表中已存在一行数据
before test
。执行如下命令,开启一个事务,在事务中将before test更新为start test,并查询确认结果为
start test
。begin; update t1 set data="start test" where id=1; select * from t1;
模拟触发故障容灾并观察业务中断情况和事务情况
本步骤将指导您在模拟故障容灾后,如何观察业务中断情况和事务续传情况。
模拟触发故障容灾
执行如下SQL语句,激活PolarDB MySQL集群的模拟故障容灾功能。
call dbms_fault.crash();
观察业务中断情况和事务情况
在第一个终端中,观察压测的执行情况。压测的执行情况可以反应业务的连接情况。 如下图您可以看到,在触发故障容灾后,压测程序的TPS出现了跌零,持续10秒左右后立即恢复,并恢复正常的压测。在触发故障容灾后到恢复正常的压测期间,并没有出现报错,数据库连接也未发生中断。
在看到TPS恢复后,在右侧连接到PolarDB MySQL集群的ECS终端中,执行相关SQL语句,观察事务的续传情况。
执行如下SQL语句,查询数据表t1。
select * from t1;
返回结果如下,您可从返回的结果是
start test
得知,数据库可以正常执行查询,并返回容灾前当前事务更新的状态。执行如下SQL语句,该SQL语句可继续执行触发故障容灾之前的事务,将其更新为
trx resume success
并提交。update t1 set data="trx resume success" where id=1; commit;
执行如下SQL语句,查询数据表t1。
select * from t1;
返回结果如下,您可从返回的结果是
trx resume success
得知,事务执行成功。这说明热备RO上触发故障容灾后,事务不中断。
实验拓展
在完成以上步骤实验后,您可以关闭RO节点的热备功能,并重新执行步骤四至步骤七,从而体验未开启热备功能的普通RO节点在遇到故障容灾之后,业务的中断情况和事务续传情况。本实验中不再赘述普通RO的实验流程。
您也可以观看热备RO与普通RO故障容灾的表现对比的视频,了解普通RO节点的表现情况。
从以上对比可知,在故障容灾failover场景(如主节点宕机)下:
热备RO可以实现连接和事务不中断,且不出现中断报错。
普通RO会出现较长时间的连接中断,且出现中断报错。事务也会发生中断。
清理资源
在完成实验后,如果无需继续使用资源,请择不保留资源,单击结束实操。在结束实操对话框中,单击确定。
在完成实验后,如果需要继续使用资源,选择付费保留资源,单击结束实操。在结束实操对话框中,单击确定。请随时关注账户扣费情况,避免发生欠费。
【实践】PolarDB MySQL无损快速的热备切换

• 进入实操前,请确保您已通过 实名认证 且 账户余额 大于100元
• 资源开通在个人账号,默认时长120分钟
• 云资源产生的费用需您自行承担,云起实践平台不会向您征收额外费用
• 实操结束后,您可以选择继续付费保留资源,或参考手册自动/手动释放资源
