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字段的主键并增加数据

相关推荐
叁沐2 小时前
MySQL 31 误删数据后除了跑路,还能怎么办?
mysql
大咖分享课2 小时前
系统越拆越乱?你可能误解了微服务的本质!
微服务·云原生·架构
Hello.Reader2 小时前
一文通关 Proto3完整语法与工程实践
java·linux·数据库·proto3
c萱3 小时前
软件测试错题笔记
软件测试·数据库·笔记·测试工具·oracle·测试用例
長琹3 小时前
AES加密算法详细加密步骤代码实现--身份证号码加解密系统
网络·数据库·人工智能·python·密码学
只因在人海中多看了你一眼4 小时前
B.50.10.06-NoSQL数据库与电商应用
数据库·nosql
烟雨归来4 小时前
3 个 ASM 磁盘故障案例,从故障诊断到解决方案
数据库·oracle
时序数据说5 小时前
时序数据库IoTDB的六大实用场景盘点
大数据·数据库·物联网·时序数据库·iotdb
MyFreeIT5 小时前
MySQL Function
数据库·mysql