记录自己搭建MySQL Group Replication集群过程

记录自己搭建MySQL Group Replication集群过程及遇到的问题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


部署环境

mysql版本:8.0.23
linux版本:CentOS 7.2
环境规划:
|服务器| | IP地址 | 别名
|server01|192.168.106.10|master
|server01|192.168.106.11|node1
|server01|192.168.106.12|node2


部署过程

一、DNS解析配置

#vi /etc/hosts
按规划分别配置3台服务器配置
在这里插入图片描述

二、安装mysql

1、登录网站下载mysql安装程序。

https://downloads.mysql.com/archives/community/
在这里插入图片描述

2、安装环境检查

3台服务器上均需要操作
#rpm -qa | grep mariadb ----检查下系统是否安装过mysql
#rpm -qa | grep mysql ----检查下系统是否安装过mysql
#rpm -e --nodeps * ----如有,依次输入命令,卸载已经安装的版本
例如:
#rpm -e --nodeps mariadb-libs-5.5.44-2.el7.centos.x86_64
#rpm -e --nodeps mariadb-server-5.5.44-2.el7.centos.x86_64
#rpm -e --nodeps mariadb-5.5.44-2.el7.centos.x86_64
卸载完毕再次检查
#rpm -qa | grep mariadb ----检查下系统是否安装过mysql
#rpm -qa | grep mysql ----检查下系统是否安装过mysql
如卸载完成,则继续删除mysql文件
#find / -name mysql —查找系统的剩余文件
#rm -rf * ----如有,依次输入命令,删除已经安装的文件。
在这里插入图片描述

3、安装mysql

3台服务器上均需要操作
#cd /usr/local
#mkdir mysql —新建文件夹,并将之前下载mysql安装文件放置其中
#cd mysql
#tar -xvf mysql-8.0.23-1.el7.x86_64.rpm-bundle.tar --解压mysql安装文件
-------依次执行如下语句完成安装。
#rpm -ivh mysql-community-common-8.0.23-1.el7.x86_64.rpm
#rpm -ivh mysql-community-client-plugins-8.0.23-1.el7.x86_64.rpm
#rpm -ivh mysql-community-libs-8.0.23-1.el7.x86_64.rpm
#rpm -ivh mysql-community-client-8.0.23-1.el7.x86_64.rpm
#rpm -ivh mysql-community-server-8.0.23-1.el7.x86_64.rpm
在这里插入图片描述

三、配置mysql

3台服务器上均需要操作

1、启动mysql

#systemctl start mysqld.service ----启动mysql

2、修改初始密码

#cat /var/log/mysqld.log | grep password —查询初始密码
在这里插入图片描述
#mysql -uroot -p —输入前面查询到的初始密码

在这里插入图片描述

3、用户权限配置

MYSQL8.0以上对密码有安全性要求,为方便测试,调低了密码的安全性,生产环境不建议调整。
mysql> SET GLOBAL validate_password.policy=LOW; —设置密码规则
mysql> SET GLOBAL validate_password.length=4; —设置密码规则
mysql>ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘123456’; —修改root用户密码
mysql>select user,host,plugin from mysql.user;
mysql>update mysql.user set host=“%” where user=“root”;
mysql>ALTER USER ‘root’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
mysql>GRANT ALL PRIVILEGES ON . TO ‘root’@‘%’ WITH GRANT OPTION; —设置用户远程访问权限
mysql>FLUSH PRIVILEGES; —刷新配置
mysql>exit;
在这里插入图片描述

4、防火墙配置

关闭系统防火墙,生产环境可根据实际情况开启端口
systemctl stop firewalld.service;
systemctl disable firewalld.service;
在这里插入图片描述

四、配置MGR(MySQL Group Replication)

1、server01服务器

1、my.cnf配置

#vi /etc/my.cnf

default_authentication_plugin=mysql_native_password
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE

log_bin=binlog
log_slave_updates=ON
binlog_format=ROW
master_info_repository=TABLE
relay_log_info_repository=TABLE

—此参数是在server收集写集合的同时以便将其记录到二进制日志。写集合基于每行的主键,并且是行更改后的唯一标识此标识将用于检测冲突。**
transaction_write_set_extraction=XXHASH64

—组的名字可以随便起,但不能用主机的GTID! 所有节点的这个组名必须保持一致!
loose-group_replication_group_name=“aadaaaaa-adda-adda-aaaa-aaaaaaddaaaa”
—启动mysql时不自动启动组复制
loose-group_replication_start_on_boot=OFF
—本机IP地址或者映射,33061用于接收来自其他组成员的传入连接
loose-group_replication_local_address= “master:33061”
—当前主机成员需要加入组时,Server先访问这些种子成员中的一个,然后它请求重新配置以允许它加入组
—需要注意的是,此参数不需要列出所有组成员,只需列出当前节点加入组需要访问的节点即可。
loose-group_replication_group_seeds= “master:33061,node1:33062,node2:33063”
—是否自动引导组。此选项只能在一个server实例上使用,通常是首次引导组时(或在整组成员关闭的情况下),如果多次引导,可能出现脑裂。
loose-group_replication_bootstrap_group=OFF

#systemctl restart mysqld.service —重启mysql服务

2、mysql配置

mysql> SET SQL_LOG_BIN=0;
mysql> SET GLOBAL validate_password.policy=LOW; #设置密码规则
mysql> SET GLOBAL validate_password.length=4; #
mysql> CREATE USER ‘repl’@‘%’ IDENTIFIED WITH
mysql_native_password BY ‘repl’; —创建复制用户
mysql> GRANT REPLICATION SLAVE ON . TO ‘repl’@‘%’;
mysql> flush privileges;
mysql> SET SQL_LOG_BIN=1;
mysql> change master to master_user=‘repl’,master_password=‘repl’ for channel ‘group_replication_recovery’;
mysql> install PLUGIN group_replication SONAME ‘group_replication.so’;

在这里插入图片描述
这里记录遇到一个大坑,在安装group_replication.so的时候提示系统依赖文件错误,无法安装插件。
ERROR 1126 (HY000): Can’t open shared library ‘/usr/lib64/mysql/plugin/group_replication.so’ (errno: 2 /usr/lib64/mysql/plugin/group_replication.so: symbol X509_check_ip_asc, version libcrypto.so.10 not defined in file libcrypto.so)
经过最后查询文档,确实是需要升级系统的一个组件。
将openssl-1.0.1升级到openssl-1.0.2
参考了网络文章进行了升级。openssl-libs-1.0.2k-19.el7.x86_64.rpm。再次安装group_replication.so成功了
在这里插入图片描述
接上文
mysql> show plugins; —插件安装后,确认是否安装成功
在这里插入图片描述

3、mgr配置

mysql> set global group_replication_bootstrap_group=on;
mysql> start group_replication; // 开启组复制
mysql> set global group_replication_bootstrap_group=off; // 关闭组复制引导
mysql> SELECT * FROM performance_schema.replication_group_members;
在这里插入图片描述

2、server02服务器

1、my.cnf配置

需修改以上2项
server_id=2
loose-group_replication_local_address= “node1:33062”

2、mysql配置

mysql> SET SQL_LOG_BIN=0;
mysql> SET GLOBAL validate_password.policy=LOW; #设置密码规则
mysql> SET GLOBAL validate_password.length=4; #
mysql> CREATE USER ‘repl’@‘%’ IDENTIFIED WITH
mysql_native_password BY ‘repl’; —创建复制用户
mysql> GRANT REPLICATION SLAVE ON . TO ‘repl’@‘%’;
mysql> flush privileges;
mysql> SET SQL_LOG_BIN=1;
mysql> change master to master_user=‘repl’,master_password=‘repl’ for channel ‘group_replication_recovery’;
mysql> install PLUGIN group_replication SONAME ‘group_replication.so’;

3、mgr配置

mysql> start group_replication; // 开启组复制
mysql> SELECT * FROM performance_schema.replication_group_members;
在这里插入图片描述

3、server03服务器

1、my.cnf配置

需修改以上2项
server_id=3
loose-group_replication_local_address= “node2:33063”

2、mysql配置

mysql> SET SQL_LOG_BIN=0;
mysql> SET GLOBAL validate_password.policy=LOW; #设置密码规则
mysql> SET GLOBAL validate_password.length=4; #
mysql> CREATE USER ‘repl’@‘%’ IDENTIFIED WITH
mysql_native_password BY ‘repl’; —创建复制用户
mysql> GRANT REPLICATION SLAVE ON . TO ‘repl’@‘%’;
mysql> flush privileges;
mysql> SET SQL_LOG_BIN=1;
mysql> change master to master_user=‘repl’,master_password=‘repl’ for channel ‘group_replication_recovery’;
mysql> install PLUGIN group_replication SONAME ‘group_replication.so’;

3、mgr配置

mysql> start group_replication; // 开启组复制
mysql> SELECT * FROM performance_schema.replication_group_members;在这里插入图片描述
所有节点显示online,MGR配置完成。

参考一下网络文章
感谢各位前辈
https://blog.51cto.com/u_12991611/7066917
https://www.modb.pro/db/334891
https://blog.51cto.com/u_16213589/7424218
https://blog.51cto.com/u_16213589/7424218
https://blog.csdn.net/jiaona_chen123/article/details/106627070?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171055443716800226541725%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=171055443716800226541725&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~hot_rank-9-106627070-null-null.142v99pc_search_result_base5&utm_term=mysql%20group%20replication%E6%90%AD%E5%BB%BA&spm=1018.2226.3001.4187

测试过程

一、数据同步

在server01上创建数据库测试
mysql> create database sam;
mysql> use sam;
mysql> create table test(id int primary key,name varchar(10));
mysql> insert into test values (1,‘sam’);
mysql> select * from test;
在这里插入图片描述
在server02上查询是否同步
在这里插入图片描述

在server03上查询是否同步
在这里插入图片描述
数据同步成功

二、查询谁是主节点

在server01上输入
mysql> show variables like ‘%read_only%’;
在这里插入图片描述

在server02上输入
mysql> show variables like ‘%read_only%’;
在这里插入图片描述

在server03上输入
mysql> show variables like ‘%read_only%’;
在这里插入图片描述

三、故障模拟

停止主机数据库进程
默认主机是server01,所以先停止server01的sql进程
在server01上输入
#systemctl stop myqld
在server02上输入

mysql> SELECT * FROM performance_schema.replication_group_members;
mysql> show variables like ‘%read_only%’;
在这里插入图片描述
查询结果,复制组变为2台数据库节点,其中node2节点自动变为主节点。允许读写任务。
node1依旧是从节点只允许读。
在server03上输入
mysql> SELECT * FROM performance_schema.replication_group_members;
mysql> show variables like ‘%read_only%’;
在这里插入图片描述
确认server02变为主节点,可读写。

恢复主机数据库进程

在server01上输入
#systemctl start myqld
登录mysql,重启复制功能。
mysql> start group_replication; // 开启组复制
server01加入复制组后 自动变为一个从节点。在这里插入图片描述

总结

整个部署过程花了一天事件
遇到各种问题。
1、有插件无法安装,
2、有加入复制组一直显示RECOVERING,涉及到计算机名称改变导致
3、有无法加入组,重装解决。
4、有无法加入组,my.cnf配置问题
需后续还要继续总结,毕竟不是专业的DBA,还要请教各位网络大佬

  • 12
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值