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

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://www.xdnf.cn/news/20133.html

相关文章:

  • 2025 年 8 个最佳网站内容管理系统(CMS)
  • 小迪安全v2023学习笔记(七十八讲)—— 数据库安全RedisCouchDBH2database未授权CVE
  • LeetCode 刷题【65. 有效数字】
  • 机器学习算法介绍二
  • postgresql 通过dblink实现 跨库查询
  • PostgreSQL收集pg_stat_activity记录的shell工具pg_collect_pgsa
  • zoho crm notes add customer fields
  • 数字人打断对话的逻辑
  • 本地 Ai 离线视频去水印字幕!支持字幕、动静态水印去除!
  • python-虚拟试衣
  • LVS、Nginx与HAProxy负载均衡技术对比介绍
  • 任意齿形的齿轮和齿条相互包络工具
  • Linux常见命令总结 合集二:基本命令、目录操作命令、文件操作命令、压缩文件操作、查找命令、权限命令、其他命令
  • Process Explorer 学习笔记(第三章3.2.5):状态栏信息详解
  • PyTorch 训练显存越跑越涨:隐式保留计算图导致 OOM
  • 机器学习周报十二
  • 基于Echarts+HTML5可视化数据大屏展示-旅游智慧中心
  • CC-Link IE FB 转 DeviceNet 实现欧姆龙 PLC 与松下机器人在 SMT 生产线锡膏印刷环节的精准定位控制
  • docker 安装kafaka常用版本
  • 错误波形曲线
  • Qt信号与槽机制全面解析
  • Redis 事务:餐厅后厨的 “批量订单处理” 流程
  • 两条平面直线之间通过三次多项式曲线进行过渡的方法介绍
  • 雅菲奥朗SRE知识墙分享(七):『可观测性的定义与实践』
  • C++两个字符串的结合
  • 本地 Docker 环境 Solr 配置 SSL 证书
  • SQL与数据库笔记
  • Windows搭建WebDAV+Raidrive,实现磁盘映射
  • CentOS安装或升级protoc
  • 【学习笔记】解决 JWT 解析报错:Claims claims = JwtUtil.parseJWT(...) Error Code 401(token过期)