MySQL集群技术 4.高可用之组复制 (MGR)

MGR简介

MySQL Group Replication(简称 MGR )是 MySQL 官方于 2016 年 12 月推出的一个全新的高可用与高扩 展的解决方案

组复制是 MySQL 5.7.17 版本出现的新特性,它提供了高可用、高扩展、高可靠的 MySQL 集群服务

MySQL 组复制分单主模式和多主模式,传统的 mysql 复制技术仅解决了数据同步的问题,

MGR 对属于同一组的服务器自动进行协调。对于要提交的事务,组成员必须就全局事务序列中给定事务 的顺序达成一致

提交或回滚事务由每个服务器单独完成,但所有服务器都必须做出相同的决定

如果存在网络分区,导致成员无法达成事先定义的分割策略,则在解决此问题之前系统不会继续进行, 这是一种内置的自动裂脑保护机制

MGR 由组通信系统( Group Communication System,GCS ) 协议支持

该系统提供故障检测机制、组成员服务以及安全且有序的消息传递

组复制流程

首先我们将多个节点共同组成一个复制组,在执行读写(RW)事务的时候,需要通过一致性协议层 (Consensus 层)的同意,也就是读写事务想要进行提交,必须要经过组里"大多数人"(对应 Node 节 点)的同意,大多数指的是同意的节点数量需要大于 (N/2+1),这样才可以进行提交,而不是原发起 方一个说了算。而针对只读(RO)事务则不需要经过组内同意,直接 提交 即可

注意:节点数量不能超过 9 台,最少需要3台

组复制单主和多主模式

single-primary mode(单写或单主模式)

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

multi-primary mode(多写或多主模式)

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

手动还原方式

cpp 复制代码
[root@mysql ~]# systemctl stop mysqld.service
[root@mysql ~]# rm -rf /data/mysql/*
[root@mysql ~]# vim /etc/my.cnf
#不同主机server-id一定要根据实际情况做相应改变
server-id=10|20|30
#加入以上内容


[root@mysql ~]# mysqld --initialize --user=mysql

#设置所有mysql节点的解析

cpp 复制代码
[root@mysql-node1 ~]# cat > /etc/hosts <<EOF
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.10     mysql-node1
172.25.254.20     mysql-node2
172.25.254.30     mysql-node3
cpp 复制代码
[root@mysql-node1 ~]# vim   /etc/my.cnf 
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="172.25.254.10:33061"   #其他两台主机一定要根据ip进行修改
group_replication_group_seeds="172.25.254.10:33061,172.25.254.20:33061,172.25.254.30:33061"
group_replication_bootstrap_group=off
group_replication_single_primary_mode=OFF

#加入以上内容,之前的内容不要删除

#配置组复制-在首台主机中

cpp 复制代码
[root@mysql ~]# systemctl restart mysqld.service
[root@mysql ~]# mysql -uroot -p'3QTXag.ZxJqP'  #登录数据库,密码
#在mysqld --user=mysql --initialize 这个命令随机生成
mysql> alter user root@localhost identified by '123';
Query OK, 0 rows affected (0.01 sec)

mysql> SET SQL_LOG_BIN=0;
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE USER rpl_user@'%' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT CONNECTION_ADMIN ON *.* TO rpl_user@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT GROUP_REPLICATION_STREAM ON *.* TO rpl_user@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> SET SQL_LOG_BIN=1;
Query OK, 0 rows affected (0.00 sec)

mysql> CHANGE REPLICATION SOURCE TO SOURCE_USER='rpl_user', SOURCE_PASSWORD='123' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> show PLUGINS;
| group_replication               | ACTIVE   | GROUP REPLICATION  | group_replication.so | GPL     |
cpp 复制代码
mysql> SET GLOBAL group_replication_bootstrap_group=ON;
Query OK, 0 rows affected (0.00 sec)

mysql>  START GROUP_REPLICATION USER='rpl_user', PASSWORD='123';
Query OK, 0 rows affected (1.08 sec)

mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM performance_schema.replication_group_members;

#配置组复制在其余mysql-2 . mysql-3 主机中

cpp 复制代码
root@mysql-2 ~]# systemctl restart mysqld.service
[root@mysql-2 ~]# mysql -uroot -p'1p6hw1i8FG-9'
mysql> alter user root@localhost identified   by '123';
Query OK, 0 rows affected (0.01 sec)

mysql> SET SQL_LOG_BIN=0;
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE USER rpl_user@'%' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.02 sec)

mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT CONNECTION_ADMIN ON *.* TO rpl_user@'%';
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT GROUP_REPLICATION_STREAM ON *.* TO rpl_user@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> SET SQL_LOG_BIN=1;
Query OK, 0 rows affected (0.00 sec)

mysql> CHANGE REPLICATION SOURCE TO SOURCE_USER='rpl_user',SOURCE_PASSWORD='123' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> START GROUP_REPLICATION USER='rpl_user', PASSWORD='123';
ERROR 3092 (HY000): The server is not configured properly to be an active member of the group. Please see more details on error log.
mysql> reset master;
Query OK, 0 rows affected, 1 warning (0.02 sec)

mysql> START GROUP_REPLICATION USER='rpl_user', PASSWORD='123';
Query OK, 0 rows affected (9.22 sec)

mysql> SELECT * FROM performance_schema.replication_group_members;
mysql> alter user root@localhost identified   by '123';
Query OK, 0 rows affected (0.00 sec)

测试

cpp 复制代码
#在mysql-3 中建立xiao 这个表
mysql> create database xiao;
Query OK, 1 row affected (0.01 sec)

#在mysql-1 中是否有xiao这个表,有的话就成功了。
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| xiao               |
+--------------------+

#主要是能够再三个主机上写入并读取就行,因为我们前面的实验都是在10主机上写入,其他主机上只能读取,这个实验的话就可以在所有主机都能够写入与读取操作!!!

相关推荐
mmsx9 小时前
osmdroid 屏幕坐标与测量坐标互转:中心点+比例尺仿射换算
android·源码·地图·osmdroid
00后程序员张9 小时前
Android证书绑定抓包失败?Android SSL Pinning绕过实战指南
android·网络协议·计算机网络·网络安全·adb·https·ssl
杉氧10 小时前
页面栈与路由:React Navigation 与 Expo Router 深度实践
android·前端·react native
XiaoLeisj10 小时前
Jetpack Compose 知识点
android·kotlin·android jetpack·compose
又见情义11 小时前
RK3568 Android 13开机时间优化-系统应用裁剪实践
android
hunterandroid12 小时前
Android 内存泄漏排查实战:从 LeakCanary 报警到根因定位
android·前端
我命由我1234512 小时前
Android 设备的日志缓冲区被写满,logcat: Unexpected EOF!
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
171320330计算机毕设编程12 小时前
基于SpringBoot的在线拍卖系统
android·java·spring boot·小程序·课程设计
用户09340777351412 小时前
HarmonyOS WPS Open SDK 实践:OpenFileRequest 打开链路与沙箱拷贝
android·typescript·harmonyos
0xBADCODE12 小时前
动态DEX加载+反射+DES硬编码密钥:安卓三层逆向实战
android·java·python·安全·网络安全·逆向·ctf