当前位置: 首页 > news >正文

mysq集群高可用架构之组复制MGR(单主复制-多主复制)

1.组复制MGR原理

MySQL 组复制分单主模式和多主模式,传统的mysql复制技术仅解决了数据同步的问题,MGR 对属于同一组的服务器自动进行协调。对于要提交的事务,组成员必须就全局事务序列中给定事务的顺序达成一致,提交或回滚事务由每个服务器单独完成,但所有服务器都必须做出相同的决定,如果存在网络分区,导致成员无法达成事先定义的分割策略,则在解决此问题之前系统不会继续进行,直到网络问题解决,这是一种内置的脑裂保护机制。

2.组复制流程

3.组复制单主和多主模式

3.1单主模式

单主模式group组内只有一台节点可读可写,其他节点只可以读。当主服务器宕机时,会自动选择新的主服务器

3.2多主模式

组内所有机器都是primary节点,同时可以进行读写操作,并且数据是最终一致的。

4.实现mysql组复制-单主模式

4.1环境说明

4.2三台主机进行域名解析

#准备好三台虚拟机,部署好mysql#三个主机均需要配置hosts文件的解析
192.168.31.228  master
192.168.31.229  rep1
192.168.31.230  rep2

4.3定位主库master

#定位主master#编辑配置文件
[root@mysql-master ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log_timestamps=SYSTEM
server_id=228         #唯一标识的id
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"       #组复制数据必须存储在InnoDB事务存储引擎
gtid_mode=ON           #组复制要开启gtid 开启gtid模式
enforce_gtid_consistency=ON  #开启强一致性
binlog_format=ROW
transaction_write_set_extraction=XXHASH64       #默认开启,组复制使用此信息在所有组成员上进行冲突检测
plugin_load_add='group_replication.so'      #将组复制插件添加到服务器启动时加载的插件列表中
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"      #告诉插件它正在加入或创建的组名为“aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa”
group_replication_start_on_boot=off       #插件在服务器启动时不自动启动操作,使用手动启动插件
group_replication_local_address="192.168.31.228:33061"      #与其它主机通信时使用的网络地址和端口
group_replication_group_seeds="192.168.31.228:33061,192.168.31.229:33061,192.168.31.230:33061"       #设置组成员的主机名和端口
group_replication_ip_whitelist="192.168.31.0/24,127.0.0.1/8"       #仅允许白名单内的 IP 加入复制组
group_replication_bootstrap_group=off       #指示插件是否启动该组,在首次引导组时在一个服务器上启用
group_replication_recovery_use_ssl=on      #caching_sha2_password插件要求安全传输密码,开启主从之间的连接使用SSL/TLS #启动mysql
[root@mysql-master ~]# /etc/init.d/mysqld restart#进入mysql
[root@mysql-master ~]# mysql -uroot -p123
mysql> set sql_log_bin=0;       #关闭日志
mysql> create user 'andy'@'%' identified by '123';     #创建用于共享的账户并赋权
mysql> grant replication slave on *.* to 'andy'@'%';  
mysql> grant connection_admin on *.* to 'andy'@'%';
mysql> grant backup_admin on *.* to 'andy'@'%';
mysql> grant group_replication_stream on *.* to 'andy'@'%';
mysql> flush privileges;  
mysql> set sql_log_bin=1;      #开启日志
mysql> change replication source to source_user='andy',source_password='123' for channel 'group_replication_recovery';     #明确指定配置的是组复制的恢复通道
mysql> show plugins;     #查看是否有group_replication插件#启动MGR集群
#使用当前服务器作为引导服务器启动一个新的群组复制过程或者恢复一个已经存在的群组
mysql> set global group_replication_bootstrap_group=on;
mysql> start group_replication user='rep',password='123';
mysql> set global group_replication_bootstrap_group=off;#在主上查看组信息
mysql> SELECT * FROM  performance_schema.replication_group_members;

4.4定位从库1rep1

#定位从1rep1#编辑配置文件
[root@mysql-rep1 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log_timestamps=SYSTEM 
server_id=229  #唯一ip
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
gtid_mode=ON
enforce_gtid_consistency=ON
plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address="192.168.31.229:33061"  #本机ip
group_replication_group_seeds="192.168.31.228:33061,192.168.31.229:33061,192.168.31.230:33061"
group_replication_ip_whitelist="192.168.31.0/24,127.0.0.1/8"
group_replication_bootstrap_group=off
group_replication_recovery_use_ssl=on#启动mysql
[root@mysql-rep1 ~]# /etc/init.d/mysqld restart

4.5定位从库2rep2

#定位从2rep2#编辑配置文件
[root@mysql-rep1 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log_timestamps=SYSTEM 
server_id=230  #唯一id
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
gtid_mode=ON
enforce_gtid_consistency=ON
plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address="192.168.31.230:33061"   #本机ip
group_replication_group_seeds="192.168.31.228:33061,192.168.31.229:33061,192.168.31.230:33061"
group_replication_ip_whitelist="192.168.31.0/24,127.0.0.1/8"
group_replication_bootstrap_group=off
group_replication_recovery_use_ssl=on#启动mysql
[root@mysql-rep1 ~]# /etc/init.d/mysqld restart

4.6从1从2进行相同操作创建账户并赋权

mysql> set sql_log_bin=0;
mysql> create user 'andy'@'%' identified by '123';
mysql> grant replication slave on *.* to 'andy'@'%';
mysql> grant connection_admin on *.* to 'andy'@'%';
mysql> grant backup_admin on *.* to 'andy'@'%';
mysql> grant group_replication_stream on *.* to 'andy'@'%';
mysql> flush privileges;
mysql> set sql_log_bin=1;
mysql> change replication source to source_user='andy',source_password='123' for channel 'group_replication_recovery';
mysql> start group_replication user='andy',password='123';
mysql> SELECT * FROM performance_schema.replication_group_members;

4.7.测试

4.7.1定位主库master

mysql> create database test;
mysql> use test
mysql> create table t1(id int primary key,name char(30));  #必须设置主键,不然无法插入数据
mysql> insert into t1 values (1,'xiaoming');#在三个节点均可以查看到新增信息
mysql> select * from test.t1;
+----+----------+
| id | name     |
+----+----------+
|  1 | xiaoming |
+----+----------+
1 row in set (0.00 sec)

4.7.2定位从库

#在从节点测试写入,验证不支持写入操作
mysql> insert into test.t1 values (2,'xiaohong');
ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement

5.实现mysql组复制-多主模式

#修改所有的my.cnf的配置文件,添加如下内容
#关闭单master模式
loose-group_replication_single_primary_mode=off#多主一致性检查
loose-group_replication_enforce_update_everywhere_checks=ON
[root@master mysql]# /etc/init.d/mysqld restart
#在其中一台主机里面执行以下mysql命令
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;#在另外两台主机里面执行以下mysql命令,开启组复制
mysql> START GROUP_REPLICATION;
mysql> SELECT * FROM performance_schema.replication_group_members;
#在三个主机上面分别执行以下三条命令测试是否都可以执行写入操作
mysql> insert test.t1 values (4,'xiaolan');
mysql> insert test.t1 values ('5','xiaozi');
mysql> insert test.t1 values (6,'xiaohei');
mysql> select * from test.t1;
+----+----------+
| id | name     |
+----+----------+
|  1 | xiaoming |
|  3 | xiaohei  |
|  4 | xiaolan  |
|  5 | xiaozi   |
|  6 | xiaohei  |
+----+----------+


文章转载自:

http://sG883B9N.zkfqd.cn
http://uzhe1Fps.zkfqd.cn
http://WOpbOU5J.zkfqd.cn
http://6sEsz3Qn.zkfqd.cn
http://Ahn0tZIa.zkfqd.cn
http://Q9xjo2Bd.zkfqd.cn
http://pXzCCfFg.zkfqd.cn
http://GjANbVbI.zkfqd.cn
http://bDlOAGUv.zkfqd.cn
http://Ba1zntnT.zkfqd.cn
http://li9qXwkA.zkfqd.cn
http://Z3p8SMms.zkfqd.cn
http://IiYekDlP.zkfqd.cn
http://mkctsJHY.zkfqd.cn
http://GxCxCjUW.zkfqd.cn
http://VxrA8Zx9.zkfqd.cn
http://cwSmaJdC.zkfqd.cn
http://8UuqjYzr.zkfqd.cn
http://nj805qfL.zkfqd.cn
http://N0VauGAE.zkfqd.cn
http://eoqbs5wR.zkfqd.cn
http://DmyKpKCg.zkfqd.cn
http://nhYUxhBS.zkfqd.cn
http://1GVKm1jU.zkfqd.cn
http://KdQFiZsf.zkfqd.cn
http://c3d7vNQw.zkfqd.cn
http://02BQ0Vbc.zkfqd.cn
http://WaVH7Q66.zkfqd.cn
http://ObvpzgmG.zkfqd.cn
http://S7SO1Jqj.zkfqd.cn
http://www.dtcms.com/a/369222.html

相关文章:

  • PyInstaller完整指南:将Python程序打包成可执行文件
  • SQL工具30年演进史:从Oracle到Navicat、DBeaver,再到Web原生SQLynx
  • Linux 综合练习
  • 详解iOS应用如何成功上架App Store:从准备到发布与优化
  • 2025.09.05 用队列实现栈 有效的括号 删除字符串中的所有相邻重复项
  • Unity学习----【进阶】Addressables(二)--加载资源与打包及更新
  • 变频器【简易PLC】功能中的时间问题
  • 13问详解VoLTE视频客服:菊风带你从基础到应用,厘清所有疑惑
  • DeepSeek R1大模型微调实战-llama-factory的模型下载与训练
  • Opencv C++ 教程-人脸识别
  • 达梦数据守护集群监视器详解与应用指南
  • Oracle 数据库:视图与索引
  • 如何理解`(line_status = parse_line()) == LINE_OK`?
  • 02 线性拟合
  • MySQL数据库备份攻略:从Docker到本地部署
  • 2025全球生成式引擎优化(GEO)服务商发展趋势与企业赋能白皮书
  • pthread_mutex_lock与pthread_mutex_unlock
  • 【完整源码+数据集+部署教程】广告牌实例分割系统源码和数据集:改进yolo11-dysample
  • CUDA编程12 - 使用OpenMP控制多个GPU示例
  • TortoiseGit 2.4.0.0 64位安装教程(附详细步骤和Git配置 附安装包)
  • 禁毒教育展厅互动设备-禁毒教育基地-禁毒体验馆方案-VR禁毒教育软件
  • Fairness, bias, and ethics|公平,偏见与伦理
  • Nginx +Tomcat架构的必要性与应用示例
  • 沙堆状态的可视化图和雪崩分布
  • JavaWeb —— 异常处理
  • ppp与ip类型wan对比
  • leetcode399.除法求值
  • 电磁波成像(X射线、CT成像)原理简介
  • RikkaHub:安卓原生AI聊天新体验
  • Linux之Ubuntu桌面化操作系统的安装