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

【稿件】MySQL 当前存在的三种复制模式有:异步模式、半同步模式和组复制模式。本次主要调研 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 rpl_user@'%' IDENTIFIED BY 'rpl_pass'; 
  3. mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%'; 
  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 rpl_user@'%' IDENTIFIED BY 'rpl_pass' ; 
  3. GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%' 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://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html

集群安装:https://dev.mysql.com/doc/refman/5.7/en/group-replication-deploying-in-single-primary-mode.html

【原创稿件,合作站点转载请注明原文作者和出处为.com】

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/306115.html<

(0)
管理的头像管理
上一篇2025-05-26 12:22
下一篇 2025-05-26 12:24

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注