PolarDB for MySQL 多主集群体验
1. 创建实验资源
开始实验之前,您需要先创建实验相关资源。
- 在实验室页面,单击创建资源。
- (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、用户信息等)。
说明:资源创建过程需要7~10分钟。
2. 登录集群
本步骤将指导您如何查看PolarDB for MySQL的集群节点地址,并登录集群。
- 双击打开远程桌面的Chromium网页浏览器。
- 在RAM用户登录框中单击下一步,并复制粘贴页面左上角的子用户密码到用户密码输入框,单击登录。
- 复制下方地址,在Chromium网页浏览器打开新页签,粘贴并访问云数据库PolarDB控制台。
https://polardb.console.aliyun.com/
- 在集群列表页面顶部菜单栏中,切换资源所在地域。
说明:您可在云产品资源列表中查看PolarDB资源所在的地域。
- 在集群列表页面,找到您的PolarDB实例,单击实例ID。
说明:您可在云产品资源列表中查看实验室分配的PolarDB实例ID。
- 在基本信息页面的数据库节点区域,您可以查看到两个主节点RW1和RW2的节点地址。
说明:在本实验中,您也可在云产品资源列表中查看到PolarDB两个主节点RW1和RW2的节点地址,方便您复制粘贴进行实验操作。
- 在实验室页面右侧的功能栏中,单击 图标,切换至Web Terminal。
- 在终端1中,单击右上角的 图标,增加两个会话终端。
说明:在三个终端下我们将分别通过脚本连接RW1、RW2节点。
- 在终端1中,执行如下命令,连接RW1节点。
说明:您需要将命令中的<host>改为RW1节点地址。
## 连接串用RW1信息 mysql -h <host> -utest_user -pPassword123 --prompt='mysql@rw1_1 [\d]> ' dbfortest
- 在终端2中,连接RW2节点。
说明:您需要将命令中的<host>改为RW2节点地址。
## 连接信息用RW2信息 mysql -h <host> -utest_user -pPassword123 --prompt='mysql@rw2_1 [\d]> ' dbfortest
- 在终端3中,连接RW2节点。
说明:您需要将命令中的<host>改为RW2节点地址。
dbfortest## 连接信息用 RW2 信息 mysql -h <host> -utest_user -pPassword123 --prompt='mysql@rw2_2 [\d]> ' dbfortest
3. 创建测试数据
本步骤将指导您如何创建测试数据。
在终端1中,执行如下SQL命令,创建测试表t1,并导入基础数据。
DROP TABLE IF EXISTS t1; create table t1 (id int, name varchar(50), primary key (id)) engine = innodb; insert into t1 values (1, 'PolarDB'), (2, 'MySQL'), (3, 'Oracle');
4. 行级读写交叉
本步骤主要测试多个RW节点间事务一致性。
- 在终端1和终端2中,分别执行如下SQL,查看基础数据。
select *from t1;
返回结果如下,您可以看到通过两个节点查到的数据是一致的。
- 终端1连接的RW1节点查询结果:
- 终端2连接的RW2节点查询结果:
- 通过终端1修改数据库中数据表的数据,在终端2中验证多RW节点间事务一致性。
2.1 在终端1中,执行如下SQL,将数据库t1表内ID为1的name字段值更新为PolarDB MM,但不提交事务,然后查询数据表t1。
begin; update t1 set name = 'PolarDB MM' where id = 1; select * from t1;
返回结果如下,您可以看到对应的name字段值已经显示为PolarDB MM。
2.2 在终端2中,执行如下SQL,查询数据表t1。
select * from t1;
返回结果如下,数据库表t1中ID为1的name字段值仍然为PolarDB。
2.3 在终端1中,执行如下SQL,提交update事务。
commit;
2.4 在终端2中,执行如下SQL,重新查询t1表数据。
select *from t1;
返回结果如下,您可以看到数据库表t1中ID为1的name字段值已经展示更新后的结果PolarDB MM。
- 通过终端2修改数据库中数据表的数据,在终端1中验证多RW节点间事务一致性。
3.1 在终端2中,执行如下SQL,将数据库t1表内ID为1的name字段值更新为PolarDB,但不提交事务,然后查询数据表t1。
begin; update t1 set name = 'PolarDB' where id = 1; select * from t1;
返回结果如下,您可以看到对应的name字段值已经显示为PolarDB。
3.2 在终端1中,执行如下SQL,查询数据表t1。
select *from t1;
返回结果如下,数据库表t1中ID为1的name字段值仍然为PolarDB MM。
3.3 在终端2中,执行如下SQL,提交update事务。
commit;
3.4 在终端1中,执行如下SQL,重新查询t1表数据。
select *from t1;
返回结果如下,您可以看到数据库表t1中ID为1的name字段值已经展示更新后的结果PolarDB。
5. 行级写写交叉
本步骤主要测试多个RW节点间事务并发控制,我们可以通过已连接RW2节点的终端3查看线程状态。
- 在终端1中,执行如下update操作,将t1表中ID为1的name字段值修改为PolarDB MM,但不提交事务。
begin; update t1 set name = 'PolarDB MM' where id = 1;
- 在终端2中,执行如下update操作,将t1表中ID为1的name字段值修改为PolarDB RAC,但不提交事务。
begin; set innodb_mm_lock_wait_timeout = 300; update t1 set name = 'PolarDB RAC' where id = 1;
- 在终端3中,执行如下命令,显示正在运行的线程。
show processlist;
返回结果如下,您可以看到终端2(即RW2节点上)提交数据update线程处于阻塞状态。
- 在终端1中,执行如下SQL,提交事务。
commit;
终端1中提交事务后,您可以看到终端2下发的update线程将会继续执行。
- 在终端2中,执行如下SQL,回滚update操作,并清理数据。
rollback; drop table t1;
- 在三个访问终端中,分别执行exit;,退出数据库会话,完成事务透明多写实验。
6. 集群性能扩展性测试
我们分别在不同主节点数量的情况下,使用脚本(读写混合)对数据库计算节点进行压测。然后通过控制台实时查看在不同主节点数量下集群TPS、QPS值的变化趋势。
- 数据准备。
在终端1中,依次执行如下命令,在RW1节点准备数据。
说明:您需要将命令中--mysql-host的参数值改为RW1的节点地址。
## 连接信息用 RW1 信息 sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=<host1> --mysql-port=3306 --mysql-user=test_user --mysql-password=Password123 --mysql-db=dbfortest --db-driver=mysql --tables=32 --table-size=2000000 --time=120 --report-interval=1 --threads=32 --mysql-ignore-errors=1205,1213,8015 --rand-type=uniform --auto-inc=off cleanup sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=<host1> --mysql-port=3306 --mysql-user=test_user --mysql-password=Password123 --mysql-db=dbfortest --db-driver=mysql --tables=32 --table-size=2000000 --time=120 --report-interval=1 --threads=32 --mysql-ignore-errors=1205,1213,8015 --rand-type=uniform --auto-inc=off prepare
- 单节点性能。
2.1 执行如下命令,压测访问RW1单个节点。
说明:您需要将命令中--mysql-host的参数值改为RW1的节点地址。
## 连接信息用 RW1 信息 sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=<host1> --mysql-port=3306 --mysql-user=test_user --mysql-password=Password123 --mysql-db=dbfortest --db-driver=mysql --tables=32 --table-size=2000000 --time=120 --report-interval=1 --threads=32 --mysql-ignore-errors=1205,1213,8015 --rand-type=uniform --auto-inc=off run
2.2 在实验室页面右侧的功能栏中,单击 图标,切换至远程桌面。
2.3 在基本信息页面左侧导航栏中,选择诊断与优化>性能监控。
2.4 在集群页签,您可查看到在不同主节点数量下集群TPS、QPS值的变化趋势。
- 两节点性能。
3.1 在实验室页面右侧的功能栏中,单击 图标,切换至Web Terminal。
3.2 执行如下命令,压测访问 RW1、RW 2 ,2个节点
说明:您需要将命令中--mysql-host的参数值改为RW1和RW2的节点地址。
## 连接信息用 RW1 和 RW2 信息 sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=<host1>,<host2> --mysql-port=3306 --mysql-user=test_user --mysql-password=Password123 --mysql-db=dbfortest --db-driver=mysql --tables=32 --table-size=2000000 --time=120 --report-interval=1 --threads=64 --mysql-ignore-errors=1205,1213,8015 --rand-type=uniform --auto-inc=off run
3.3 在实验室页面右侧的功能栏中,单击 图标,切换至远程桌面。
3.4 在集群页签,刷新页面,您可查看到在不同主节点数量下集群TPS、QPS值的变化趋势。可以发现随着节点数量增加,集群整体的处理能力持续增强。
实验链接:https://developer.aliyun.com/adc/scenario/771842aac4ba4b759bb3620066a7c3b2