记录自己搭建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,还要请教各位网络大佬