体验高可用云原生PolarDB MySQL引擎
1. 创建资源
- 在页面左侧,单击 云产品资源 下拉列表,查看本次实验所需资源。
- 单击屏幕右侧 创建资源 ,免费创建当前实验所需云产品资源。
说明:
资源创建过程需要1~3分钟。完成实验资源的创建后,您可以在 云产品资源 列表查看已创建的资源信息,例如:IP地址、子用户名称和子用户密码等。
2. 创建PolarDB数据库账号
- 双击打开远程桌面的Chromium网页浏览器。
- 在RAM用户登录框中单击下一步,并复制粘贴页面左上角的子用户密码到用户密码输入框,单击登录。
- 复制下方地址,在Chromium网页浏览器打开新页签,粘贴并访问云数据库PolarDB控制台。
https://polardb.console.aliyun.com/
- 在集群列表页面顶部菜单栏中,切换资源所在地域。
说明:您可在云产品资源列表中查看PolarDB资源所在的地域。
- 在集群列表页面,找到您的PolarDB实例,单击实例ID。
说明:您可在云产品资源列表中查看实验室分配的PolarDB实例ID。
- 创建数据库账号。
- 单击左侧导航栏配置与管理>账号管理 。
- 单击左上方创建账号 。
- 参考说明配置账号信息,然后单击确定。
- 数据库账号:输入数据库账号名称,例如:temp。
- 账号类型:此处选择高权限账号。
- 密码:设置账号密码,例如:Dase2022。
- 确认密码:再次输入密码。
3. 设置数据库白名单
- 连接数据库需要设置数据库白名单,单击左侧导航栏配置与管理>集群白名单 。
- 在集群白名单页面的IP列表区域,单击default分组右侧的配置。
- 在配置白名单面板,将白名单内IP地址127.0.0.1修改为0.0.0.0/0,单击确定。
说明:如果找不到确定按钮,请按F11,开启全屏模式就能看见了。再按一次F11可退出全屏模式。
4. 安装测试工具SysBench
- 在实验室右侧功能栏中,单击 图标,切换至Web Terminal,自动连接到云服务器ECS。
- 在Web Terminal中,执行如下命令,安装SysBench。
yum install gcc gcc-c++ autoconf automake make libtool bzr mysql-devel git mysql unzip wget https://labfileapp.oss-cn-hangzhou.aliyuncs.com/Universities/sysbench.zip ## 下载sysbench unzip sysbench.zip ## 解压缩 cd sysbench ## 打开sysbench目录 git checkout 1.0.18 ## 切换到sysbench 1.0.18版本 ./autogen.sh ## 运行autogen.sh ./configure --prefix=/usr --mandir=/usr/share/man make ##编译 make install
- 执行如下命令,配置SysBench client,使内核可以利用所有的CPU核数处理数据包(默认设置为2核),同时减少CPU核数之间的上下文切换。
sudo sh -c 'for x in /sys/class/net/eth0/queues/rx-*; do echo f>$x/rps_cpus; done' sudo sh -c "echo 32768 > /proc/sys/net/core/rps_sock_flow_entries" sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt"
说明:f 表示使用4个核。
5. 使用SysBench模拟对数据库持续的流量注入
- 在Web Terminal上,执行如下命令(会提示输入密码),在PolarDB MySQL引擎集群中创建数据库testdb,用于后续的SysBench流量注入。
mysql -h 集群地址 -P 端口号 -u 用户名 -p -e 'create database testdb'
说明:
- 集群地址即PolarDB连接地址,可在 云产品资源>场景资源信息如下⬇️ 中查询到;
- 端口号默认3306;
- 用户名与密码是第二步中创建的PolarDB数据库账户的用户名及密码(temp, Dase2022)。
- 执行如下命令,使用SysBench模拟对数据库进行持续的流量注入。
##准备数据 sysbench --db-driver=mysql --mysql-host=集群地址 --mysql-port=端口号 --mysql-user=用户名 --mysql-password=密码 --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 oltp_write_only prepare ##运行workload sysbench --db-driver=mysql --mysql-host=集群地址 --mysql-port=端口号 --mysql-user=用户名 --mysql-password=密码 --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --threads=8 --percentile=95 --report-interval=1 oltp_write_only run
说明:SysBench清理数据的命令如下,本实验暂不用执行。
##清理 sysbench --db-driver=mysql --mysql-host=集群地址 --mysql-port=端口号 --mysql-user=用户名 --mysql-password=密码 --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --threads=8 --percentile=95 oltp_write_only cleanup
6. 观察数据库的容灾恢复情况
- 在实验室右上角,单击 图标,新增终端二窗口。
- 在终端二中,执行如下命令,连接PolarDB集群。
说明:在后续步骤中,我们在终端二中观察数据库连接情况,在终端一中观察SysBench中流量注入情况。
mysql -h 集群地址 -P 端口号 -u 用户名 -p 密码
- 在终端二中,执行如下SQL语句,使用testdb数据库。
use testdb;
- 在实验室页面左侧,单击 图标,切换至远程桌面。
- 在集群详情页面,单击登录数据库。
- 在登陆实例对话框中,使用已创建的账号登录(数据库账号temp,密码Dase2022)。
- 在页面左侧单击数据库实例,选择已登录实例>您的数据库实例,双击testdb数据库。
- 在SQLConsole页签,执行以下命令,激活PolarDB中的模拟故障容灾功能。
注意:此功能要求数据库内核引擎DB的版本要在8.0.1.1.26及以后
call dbms_fault.crash();
- 切换至Web Terminal,在终端一中,我们可以观察到触发故障容灾后TPS跌零,连接中断并报错,在此期间流量不断尝试重新注入,但TPS始终为0,大约1分钟后SysBench压测命令断开。
说明:当触发故障容灾后,可能会出现SysBench压测命令直接断开,不能对数据库进行持续的流量注入,看不到TPS跌零的情况。解决方法是,稍等1分钟,在终端一中重新执行SysBench压测命令,对数据库进行持续的流量注入,再继续触发故障容灾,进行尝试。
- 在终端二中,执行如下SQL语句。
说明:执行SQL语句时,请在触发故障容灾后,TPS未恢复正常前执行。
insert into t1 values(1);
返回结果如下,可以看到SQL语句不能正常执行,一直在等待中然后超时。
- 在终端一中,在触发故障容灾1分钟后并且SysBench压测命令断开情况下,再次执行如下命令,使用SysBench模拟对数据库进行持续的流量注入。
##运行workload sysbench --db-driver=mysql --mysql-host=集群地址 --mysql-port=端口号 --mysql-user=用户名 --mysql-password=密码 --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --threads=8 --percentile=95 --report-interval=1 oltp_write_only
返回结果如下,我们可以看到TPS已恢复正常,在一分钟左右时间,数据库已恢复正常连接,体现了云数据库PolarDB的高可用性。
实验链接:https://developer.aliyun.com/adc/scenario/9dc38e92d8e847e1be78c76e6c8d8489