安裝環境
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