全局一致性(高性能模式)测试工具和方法

本文介绍如何通过mysqlsct工具来测试PolarDB MySQL版的全局一致性(高性能模式)功能。

测试工具

开源的mysqlsct工具可用于检验数据库集群的全局一致性(高性能模式)能力,该工具通过跨Session的写入、读取和结果对比的方式来测试数据库全局一致性(高性能模式)功能和性能。

测试环境

  • 测试的ECS和PolarDB MySQL版均在同一地域、同一可用区。

  • 网络类型均为VPC网络。

    说明

    ECS实例和PolarDB MySQL版需保证在同一个VPC中。

  • 测试用的PolarDB MySQL版如下:

    • 节点规格为polar.mysql.x8.4xlarge(8核32 GB独享规格)。

    • 两节点集群(一主一只读)。

    • 使用的连接串为集群地址,如何查看PolarDB MySQL版地址请参见管理连接地址

  • 测试用的ECS实例信息如下:

    • 实例规格为ecs.g7.2xlarge。

    • 实例所使用的镜像为CentOS 7.9 64位。

安装mysqlsct

重要

本文档中的命令只能由root权限的用户来执行。

  1. 在ECS中执行如下命令安装mysqlsct的编译依赖工具。

    yum install gcc gcc-c++ cmake3 mariadb-devel.x86_64 -y
  2. 安装git。

    yum install git -y
  3. 下载mysqlsct工具代码。

    git clone https://github.com/sunashe/mysqlsct.git
  4. 编译mysqlsct工具。

    cd mysqlsct
    cmake3 .
    make

    编译完成后会在当前目录下生成可执行的二进制文件mysqlsct。如下:

    ll
    总用量 176
    -rw-r--r-- 1 user user 13821 9月  14 09:57 CMakeCache.txt
    drwxr-xr-x 5 user user  4096 9月  14 09:57 CMakeFiles
    -rw-r--r-- 1 user user  1488 9月  14 09:57 cmake_install.cmake
    -rw-r--r-- 1 user user   300 9月  14 09:56 CMakeLists.txt
    -rw-r--r-- 1 user user 34523 9月  14 09:56 LICENSE
    -rw-r--r-- 1 user user  5170 9月  14 09:57 Makefile
    -rwxr-xr-x 1 user user 78232 9月  14 09:57 mysqlsct   #可执行的二进制文件mysqlsct
    -rw-r--r-- 1 user user 18138 9月  14 09:56 mysqlsct.cc
    -rw-r--r-- 1 user user  2456 9月  14 09:56 README.md

测试方法

  1. 设置PolarDB MySQL版集群地址的一致性级别。具体操作请参见配置数据库代理

    对于全局一致性(高性能模式),需要先在控制台上将集群地址的一致性级别设置为最终一致性(弱),然后再开启全局一致性(高性能模式)

  2. 在ECS上的mysqlsct目录下,执行如下命令来进行一致性测试。

    ./mysqlsct
    --host-rw=pc-**********.rwlb.rds.aliyuncs.com   //测试环境中PolarDB MySQL版的集群地址。host-rw与host-ro的集群地址相同。
    --host-ro=pc-**********.rwlb.rds.aliyuncs.com   //测试环境中PolarDB MySQL版的集群地址。host-ro与host-rw的集群地址相同。
    --port-rw=3306  //测试环境中PolarDB MySQL版的集群地址端口
    --port-ro=3306  //测试环境中PolarDB MySQL版的集群地址端口
    --user=******   //PolarDB MySQL版的集群测试账号
    --password=******  //PolarDB MySQL版的集群测试密码
    --iterations=1000000  //测试总次数(一次update+一次select为一次测试)
    --table-cnt=100  //测试表数量
    --table-size=1000  //测试表行数
    --concurrency=100  //测试并发线程数
    --database=sct  //测试数据库
    --sc-gap-us=0  //update和select之间的休眠时间, 0表示update后立刻发起查询
    --report-interval=5  //打印日志间隔
    --detail-log=0  //不输出详细错误日志

测试结果

  • 最终一致性测试结果最终一致性测试结果

    从上图中的最终一致性测试结果可以看出,最终一致性并不能保证写后读的数据一致性。

  • 会话一致性测试结果会话一致性测试

    从上图中的会话一致性测试结果可以看出,会话一致性并不能保证跨Session的强一致性。

  • 全局一致性测试结果全局一致性测试

    从上图中的全局一致性测试结果可以看出,全局一致性可以保证跨Session的强一致性。

  • 全局一致性(高性能模式)测试结果SCC测试

    从上图中的全局一致性(高性能模式)测试结果可以看出,全局一致性(高性能模式)可以保证跨Session的强一致性。