MySQL集群高可用架构---mysql高可用之组复制 (MGR)

单主模式:

准备环境三台机器配置好MySQL

|--------|---------------|----------------------------|
| 主机名 | IP | mysql版本 |
| master | 192.168.1.121 | 8.0.40 Source distribution |
| rep1 | 192.168.1.122 | 8.0.40 Source distribution |
| rep2 | 192.168.1.123 | 8.0.40 Source distribution |

  • 配置好三台机器的域名解析

    vim /etc/hosts

配置主机器master:

首先配置好主的配置文件

复制代码
[mysqld]
log_timestamps=SYSTEM
server_id=121
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
gtid_mode=ON
enforce_gtid_consistency=ON
log_bin=binlog
log_slave_updates=ON
binlog_format=ROW
transaction_write_set_extraction=XXHASH64
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.1.121:33061"
group_replication_group_seeds= "master:33061,rep1:33061,rep2:33061"
group_replication_bootstrap_group=off
group_replication_ip_whitelist="192.168.1.0/24,127.0.0.1/8"
group_replication_recovery_use_ssl=on
  • disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY" #组复制,数据必须存储在 InnoDB 事务存储引擎中
  • 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.168.128:33061" #与其它主机通信时使用的网络地址和端口
  • group_replication_group_seeds= "s1:33061,s2:33061,s3:33061" #设置组成员的主机名和端口
  • group_replication_bootstrap_group=off #指示插件是否启动该组,在首次引导组时在一个服务器上启用
  • group_replication_ip_whitelist="192.168.168.0/24,127.0.0.1/8" #仅允许白名单内的 IP 加入复制组
  • group_replication_recovery_use_ssl=on #caching_sha2_password插件要求安全传输密码,开启主从之间的连接使用SSL/TLS

重启MySQL

sql 复制代码
/etc/init.d/mysqld restart

登录数据库对主进行一下配置:

在主的数据库中使用sql语句添加复制账号并授予权限,从上面也需要设置一样的账号

创建用户并授予权限

sql 复制代码
SET SQL_LOG_BIN=0;
CREATE USER rp@'%' IDENTIFIED BY '123';
GRANT REPLICATION SLAVE ON *.* TO rp@'%';
GRANT CONNECTION_ADMIN ON *.* TO rp@'%';
GRANT BACKUP_ADMIN ON *.* TO rp@'%';
GRANT GROUP_REPLICATION_STREAM ON *.* TO rp@'%';
FLUSH PRIVILEGES; 刷新权限
SET SQL_LOG_BIN=1;
CHANGE REPLICATION SOURCE TO SOURCE_USER='rp', SOURCE_PASSWORD='123' FOR CHANNEL 'group_replication_recovery';

启动MGR集群---------使用当前服务器(192.168.1.121)作为引导服务器启动一个新的群组复制过程或者恢复一个已经存在的群组

sql 复制代码
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION USER='rp',PASSWORD='123';
SET GLOBAL group_replication_bootstrap_group=OFF;

在主上查看组信息

sql 复制代码
SELECT * FROM performance_schema.replication_group_members;

从的机器配置:

配置MySQL的配置文件

sql 复制代码
vim /etc/my.cnf
sql 复制代码
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log_timestamps=SYSTEM
server_id=122
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.1.122:33061"
group_replication_group_seeds="master:33061,rep1:33061,rep2:33061"
group_replication_ip_whitelist="192.168.1.0/24,127.0.0.1/8"
group_replication_bootstrap_group=off
group_replication_recovery_use_ssl=on

重启数据库:

sql 复制代码
/etc/init.d/mysqld restart

登录数据库对从进行以下配置(192.168.1.122,192.168.1.123):

创建用户并授予权限:

sql 复制代码
SET SQL_LOG_BIN=0;
CREATE USER rp@'%' IDENTIFIED BY '123';
GRANT REPLICATION SLAVE ON *.* TO rp@'%';
GRANT CONNECTION_ADMIN ON *.* TO rp@'%';
GRANT BACKUP_ADMIN ON *.* TO rp@'%';
GRANT GROUP_REPLICATION_STREAM ON *.* TO rp@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
CHANGE REPLICATION SOURCE TO SOURCE_USER='rp', SOURCE_PASSWORD='123' FOR CHANNEL 'group_replication_recovery';

开启组复制

sql 复制代码
START GROUP_REPLICATION USER='rp', PASSWORD='123';

查看组的信息

sql 复制代码
 SELECT * FROM performance_schema.replication_group_members;

测试:

当master宕机后会在从中寻找新的主

测试三台机器对数据库增删改查的情况

在master中创新一个新的数据库

从库中也相应的同步了新的数据库

在从中测试尝试创建库表----从库只能读取不能创建库表,也不能插入数据

测试当主机宕机后的情况

sql 复制代码
#停掉主机的组复制
stop group_replication;

从的组信息--rep1成为新的主机----这时rep1可以对数据库进行数据的插入:

当讲原来的master开启组复制后的情况----master不能恢复主的身份:


多主模式:

配置三台机器的/etc/my.cnf文件增加两条配置:

sql 复制代码
#关闭单master模式
loose-group_replication_single_primary_mode=off
#多主一致性检查
loose-group_replication_enforce_update_everywhere_checks=ON

在其中一台主机里面执行以下mysql命令

sql 复制代码
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;

查看组的成员

在剩下两台机器中配置:

sql 复制代码
start group_replication;

测试:

增删改查情况

master创建库

rep1创建库表

rep2增加表的id字段的主键并增加数据

相关推荐
枫叶丹42 分钟前
浙人医信创实践:电科金仓异构多活架构破解集团化医院转型难题
开发语言·数据库·架构
垦***耪3 分钟前
SSA-KELM多输入多输出回归预测:基于SSA算法优化KELM的Matlab代码实现,适用于...
mysql
yddddddy3 分钟前
Django在项目中的作用
数据库·python·django
TDengine (老段)5 分钟前
TDengine COLS 函数用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine
q***31147 分钟前
使用 Qt 插件和 SQLCipher 实现 SQLite 数据库加密与解密
数据库·qt·sqlite
天域网络科技7 分钟前
WhatsApp协议底层架构逆向分析入门
架构
拾忆,想起7 分钟前
Dubbo服务多版本管理全攻略:实现平滑升级与版本兼容
服务器·网络·微服务·架构·dubbo
x***440110 分钟前
远程访问mysql数据库的正确打开方式
数据库·mysql
p***434812 分钟前
后端在消息系统中的顺序保证
数据库·数据仓库·docker
e***282912 分钟前
【细如狗】记录一次使用MySQL的Binlog进行数据回滚的完整流程
android·数据库·mysql