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

相关推荐
陌上丨11 小时前
Redis的Key和Value的设计原则有哪些?
数据库·redis·缓存
AI_567811 小时前
AWS EC2新手入门:6步带你从零启动实例
大数据·数据库·人工智能·机器学习·aws
ccecw11 小时前
Mysql ONLY_FULL_GROUP_BY模式详解、group by非查询字段报错
数据库·mysql
JH307312 小时前
达梦数据库与MySQL的核心差异解析:从特性到实践
数据库·mysql
数据知道12 小时前
PostgreSQL 核心原理:如何利用多核 CPU 加速大数据量扫描(并行查询)
数据库·postgresql
yunteng52112 小时前
通用架构(同城双活)(单点接入)
架构·同城双活·单点接入
麦聪聊数据13 小时前
Web 原生架构如何重塑企业级数据库协作流?
数据库·sql·低代码·架构
未来之窗软件服务13 小时前
数据库优化提速(四)新加坡房产系统开发数据库表结构—仙盟创梦IDE
数据库·数据库优化·计算机软考
程序员侠客行14 小时前
Mybatis连接池实现及池化模式
java·后端·架构·mybatis
Goat恶霸詹姆斯14 小时前
mysql常用语句
数据库·mysql·oracle