Mysql(五)组复制的实现

1.什么是组复制?

MySQL组复制是MySQL 5.7.17开始引入的新功能,为主从复制实现高可用功能。它基于常规的MySQL复制,利用了基于行格式的二进制日志和GTID等特性。下图是MySQL组复制的整体框架图。

它支持单主模型和多主模型两种工作方式(默认是单主模型)。

  • 单主模型:从复制组中众多个MySQL节点中自动选举一个master节点,只有master节点可以写,其他节点自动设置为read only。当master节点故障时,会自动选举一个新的master节点,选举成功后,它将设置为可写,其他slave将指向这个新的master。
  • 多主模型:复制组中的任何一个节点都可以写,因此没有master和slave的概念,只要突然故障的节点数量不太多,这个多主模型就能继续可用。

2.组复制的优点

  1. 可用性:通过将数据复制到多个位置来避免单点故障问题。
  2. 可伸缩性:应用程序可以通过向副本发送读取操作并允许主服务器仅处理写入操作来提供更多请求。
  3. 克服单一服务器限制:所有大用户都将达到他们的数据不再适合单个服务器的程度。解决方案是在多个服务器之间对数据进行分片,并且需要复制来处理数据流,以便有效地进行切分。
  4. MySQL复制非常容易设置并且性能非常好,因此MySQL开发人员和DBA喜欢使用此功能来扩展,并为其MySQL环境提供高可用性。

3.实现单主模式下的组复制

前提:三台服务器

主库:172.25.60.3

从库1:172.25.60.1

从库2:172.25.60.2

首先,安装好三台服务器上的mysql,查看/var/log/mysql/auto.conf 文件获取 uuid

在主库上

1.修改mysql配置文件如下:

server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW
plugin_load_add='group_replication.so' #将组复制插件添加到服务器在启动时加载的插件列表中。
在生产部署中,这比手动安装插件更好。
transaction_write_set_extraction=XXHASH64
group_replication_group_name="uuid"   #告诉插件其加入或创建的组的名称为uuid
group_replication_start_on_boot=off
group_replication_local_address= "172.25.60.3:33061"
group_replication_group_seeds= "主库ip:33061,从库1ip:33061,从库2ip:33061" # 设置成员用于与组中其他成员进行内部通信的网络地址和端口。
group_replication_bootstrap_group=off
loose-group_replication_ip_whitelist="127.0.0.1,172.25.60.0/24"
loose-group_replication_enforce_update_everywhere_checks=ON   #最后两行是打开组复制的标识
loose-group_replication_single_primary_mode=OFF


2.然后重新启动mysql并做好安全初始化,再登录mysql

在mysql中:
SET SQL_LOG_BIN=0;  #如果禁用了二进制日志记录,则使用创建用户后再次启用它 SET SQL_LOG_BIN=1;
CREATE USER rpl_user@'%' IDENTIFIED BY 'password';  #创建用户以用来进行复制
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%'; #给创建的用户添加权限
mysql> FLUSH PRIVILEGES; #刷新

3.设置分布式恢复:

CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';     #分布式恢复是加入组且与组成员没有相同事务集的服务器所采取的第一步。没有设置的话,组成员无法加入。

4.启动组复制:

在之前的配置文件中我们已经添加了相关插件,如果没有可以手动添加:

INSTALL PLUGIN group_replication SONAME 'group_replication.so';

要检查插件是否添加成功,可以 SHOW PLUGINS;

如果成功,则如下:


5.引导组

首次启动组复制的过程称为引导,为了安全的引导,需要在主库mysql中:
 

SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;

一旦START GROUP_REPLICATION语句返回,该组就已经启动。您可以检查是否已创建该组,并且其中有一个成员:

形式如下:

在从库上

1.配置/etc/my.cnf,除了以下两行,其他与主库一样:

server_id=2
group_replication_local_address= "172.25.60.1:33061"

2.在mysql中:和主库一样的操作

SET SQL_LOG_BIN=0;  #先关闭二进制日志
CREATE USER rpl_user@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
SET SQL_LOG_BIN=1;   #再打开二进制日志
CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';
SET GLOBAL group_replication_bootstrap_group=ON;
mysql> START GROUP_REPLICATION;  #启动组

此时再检查组成员,应该有两个。

另一各从库操作和这个一样,不同的地方:
 

server-id=3
group_replication_local_address= "172.25.60.2:33061"

至此,单主模式的组复制配主完成。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值