安装环境
3台服务器搭建3节点MGR集群,MySQL版本5.7.27,操作系统版本CentOS 7.6。
10.10.10.91 mysql01
10.10.10.92 mysql02
10.10.10.93 mysql03
为了方便实验,关闭所有节点的防火墙
[root@mysql01 ~]# systemctl stop firewalld
[root@mysql01 ~]# systemctl disable firewalld
所有节点的selinux设置为disabled
[root@mysql01 ~]# getenforce
Disabled
配置各主机名和ip映射,所有节点配置一样
[root@mysql01 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.10.10.91 mysql01
10.10.10.92 mysql02
10.10.10.93 mysql03
安装步骤
官网下载5.7安装包 mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz,建立安装目录/mysql和数据目录/data/mysql,解压压缩包
[root@mysql01 ~]#mkdir /mysql
[root@mysql01 ~]#mkdir /data/mysql
[root@mysql01 ~]# cd /softwares/
[root@mysql01 softwares]#tar -zxvf mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz
[root@mysql01 softwares]# cd mysql-5.7.27-linux-glibc2.12-x86_64
[root@mysql01 mysql-5.7.28-linux-glibc2.12-x86_64]# cp -rf * /mysql
[root@mysql01 mysql-5.7.28-linux-glibc2.12-x86_64]#chown -R mysql.mysql /mysql /data/mysql
#配置环境变量
vi /root/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
#PATH=$PATH:$HOME/bin
PATH=$PATH:$HOME/bin:/mysql/bin:/mysql/lib:/mysql
export PATH
配置完毕后source /root/.bash_profile生效
配置my.cnf
group_replication_group_name是通过select uuid()得来,所有的库唯一
[root@mysql01 mysql]# cat /etc/my.cnf
[mysqld]
datadir=/data/mysql
basedir=/mysql
port=3306
socket=/data/mysql/mysql.sock
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
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="9431c4f8-5ddd-11eb-a164-000c290381f2"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address="10.10.10.91:33061"
loose-group_replication_group_seeds="10.10.10.91:33061,10.10.10.92:33061,10.10.10.93:33061"
loose-group_replication_bootstrap_group=off
loose-group_replication_single_primary_mode=FALSE
loose-group_replication_enforce_update_everywhere_checks= TRUE
[root@mysql02 software]# cat /etc/my.cnf
[mysqld]
datadir=/data/mysql
basedir=/mysql
port=3306
socket=/data/mysql/mysql.sock
server_id=2
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
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="9431c4f8-5ddd-11eb-a164-000c290381f2"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address="10.10.10.92:33061"
loose-group_replication_group_seeds="10.10.10.91:33061,10.10.10.92:33061,10.10.10.93:33061"
loose-group_replication_bootstrap_group=off
loose-group_replication_single_primary_mode=FALSE
loose-group_replication_enforce_update_everywhere_checks= TRUE
[root@mysql03 mysql]# cat /etc/my.cnf
[mysqld]
datadir=/data/mysql
basedir=/mysql
port=3306
socket=/data/mysql/mysql.sock
server_id=3
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
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="9431c4f8-5ddd-11eb-a164-000c290381f2"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address="10.10.10.93:33061"
loose-group_replication_group_seeds="10.10.10.91:33061,10.10.10.92:33061,10.10.10.93:33061"
loose-group_replication_bootstrap_group=off
loose-group_replication_single_primary_mode=FALSE
loose-group_replication_enforce_update_everywhere_checks= TRUE
组复制部分配置参数说明:
group_replication变量使用的loose-前缀是指示Server启用时尚未加载复制插件也将继续启动
transaction_write_set_extraction = XXHASH64
##指示Server必须为每个事务收集写集合,并使用XXHASH64哈希算法将其编码为散列
loose-group_replication_group_name="01e5fb97-be64-41f7-bafd-3afc7a6ab555"
##表示将加入或者创建的复制组命名为01e5fb97-be64-41f7-bafd-3afc7a6ab555
##可自定义(通过cat /proc/sys/kernel/random/uuid)
loose-group_replication_start_on_boot=off
##设置为Server启动时不自动启动组复制
loose-group_replication_local_address="10.10.10.91:33061"
##绑定本地的10.10.10.91及33061端口接受其他组成员的连接,IP地址必须为其他组成员可正常访问
loose-group_replication_group_seeds="10.10.10.91:33061,10.10.10.92:33061,10.10.10.93:33061"
##本行为告诉服务器当服务器加入组时,应当连接到10.10.10.91:33061,10.10.10.92:33061,10.10.10.93:33061
##这些种子服务器进行配置。本设置可以不是全部的组成员服务地址。
loose-group_replication_bootstrap_group = off
##配置是否自动引导组
loose-group_replication_ip_whitelist=”10.30.0.0/16,10.31.0..0/16,10.27.0.0/16″
##配置白名单,默认情况下只允许10.10.10.x连接到复制组,如果是其他IP则需要配置。
3.4初始化并启动各数据库节点
/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/data/mysql --datadir=/data/mysql
/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
[root@mysql01 ~]# mysql -uroot -p -S /data/mysql/mysql.sock
# 所有的节点都执行安装MGR插件
mysql>INSTALL PLUGIN group_replication SONAME 'group_replication.so';
#所有的节点都执行设置复制账号
mysql> SET SQL_LOG_BIN=0;
mysql> CREATE USER repl@'%' IDENTIFIED BY '123';
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='123' FOR CHANNEL 'group_replication_recovery';
# 启动MGR,在主库(10.10.10.91)上执行
mysql> SET GLOBAL group_replication_bootstrap_group=ON;
mysql> START GROUP_REPLICATION;
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
# 查看MGR组信息
mysql> SELECT * FROM performance_schema.replication_group_members;
# 其他节点加入MGR,在从库(10.10.10.92,10.10.10.93)上执行
mysql> START GROUP_REPLICATION;
启动MGR单主模式
mysql> SET GLOBAL group_replication_bootstrap_group=ON;
Query OK, 0 rows affected (0.00 sec)
mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (2.10 sec)
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | a1bee14e-5dd4-11eb-9173-000c290381f2 | mysql01 | 3306 | ONLINE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
1 row in set (0.00 sec)
# 查看MGR组信息
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | a1bee14e-5dd4-11eb-9173-000c290381f2 | mysql01 | 3306 | ONLINE |
| group_replication_applier | d0a8d1e2-5dd4-11eb-91a8-000c29d007eb | mysql02 | 3306 | ONLINE |
| group_replication_applier | d5b81c98-5dd4-11eb-843a-000c29916c42 | mysql03 | 3306 | ONLINE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)
可以看到,3个节点状态为online,并且主节点为10.10.10.91,只有主节点可以写入,其他节点只读,MGR单主模式搭建成功。
切换至多主模式
MGR切换模式
需要重新启动组复制,因些需要在所有节点上先关闭组复制,设置 group_replication_single_primary_mode=OFF 等参数,再启动组复制。
# 停止组复制(所有节点执行):
mysql> stop group_replication;
mysql> set global group_replication_single_primary_mode=OFF;
mysql> set global group_replication_enforce_update_everywhere_checks=ON;
mysql> stop group_replication;
Query OK, 0 rows affected (9.51 sec)
mysql> set global group_replication_single_primary_mode=OFF;
Query OK, 0 rows affected (0.00 sec)
mysql> set global group_replication_enforce_update_everywhere_checks=ON;
Query OK, 0 rows affected (0.00 sec)
mysql>
# 随便选择某个节点执行
mysql> SET GLOBAL group_replication_bootstrap_group=ON;
mysql> START GROUP_REPLICATION;
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
mysql> SET GLOBAL group_replication_bootstrap_group=ON;
Query OK, 0 rows affected (0.00 sec)
mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (2.02 sec)
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
Query OK, 0 rows affected (0.00 sec)
其他节点执行
START GROUP_REPLICATION;
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | a1bee14e-5dd4-11eb-9173-000c290381f2 | mysql01 | 3306 | ONLINE |
| group_replication_applier | d0a8d1e2-5dd4-11eb-91a8-000c29d007eb | mysql02 | 3306 | ONLINE |
| group_replication_applier | d5b81c98-5dd4-11eb-843a-000c29916c42 | mysql03 | 3306 | ONLINE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)
mysql>
参考
https://www.cnblogs.com/kevingrace/p/10470226.html
https://www.cnblogs.com/kevingrace/p/10470226.html