Group Replication测试报告

来源:互联网 发布:section软件最新版 编辑:程序博客网 时间:2024/06/09 17:57

Group Replication测试报告

 

1 组网环境

局域网4台redhat

ip:192.168.1.181,192.168.1.182,192.168.1.211,192.168.1.212

其中181,182,是一台服务器虚拟出来的

211,212是另外一台服务器虚拟出来的

2个服务器通过网线连接

181,182硬件信息:

CPU(s)~2 Dual core Intel Xeon E5-2620 v4s(-HT-SMP-) speed~2096 MHz (max) Kernel~3.10.0-514.el7.x86_64 x86_64

Mem~486.1/5807.1MB

HDD~268.4GB(4.0% used)

211.212硬件信息:

CPU~Dual core Intel Xeon E5-2603 v3(-HT-MCP-) speed~1596 MHz (max) Kernel~3.10.0-327.el7.x86_64 x86_64

Mem~404.0/7823.7MB

HDD~107.4GB(9.7% used)

 

数据库版本mysql 5.7.19

测试软件使用sysbench1.0.6

安装yum -yinstall sysbench

 

 

2 集群初始化

当前在试验环境中采用4台 mysql5.7.19 数据库组成 MGR 如下图所示:

初始化mgr

3 测试项目

3.1测试mgr单点写入

测试目的:单点写入,查看其它节点数据是否实时同步成功

试验步骤:

3.1.1 创库同步试验

登录181

ssh root@192.168.1.181

写入数据

mysql -uroot –p

create database test;

查看

show databases;


结论:单节点创建库,集群其它节点可以实时同步该库

3.1.2 建表同步

登录181

use test

create table t1 (id int);

insert into t1 value (1);


错误警示:测试证明集群创建的表必须有主键才可以插入数据

drop table t1;

create table t1 (id int primary key);

insert into t1 value (1);

select * from t1;


测试结论:

通过上述操作,集群可以正常同步创建的表,正常同步某节点发起删除的表,以及表内所有数据。

3.1.3测试读写性能

3.1.3.1 对单机mysql压力测试(相对于集群参考值)

登录182

ssh root@192.168.1.182

将182 设置成单机版mysql不开启binlog

连接mysql

mysql -uroot -p

创建测试库

create database test;

 

1 单台纯写测试

sysbench --test=/usr/share/sysbench/oltp_write_only.lua--mysql-host=192.168.1.182 --mysql-port=3306--mysql-user=root --mysql-password=root --mysql-db=test --report-interval=5--time=100 --threads=130 --tables=1 --table-size=50000 --db-driver=mysql prepare

sysbench --test=/usr/share/sysbench/oltp_write_only.lua--mysql-host=192.168.1.182 --mysql-port=3306--mysql-user=root --mysql-password=root --mysql-db=test --report-interval=5--time=100 --threads=130 --tables=1 --table-size=50000 --db-driver=mysql run

测试报告

transactions:(事物提交)                       295078 (2949.67 persec.)

queries:  (查询)                           1787027 (17863.54per sec.)

 

2 单台纯读测试

sysbench --test=/usr/share/sysbench/oltp_read_only.lua--mysql-host=192.168.1.182 --mysql-port=3306--mysql-user=root --mysql-password=root --mysql-db=test --report-interval=5--time=100 --threads=130 --tables=1 --table-size=50000 --db-driver=mysql run

报告如下

transactions:                        201933 (2018.29 persec.)

queries:                             3230928 (32292.65 persec.)

 

3 单台读写混合测试

sysbench --test=/usr/share/sysbench/oltp_read_write.lua--mysql-host=192.168.1.182 --mysql-port=3306--mysql-user=root --mysql-password=root --mysql-db=test --report-interval=5--time=100 --threads=130 --tables=1 --table-size=50000 --db-driver=mysql run

报告如下

transactions:                        121994 (1219.35 persec.)

queries:                             2487937 (24867.34 persec.)

 

4单台mysql启动binlog后测试

纯写

transactions:                        33008  (325.67 per sec.)

queries:                             207706 (2049.33per sec.)

纯读

transactions:                        200440 (2003.56 persec.)

queries:                             3207040 (32056.96per sec.)

读写

transactions:                        37180  (368.63 per sec.)

queries:                             822870 (8158.45per sec.)


结论:由于开启binlog使得写入性能有所下降,读取性能浮动不大,影响因素主要是硬盘写入速度,本硬盘测试为40.7 MB/秒

3.2对MGR集群压力测试

3.2.1 集群状态查看

登录181

ssh root@192.168.1.181

连接mysql

mysql -uroot -p

创建测试库

create database test;

此时4台机器同时在线

SELECT * FROMperformance_schema.replication_group_members;

 

3.2.2纯写测试

sysbench --test=/usr/share/sysbench/oltp_write_only.lua--mysql-host=192.168.1.181 --mysql-port=3306--mysql-user=root --mysql-password=root --mysql-db=test --report-interval=5--time=100 --threads=130 --tables=1 --table-size=50000 --db-driver=mysql prepare

sysbench --test=/usr/share/sysbench/oltp_write_only.lua--mysql-host=192.168.1.181 --mysql-port=3306--mysql-user=root --mysql-password=root --mysql-db=test --report-interval=5--time=100 --threads=130 --tables=1 --table-size=50000 --db-driver=mysql run

报告如下

transactions:                        14941  (146.52 per sec.)

queries:                             96092  (942.31 per sec.)

 

3.2.3纯读测试

sysbench --test=/usr/share/sysbench/oltp_read_only.lua--mysql-host=192.168.1.181 --mysql-port=3306--mysql-user=root --mysql-password=root --mysql-db=test --report-interval=5--time=100 --threads=130 --tables=1 --table-size=50000 --db-driver=mysql run

报告如下

transactions:                        206963 (2068.62 persec.)

queries:                             3311408 (33097.92 persec.)

3.2.4 读写测试

sysbench --test=/usr/share/sysbench/oltp_read_write.lua--mysql-host=192.168.1.181 --mysql-port=3306--mysql-user=root --mysql-password=root --mysql-db=test --report-interval=5--time=100 --threads=130 --tables=1 --table-size=50000 --db-driver=mysql run

报告如下

transactions:                        18654  (181.73 per sec.)

queries:                             412869 (4022.24per sec.)


压力测试后发现同机器虚拟出来的182产生大量延迟,同一个服务器上binlog日志的写入读取造成io阻塞,从而产生延迟

我们将182剔除mgr集群

重新测试

stop group_replication;


纯写测试

transactions:                        36277  (360.42 per sec.)

queries:                             228208 (2267.30per sec.)

transactions:                        202432 (2023.43 persec.)

queries:                             3238912 (32374.89per sec.)

读写

transactions:                        33293  (330.87 per sec.)

queries:                             739513 (7349.46per sec.)

3.3故障节点恢复并入运行集群测试

此时181,211,212正常运行并有数据产生,182当前属于故障节点(之前已剔除)

此时,182此时落后,并且不能自动加入集群


手动处理方法:

stop group_replication;

reset master;

SET @@GLOBAL.GTID_PURGED='aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-12:1000005-1103191';

start group_replication;

此时可以顺利并入mgr集群

SELECT * FROMperformance_schema.replication_group_members;


结论:测试证明出现节点错误无法并入集群,需要手动处理

MGR才会正常运行

3.4测试mgr断线后重连

试验环境内,手动断开网线,此时 集群状态如下,其中 211,212状态显示无法连接


登录181

use test;

建表

create table t1 (id int primary key);

提示错误如下


“成员组中的多数成员失去了联系。在网络恢复之前,事务将阻塞。作为group_replication_unreachable_majority_timeout价值0的插件将无限期地等待网络得到恢复。”

官网描述此问题:

对等集群网络掉线,如果没有配置group_replication_unreachable_majority_timeout

会等待对方恢复网络,并阻塞写入数据,如果配置了则会进入只读状态

不对等集群5台掉了2台,此时多数的机器群为可写入,少数机器群的状态为只读

配置group_replication_unreachable_majority_timeout重新测试

测试结果显示

ERROR 1290 (HY000): The MySQL server isrunning with the --super-read-only option so it cannot execute this statement

结果是4台机器直接进入只读error状态所以实际应用不需要要配置这个参数

 

结论:测试证明结果MGR需要主机房机器数量大于备机房

3.5测试单点断线后重连

登录211

断开网络连接

service network stop


此时集群显示只有3台,211已经被剔除

从181上建立数据库建表插入数据

create database test;

use test;

create table t1(id int primary key)

insert into t1 value(1);

182,212上可以看到数据

select * from test.t1;


然后恢复211连接

servicenetwork start

登录mysql

mysql-uroot -p

此时状态error

手动恢复mgr

stopgroup_replication;

startgroup_replication;

查看数据


结论:测试证明网络断开的情况下需要手动输入命令启动MGR数据会自动恢复

 

3.6测试mgr节点宕机后重启

1主节点宕机

登录181

关闭mysql

service mysqld stop

其他节点继续插入数据

insert ti value (2);

重启mysql

service mysqld start

由于配置自动启动mgr参数

loose-group_replication_start_on_boot=on

所以在mysql启动的时候mgr会自动恢复数据

2 备节点宕机

登录211

service mysqld stop

其他节点继续插入数据

insert ti value (2);

恢复mgr

service mysqld start

 

结论:测试证明单节点宕机情况下数据可以自动恢复

 

3.7测试表结构发生变化,增加表,删除表

登录181

我们直接导入其他服务器ims数据表跟数据

创建数据库

mysql>create database sx_ims;

使用工具导入

mysqldump sx_ims -uroot -proot  -h192.168.1.183--set-gtid-purged=OFF --add-drop-table | mysql sx_ims -u root -proot


可以看到节点都同步了ims数据库

增加索引

mysql> altertable taxpayer_base_info add index(taxpayer_code);

在其他节点可以查看到表结构同步

删除表

mysql> drop table taxpayer_base_info;

在其他节点可以查看到表删除同步

增加表

mysql> create table taxpayer_base_info ( id int primary key) ;

在其他节点可以查看到表增加同步

 

结论:测试证明MGR可以表同步数据同步

3.8测试大数据量恢复

登录211

service mysqld stop

登录181

使用sysbench插入大量测试数据

sysbench --test=/usr/share/sysbench/oltp_write_only.lua--mysql-host=192.168.1.181 --mysql-port=3306--mysql-user=root --mysql-password=root --mysql-db=test --report-interval=5 --time=400--threads=130 --tables=1 --table-size=50000 --db-driver=mysql run

重启mysql

service mysqld start



结论:测试证明MGR可以完成自动回写任务

 

3.9主机房断网,备机房切换

现在测试环境加入1台模拟真实环境,备机房181,182主机房211,212,213

断开网线,此时主机房211,212,213可以继续写入办理正常业务

3.9.1正常网络断开

登录211

新建数据库新建表插入数据删除数据删除表

create database test;

use test;

create table t2 (id int primary key);

insert into t2 value (1);

select * from t2;



delete from t2;

drop table t2;

drop database test;

可以看到212,213能够正常同步数据

接通网络,可以看到181,182状态错误


此时手动恢复

stop group_replication;

start group_replication;

可以看到数据正常同步过来


结论:正常业务在主机房进行的时候与备机房断开连接,只需要在网络恢复的时候将备机房机器并入集群即可