Mysql 组复制&&半同步复制性能测试

叶槟杰
   mysql在5.7.17版本中发布了组复制功能,组复制基本上是通过Paxos协议协调集群各个节点进行通讯,同时还需要检查各个节点是否写冲突,从理论上来讲比半同步复制复杂,所以性能应该比较差。不过以上只是推测,数据库集群是个复杂的系统,影响性能的因素比较多,为了得出准确的结论DBA内部对这两种mysql复制集群进行了压力测试。

我们在IDC物理机上部署了3节点的GR 和1主2从节点的半同步复制。

首先看下主机配置:

3台主机配置完全一样
Release | CentOS release 6.7 (Final)
Kernel | 2.6.32-573.el6.x86_64
cpu 48xIntel(R) Xeon(R) CPU E5-2670 v3 @ 2.30GHz
内存 966.3M bond0 2000Mb/s Full
磁盘 SSD

mysql版本:
节点使用的是相同的版本 Server version: 5.7.18-15-log Percona Server (GPL), Release 15, Revision bff2cd9

压测工具:

性能基准测试采用大家所熟知的sysbench工具,Oracle官方的MGR测试也是使用了此工具。

mysql节点配置:

每个节点基本的配置参数都一致

  • innodbbufferpool_size = 48G
  • innodbflushlogattrx_commit = 1
  • sync_binlog = 1
  • slaveparalleltype = LOGICAL_CLOCK
  • slaveparallelworkers = 16

组复制参数(可变)

  • groupreplicationcompression_threshold=100
  • groupreplicationflowcontrolmode=DISABLED

半同步复制参数(可变)

  • looserplsemisyncmasterwaitpoint = AFTER_COMMIT
  • looserplsemisyncmasterwaitforslavecount = 1

压测量:

数据量:1000w行记录,size2Gb

并发数:200

压测过程(只是粗略的描述,每个测试项都需要重启集群过程略去):

load数据:
sysbench oltpreadwrite.lua --mysql-host=10.10.10.34 --mysql-port=3306 --mysql-db=db1 \
--mysql-user=dbamgr --mysql-password=De0ca71106a4e4d1 \ --table_size=10000000 --tables=1 --threads=200 --time=900 --report-interval=10 prepare

压测:

sysbench oltpreadwrite.lua --mysql-host=10.10.10.34 --mysql-port=3306 --mysql-db=db1 \
--mysql-user=dbamgr --mysql-password=De0ca71106a4e4d1 \ --table_size=10000000 --tables=1 --threads=200 --time=900 --report-interval=10 run

清理数据:

sysbench oltpreadwrite.lua --mysql-host=10.10.10.34 --mysql-port=3306 --mysql-db=db1 \
--mysql-user=dbamgr --mysql-password=De0ca71106a4e4d1 \ --table_size=10000000 --tables=1 --threads=200 --time=900 --report-interval=10 cleanup

重启mysql节点

测试结果:

    结果对比: Group Replication的QPS比Semi-sync高,特别是在写多的场景下非常明显;最短的响应时间,Group Replication都比Semi-sync要大,因为Group Replication要多进行一次通讯,所以最短的响应时间长。但平均响应时间,Group Replication比Semi-sync要短;这个网传是由于GR的网络通信效率远比Semi-sync的模式高,这个还无法证实。同时我们在测试的过程中也发现 ,两个从节点主机IOPS使用量比较高,超过主节点。

注意:上述测试使用的GR模式为Single-Primary Mode,即写入在单个结点,这也是MGR默认的配置。