企业实战篇mysql架构(3)---组复制

本文详细介绍了MySQL 5.7.17引入的组复制功能,包括单主和多主模型的工作方式。在单主模型中,一个master节点负责写操作,故障时会自动选举新master。多主模型允许所有节点写入,只要故障节点不多,系统仍能保持可用。组复制通过冲突检测和全局事务顺序确保一致性。实验部分展示了如何配置和初始化三个server组成复制组,实现数据同步。
摘要由CSDN通过智能技术生成

组复制模型

MySQL组复制是MySQL 5.7.17开始引入的新功能,为主从复制实现高可用功能。它支持单主模型和多主模型两种工作方式(默认是单主模型)。

单主模型
从复制组中众多个MySQL节点中自动选举一个master节点,只有master节点可以写,其他节点自动设置为read only。当master节点故障时,会自动选举一个新的master节点,选举成功后,它将设置为可写,其他slave将指向这个新的master。

多主模型
复制组中的任何一个节点都可以写,因此没有master和slave的概念,只要突然故障的节点数量不太多,这个多主模型就能继续可用

组复制原理

复制组由多个 server成员构成,并且组中的每个 server 成员可以独立地执行事务。但所有读写(RW)事务只有在冲突检测成功后才会提交。只读(RO)事务不需要在冲突检测,可以立即提交。

换句话说,对于任何 RW 事务,提交操作并不是由始发 server 单向决定的,而是由组来决定是否提交。准确地说,在始发 server 上,当事务准备好提交时,该 server 会广播写入值(已改变的行)和对应的写入集(已更新的行的唯一标识符)。然后会为该事务建立一个全局的顺序。最终,这意味着所有 server 成员以相同的顺序接收同一组事务。因此,所有 server 成员以相同的顺序应用相同的更改,以确保组内一致。

组复制使您能够根据在一组 server 中复制系统的状态来创建具有冗余的容错系统。因此,只要它不是全部或多数 server 发生故障,即使有一些 server 故障,系统仍然可用,最多只是性能和可伸缩性降低,但它仍然可用。server 故障是孤立并且独立的。它们由组成员服务来监控,组成员服务依赖于分布式故障检测系统,其能够在任何 server 自愿地或由于意外停止而离开组时发出信号。

总之,MySQL 组复制提供了高可用性,高弹性,可靠的 MySQL 服务。

实验

将server1,server2,server3作为一个组,当一个服务器写,其他两个服务器会同步这个数据

server1(组复制的发起节点)

step1关闭mysql,还原之前做过的实验,务必清空该目录下的一切信息。
注意:如果之前没有做过其他的mysql实验,就可不用做这一步骤

systemctl stop mysqld
cd /var/lib/mysql
rm -fr * #清空该目录下的所有文件

step2 生成UUID:

uuidgen	#这一步生成的uuid要在后面用到

step3编辑以下的文件

vim /etc/my.cnf
systemctl start mysqld

vim /etc/my.cnf
写入:

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	#指示Server必须为每个事务收集写集合,并使用XXHASH64哈希算法将其编码为散列
group_replication_group_name="624dda22-8761-43a3-8abd-b06716fb1694"	#告知插件,正在加入或创建的组要命名,一般写UUID
group_replication_start_on_boot=off	#指示插件在 server 启动时不自动启动组复制
group_replication_local_address= "172.25.254.1:33061"	#告诉插件使用 IP 地址 本地主机,端口33061用于接受来自组中其他成员的传入连接。
group_replication_group_seeds= "172.25.254.1:33061,172.25.254.2:33061,172.25.254.3:33061"
group_replication_bootstrap_group=off	#配置是否自动引导组
loose-group_replication_ip_whitelist="127.0.0.1,172.25.254.0/24"	#用户白名单
loose-group_replication_enforce_update_everywhere_checks=ON	#多主模式下为多主更新启用或禁用严格一致性检查
loose-group_replication_single_primary_mode=OFF	#设置组自动选择一个 server 来处理读/写工作

在这里插入图片描述
step3查看密码,进行安全初始化

cat /var/log/mysqld.log  |grep password
  mysql_secure_installation

在这里插入图片描述
step4

mysql> SET SQL_LOG_BIN=0;#关闭二进制日志
mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'Westos.123';
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
mysql> FLUSH PRIVILEGES;

在这里插入图片描述
step5开启接口,安装组复制插件

mysql> SET SQL_LOG_BIN=1;
mysql> CHANGE MASTER TO MASTER_USER='rpl_user',MASTER_PASSWORD='Westos.123' FOR CHANNEL 'group_replication_recovery';
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
mysql> SHOW PLUGINS;

在这里插入图片描述
step6让组server1上线

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

step7 查看server1是否上线
在这里插入图片描述

注意:因为是基于域名,所以/etc/hosts务必正确
在这里插入图片描述

server2配置:

step1

systemctl stop mysqld
 cd /var/lib/mysql
  rm -fr *

在这里插入图片描述
step2

vim /etc/my.cnf
systemctl start mysqld

在这里插入图片描述
step3查看初始密码

 cat /var/log/mysqld.log  |grep password`

step4安全初始化

mysql_secure_installation

step5登录用户:

mysql> SET SQL_LOG_BIN=0;
mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'Westos.123';#给用户授权
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
mysql> SET SQL_LOG_BIN=1;
mysql> CHANGE MASTER TO MASTER_USER='rpl_user',MASTER_PASSWORD='Westos.123' FOR CHANNEL 'group_replication_recovery';

step6开启组插件

mysql> STOP GROUP_REPLICATION;
mysql> set global group_replication_allow_local_disjoint_gtids_join=on;
mysql> START GROUP_REPLICATION;

此时可以查看到server2上线
在这里插入图片描述

server3:(与server2的配置大概一致)

前提:3306接口不能被占用
在这里插入图片描述
step1安装mysqld

yum install mysql-community-client-5.7.28-1.el7.x86_64.rpm mysql-community-common-5.7.28-1.el7.x86_64.rpm mysql-community-libs-5.7.28-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm mysql-community-server-5.7.28-1.el7.x86_64.rpm -y

step2

 cd /var/lib/mysql
  rm -fr *

step3

vim /etc/my.cnf
systemctl start mysqld

在这里插入图片描述
step4查看初始密码

 cat /var/log/mysqld.log  |grep password`

step5安全初始化

mysql_secure_installation

step6登录用户:

mysql> SET SQL_LOG_BIN=0;
mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'Westos.123';#给用户授权
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
mysql> SET SQL_LOG_BIN=1;
mysql> CHANGE MASTER TO MASTER_USER='rpl_user',MASTER_PASSWORD='Westos.123' FOR CHANNEL 'group_replication_recovery';

step7开启组插件

mysql> STOP GROUP_REPLICATION;
mysql> set global group_replication_allow_local_disjoint_gtids_join=on;
mysql> START GROUP_REPLICATION;

step8查看server3也上线
在这里插入图片描述

测试:

server2创建一个hhh的数据库
在这里插入图片描述
server1与server3均可以查看
在这里插入图片描述
在这里插入图片描述
总结:server1与server2与server3构成了多主模式,三者彼此是彼此的主,也是彼此的备。当一个创建信息以后,另外两个会同步相同的信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值