说明
1、 mysql数据库主从宕机,会影响到正常业务访问,并且要手动进行切换。
2、 MHA高可用搭建复杂,代码已停止更新。
3、 MGR集群搭建方便, master故障会自动进行切换,不影响业务正常访问。
一、环境准备
1、主机说明
IP地址 | 主机名 | 端口 | 操作系统 | 数据库版本 |
---|---|---|---|---|
172.16.1.20 | db01 | 3306 | centos7.9 | 5.7.40 |
172.16.1.21 | db02 | 3306 | centos7.9 | 5.7.40 |
172.16.1.22 | db03 | 3306 | centos7.9 | 5.7.40 |
说明:数据库版本可以根据业务场景选择即可。
2、修改hosts文件
cat >> /etc/hosts << end
172.16.2.20 db01
172.16.2.21 db02
172.16.2.22 db03
end
[root@db03 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.2.20 db01
172.16.2.21 db02
172.16.2.22 db03
3、关闭防火漆
1、关闭selinux
cp -av /etc/selinux/config /etc/selinux/config.bak
setenforce 0
sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
2、关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
systemctl stop postfix
systemctl disable postfix
4、安装mysql(略)
二、安装MGR集群
1、配置MGR参数
一、修改my.cnf文件
1、172.16.1.20
binlog_checksum=NONE
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name ="6c0d7856-1811-11ef-8c2d-000c29400c69"
loose-group_replication_start_on_boot =off
loose-group_replication_local_address ="172.16.2.20:24301"
loose-group_replication_group_seeds ="172.16.2.20:24301,172.16.2.21:24301,172.16.2.22:24301"
loose-group_replication_bootstrap_group =off
loose-group-replication-ip-whitelist="172.16.2.20,172.16.2.21,172.16.2.22"
2、172.16.1.21
binlog_checksum=NONE
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name ="6c0d7856-1811-11ef-8c2d-000c29400c69"
loose-group_replication_start_on_boot =off
loose-group_replication_local_address ="172.16.2.21:24301"
loose-group_replication_group_seeds ="172.16.2.20:24301,172.16.2.21:24301,172.16.2.22:24301"
loose-group_replication_bootstrap_group =off
loose-group-replication-ip-whitelist="172.16.2.20,172.16.2.21,172.16.2.22"
3、172.16.1.22
binlog_checksum=NONE
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name ="6c0d7856-1811-11ef-8c2d-000c29400c69"
loose-group_replication_start_on_boot =off
loose-group_replication_local_address ="172.16.2.22:24301"
loose-group_replication_group_seeds ="172.16.2.20:24301,172.16.2.21:24301,172.16.2.22:24301"
loose-group_replication_bootstrap_group =off
loose-group-replication-ip-whitelist="172.16.2.20,172.16.2.21,172.16.2.22"
loose-group_replication_single_primary_mode = true
loose-group_replication_enforce_update_everywhere_checks = false
二、参数说明
#定义用户事务期间哈希写入提取的算法,组复制模式下必须设置为XXHASH64
transaction_write_set_extraction=XXHASH64
#确定组复制恢复时是否应该应用SSL,通常设置为"开",但默认设置为"关"
loose-group_replication_recovery_use_ssl=ON
#该服务器的实例所在复制组的名称,必须是有效UUID,所有节点必须相同
loose-group_replication_group_name="6c0d7856-1811-11ef-8c2d-000c29400c69"
#确定服务器是否应该在服务器启动期间启动组复制
loose-group_replication_start_on_boot=OFF
#为复制组中其它成员提供网络地址,此处端口号避免使用3306,否则会冲突
loose-group_replication_local_address= "172.16.2.20:24301"
#用于建立新成员到组的连接组成员列表,该列表指定为由分隔号间隔的组成员网络地址列表
loose-group_replication_group_seeds= "172.16.2.20:24301,172.16.2.21:24301,172.16.2.22:24301"
#配置此服务器为引导组,该选项必须仅在一台服务器上设置,且仅当第一次启动组或重新启动整个组时,成功引导组启动后,将此选项设置为关闭
loose-group_replication_bootstrap_group=OFF
#使用mysql_native_password密码策略,防止navicat连不上mysql8
default_authentication_plugin=mysql_native_password
#设置mysql插件所在目录,因为MGR基于插件,所以必须设置插件路径
plugin_dir=/usr/lib64/mysql/plugin
#此参数决定primary节点到secondary节点的请求是否基于RSA密匙对的密码交换所需的公匙
loose-group_replication_recovery_get_public_key=on
2、重启服务mysql
1、重启服务mysql(三台执行)
service mysqld restart
3、创建复制用户
1、创建复制用户repl
set sql_log_bin=0;
create user 'repl'@'%' identified by 'repl';
grant replication slave on *.* to 'repl'@'%';
flush privileges;
set sql_log_bin=1;
注意:三台服务器都需要执行,否则后期slave添加MGR集群报错RECOVERING。
4、安装复制插件
1、安装组复制插件
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
show plugins;
说明:
1、三台服务器都要执行。
2、如果查看group_replication状态是:ACTIVE,安装成功。
5、启动并引导复制
1、主库master执行
set global group_replication_bootstrap_group=on;
start group_replication;
select * from performance_schema.replication_group_members;
set global group_replication_bootstrap_group=off;
2、从库slave执行
reset master;
change master to master_user="repl",master_password="Repl+2024" for channel 'group_replication_recovery';
start group_replication;
3、查询MGR集群
select * from performance_schema.replication_group_members;
三、MGR集群验证结果
1、创建数据库(主库master执行)
create database shop01;
use shop01;
create table mgr(id int,name varchar(30),PRIMARY KEY (`id`));
insert into mgr select 1,'aa';
select * from mgr; flush privileges;
说明:
1、主库master创建数据库,从库slave能查询到对应数据。
2、从库slave无法创建数据库,只能查询数据。
3、MGR集群搭建完成,结果如下图所示: