MySQL组复制技术实现与数据库性能测试工具

测试环境

本文档是在 99Cloud Lab OpenStack 平台虚机上面测试,仅供参考。

系统: CentOS 7.3

虚机: 2 核 4G

版本: MySQL 5.7

技术架构

MySQL Group Replication(简称 MGR)是官方推出的高可用解决方案,原生复制技术,基于插件的方式工作。其中 single primary mode 单主模式只有一个读写,其余都是只读。

multi primary mode多主模式全部可读写

不管组复制单主还是多主的故障切换都无法让应用无感知,需要自主实现,包含以下特性:

  • 复制管理操作更为自动化。
  • 通过 Paxos 协议提供数据库集群节点数据强一致性保证。
  • 多主模式所有节点都可读写操作。
  • 解决网络分区导致的脑裂问题,提升复制数据的可靠性。

一些不足

01、官方引言

 Quite obviously, regardless the mode Group Replication is deployed, it does not handle client-side fail-over. That must be handled by the application itself, connector or a middleware framework such as a proxy or router.

意思就是 MGR 内部没有提供一种机制来实现主节点故障切换对应用的无感知。应用的这种故障无感知需要借助外力实现。

02、组复制的局限

所有涉及的数据都必须发生在 InnoDB 存储引擎的表内。

  • 所有的表必须有明确的主键定义。
  • 网络地址只支持 IPv4。
  • 需要低延迟,高带宽的网络。
  • 目前集群限制最多允许 9 个节点。
  • 必须启用 binlog。
  • binlog 格式必须是 row 格式。
  • 必须打开 gtid 模式。
  • 复制相关信息必须使用表存储。
  • 事务写集合(Transaction write set extraction)必须打开。
  • log slave updates 必须打开。
  • binlog 的 checksum 目前不支持。
  • 由于事务写集合的干扰,无法使用 savepoint。
  • serializable 隔离级别目前不支持。
  • 对同一个对象,在集群中不同的实例上,并行地执行 DDL(哪怕是相互冲突的DDL)是可行的,但会导致数据一致性等方面的错误,目前阶段不支持在多节点同时执行同一对象的 DDL。
  • 外键的级联约束操作目前的实现并不完全支持,不推荐使用。

实验搭建

01、实验环境


主机名


主机地址


组复制端口


mysql01


172.16.200.4


33061


mysql02


172.16.200.6


33062


mysql03


172.16.200.9


33063

02、安装软件

数据库主配文件定义

  1. datadir=/var/lib/mysql
  2. socket=/var/lib/mysql/mysql.sock
  3. report_host = 172.16.200.4
  4. max_connections = 4096
  5. # Disabling symbolic-links is recommended to prevent assorted security risks
  6. symbolic-links=0
  7. log-error=/var/log/mysqld.log
  8. pid-file=/var/run/mysqld/mysqld.pid
  9. server_id=1
  10. gtid_mode=ON
  11. enforce_gtid_consistency=ON
  12. master_info_repository=TABLE
  13. relay_log_info_repository=TABLE
  14. binlog_checksum=NONE
  15. log_slave_updates=ON
  16. log_bin=binlog
  17. binlog_format=ROW
  18. # Group Replication configuration
  19. transaction_write_set_extraction=XXHASH64
  20. loose-group_replication_group_name="09f09aca-2ee4-44f7-b4bb-7d5fe32b52a4"
  21. loose-group_replication_start_on_boot=off
  22. loose-group_replication_local_address= "172.16.200.4:33061"
  23. loose-group_replication_group_seeds= "172.16.200.9:33063,172.16.200.4:33061,172.16.200.6:33062"
  24. loose-group_replication_bootstrap_group= off
  25. #loose-group_replication_single_primary_mode=FALSE
  26. #loose-group_replication_enforce_update_everywhere_checks= TRUE

03、复制授权

进入数据库

  1. mysql> SET SQL_LOG_BIN=0;
  2. mysql> CREATE USER [email protected]‘%‘ IDENTIFIED BY ‘rpl_pass‘;
  3. mysql> GRANT REPLICATION SLAVE ON *.* TO [email protected]‘%‘;
  4. mysql> FLUSH PRIVILEGES;
  5. mysql> SET SQL_LOG_BIN=1;
  6. mysql> CHANGE MASTER TO MASTER_USER=‘rpl_user‘, MASTER_PASSWORD=‘rpl_pass‘      FOR CHANNEL ‘group_replication_recovery‘;

04、启动组复制

安装插件

  1. INSTALL PLUGIN group_replication SONAME ‘group_replication.so‘;

启动复制通道

  1. SET GLOBAL group_replication_bootstrap_group=ON;
  2. START GROUP_REPLICATION;
  3. SET GLOBAL group_replication_bootstrap_group=OFF;

查看集群成员

  1. mysql> SELECT * FROM performance_schema.replication_group_members;

创建测试同步数据

  1. mysql> CREATE DATABASE test;
  2. mysql> USE test;
  3. mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 TEXT NOT NULL);
  4. mysql> INSERT INTO t1 VALUES (1, ‘Luis‘);

检查同步数据和 Binlog

05、加入集群

其余节点加入集群

1)先定义主配文件与主机 hosts

2)建立通道授权

  1. SET SQL_LOG_BIN=0;
  2. CREATE USER [email protected]‘%‘ IDENTIFIED BY ‘rpl_pass‘ ;
  3. GRANT REPLICATION SLAVE ON *.* TO [email protected]‘%‘ IDENTIFIED BY ‘rpl_pass‘;
  4. SET SQL_LOG_BIN=1;
  5. CHANGE MASTER TO MASTER_USER=‘rpl_user‘, MASTER_PASSWORD=‘rpl_pass‘
  6. FOR CHANNEL ‘group_replication_recovery‘;

3)添加插件

  1. mysql>INSTALLPLUGINgroup_replicationSONAME‘group_replication.so‘;

4)启动复制通道

  1. mysql>STARTGROUP_REPLICATION;

5)查看集群成员

  1. mysql>SELECT*FROMperformance_schema.replication_group_members;

06、集群验证

在各个节点都能看到同步的数据,说明集群搭建成功。

查看集群中的主节点

  1. mysql> SELECT VARIABLE_VALUE FROM performance_schema.global_status
  2. WHERE VARIABLE_NAME= ‘group_replication_primary_member‘;

性能测试

01、工具选型

对于 MySQL 压力测试,大多用 sysbench/tpcc-mysql 工具,主要针对数据库 OLTP(在线事务处理)指标。

在编辑 tpcc-mysql 环境时依赖 mysql_config,MySQL 5.7 版本以后 mysql_config 更换为了 pkg--config,明显 tpcc-mysql 跟不上节奏。

本文档性能测试工具选用sysbench 1.0.6

02、工具用法

准备测试数据

 sysbencholtp_read_write.lua --mysql-host=172.16.200.4 --mysql-port=3306 --mysql-db=test --mysql-user=root --mysql-password=MyNewPass4! --table_size=5000 --tables=10 --threads=300 --time=60 --report-interval=10 prepare

开始压测

 sysbencholtp_read_write.lua --mysql-host=172.16.200.4 --mysql-port=3306 --mysql-db=test --mysql-user=root --mysql-password=MyNewPass4! --table_size=5000 --tables=10 --threads=300 --time=60 --report-interval=10 run

清除测试数据

 sysbencholtp_read_write.lua --mysql-host=172.16.200.4 --mysql-port=3306 --mysql-db=test --mysql-user=root --mysql-password=MyNewPass4! --table_size=5000 --tables=10 --threads=300 --time=60 --report-interval=10 cleanup

03、压测 screen view

准备测试数据

集群测试

单机测试

04、测试结果


 


tps


qps


备注


单机


576.86


11617.78


集群(3节点single mode)


263.48


7507.35


单个IP读写


集群(3节点multi mode)


307.19


8343.02


单个IP读写

调研结果

组复制模式配置比异步复制,半同步复制简单便捷,数据同步效率也较高,组复制以插件形式工作。不管组复制单主还是多主的故障切换都无法让应用无感知,需要自主实现。

原文地址:https://www.cnblogs.com/syncnavigator/p/10198349.html

时间: 2024-10-17 06:09:18

MySQL组复制技术实现与数据库性能测试工具的相关文章

sysbench 数据库性能测试工具的使用

sysbench 数据库性能测试 Mac上安装sysbench测试工具 brew install sysbench 测试sysbench 是否安装成功 //执行这条指令 sysbench cpu --cpu-max-prime=10000 run sysbench 1.0.17 (using bundled LuaJIT 2.1.0-beta2) Running the test with following options: Number of threads: 1 Initializing

Oracle数据库性能测试工具:Swingbench部署实录

[[email protected] ~]# su - oracle [[email protected] ~]$ sqlplus / as sysdba SQL> create tablespace soe     datafile '/u01/app/oracle/oradata/king/soe01.dbf'     size 4096M     extent management local     uniform size 1M; [[email protected] ~]$ unzi

MySQL组复制(1):组复制技术简介

1.MySQL高可用的背景 数据库的主从复制是一个很实用的功能,但如何保证它的高可用却是一件难事.实现MySQL主从复制高可用的工具,常见的有: (1).MMM:淘汰了,在一致性和高并发稳定性等方面有些问题. (2).MHA:有些人还在用,但也有些问题,也是趋于淘汰的MySQL主从高可用方案. (3).Galera:引领时代的主从复制高可用技术. (4).MariaDB Galera Cluster:MariaDB对Galera的实现. (5).PXC:Percona XtraDB Cluste

数据库性能测试:sysbench用法详解

1.简介和安装 sysbench是一个很不错的数据库性能测试工具. 官方站点:https://github.com/akopytov/sysbench/ rpm包下载:https://packagecloud.io/akopytov/sysbench/packages/el/7/sysbench-1.0.15-1.el7.centos.x86_64.rpm 源码包下载:https://github.com/akopytov/sysbench/archive/1.0.15.tar.gz 如果是编译

Mysql多线程性能测试工具sysbench 安装、使用和测试

From:http://www.cnblogs.com/zhoujinyi/archive/2013/04/19/3029134.html 摘要:      sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有MySQL.Oracle和PostgreSQL.当前功能允许测试的系统参数有: file I/O performance (文件I / O性能) scheduler performance (调

Mysql 性能测试工具 sysbench的安装和使用

工作上需要用到AWS和Azure的Mysql服务,需要测试比较一下两个云服务的性能.于是开始百度 + google,查找性能测试工具.最终决定用sysbench. sysbench介绍 sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试. 数据库目前支持MySQL/Oracle/PostgreSQL.本文只是简单演示一下几种测试的用法,后续准备利用sysbench来对MySQL进行一系列的测试.具体的一些参数设置,需要根据不同的测试要求来进行

MySQL性能测试工具sysbench的安装和使用

sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有MySQL.Oracle和PostgreSQL.当前功能允许测试的系统参数有: file I/O performance (文件I / O性能) scheduler performance (调度性能) memory allocation and transfer speed (内存分配和传输速度) POSIX threads implementat

MySQL Study之--Mysql数据库备份工具(mysqldump)

MySQL Study之--Mysql数据库备份工具(mysqldump) 对于Mysql Database的备份方式有很多种,此次文档主要介绍mysqldump工具: mysqldump:      mysqldump工具很多方面类似相反作用的工具mysqlimport.它们有一些同样的选项.但mysqldump能够做更多的事情.它可以把整个数据库装载到一个单独的文本文件中.这个文件包含有所有重建您的数据库所需要的SQL命令.这个命令取得所有的模式(Schema,后面有解释)并且将其转换成DD

华信Mysql数据库修复工具

好吧,我承认我怂了. 今天在在用laravel框架写一个文件上传的部分.发现路径始终配不对.但是最终还是解决了. 下面我分享一下自己的学习体会吧. 客户端 <form method="POST" action="" enctype="muitipart/form-data"> <input type="file" name="myfile" /> <input type=&qu