一、配置組復制的步驟
1、初始化數據目錄
2、配置主服務器(primary)
3、配置輔助服務器(secondaries)
4、啟動mysql實例
5、安裝組復制插件(primary and secondaries)
6、創建復制用戶(replication user)的用戶
7、在主服務器上啟動組復制
8、將輔助(secondaries)服務器連接到主(primary)服務器
9、確認組復制的狀態
二、配置過程
1、初始化數據目錄
[mysql@node01 ~]$ mysqld --no-defaults --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql3306/data
[mysql@node02 ~]$ mysqld --no-defaults --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql3306/data
[mysql@node03 ~]$ mysqld --no-defaults --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql3306/data
2、配置primary
配置primary節點,我們需要准備好數據目錄、端口,GTID以及組復制相關參數選項,還要添加plugin目錄確保服務器可以找到組復制相關的插件,並且要打開binlog的日志校驗。
因為group_replication_group_seeds參數需要配置組復制初始參與的服務器列表,所以必須提前決定每個服務器將要使用的端口。組復制設置中每個服務器需要配置兩個端
口,一個用於客戶端連接,一個用於內部組復制的消息通信。
node01:
[mysqld]
datadir=/data/mysql3306/data
basedir=/usr/local/mysql
plugin_dir=/usr/local/mysql/lib/plugin
port=24801
socket=/tmp/mysql.sock
server_id=1
gtid_mode= ON
enforce_gtid_consistency= ON
binlog_checksum=NONE
transaction_write_set_extraction = XXHASH64
loose-group_replication_recovery_use_ssl= ON
loose-group_replication_group_name = '5dbabbe6-8050-49a0-9131-1de449167446'
loose-group_replication_start_on_boot = OFF
loose-group_replication_local_address = '192.168.211.128:24901'
loose-group_replication_group_seeds = '192.168.211.128:24901,192.168.211.129:24902,192.168.211.130:24903'
loose-group_replication_bootstrap_group = OFF
[mysql]
port=24801
socket=/tmp/mysql.sock
這里參數文件沒有配置log-bin參數,因為當服務器遇到組復制參數時,它將自動啟用binlog,binlog在組復制里面時是必須的。如果你需要命名binlog文件或者將binlog定向
存儲到某個目錄中,那么需要配置log-bin參數。
3、配置secondaries
secondaries節點的配置與primary節點類似,區別在於對於特定參數(端口信息,數據目錄,套接字,服務器ID)等需要設置成特定的值。除此之外,transaction_write_set_extraction參數
只在primary節點上設置,對於secondaries節點,我們添加group_replication_recovery_get_public_key參數並將其設置為ON。這個參數決定,primary節點到secondaries節點的請求是
否為基於RSA密鑰對的密碼交換所需的公鑰。
node02:
[mysqld]
datadir=/data/mysql3306/data
log-bin=/data/mysql3306/binlog
log_slave_updates = ON
basedir=/usr/local/mysql
plugin_dir=/usr/local/mysql/lib/plugin
port=24802
socket=/tmp/mysql.sock
server_id=2
gtid_mode= ON
enforce_gtid_consistency= ON
binlog_checksum=NONE
loose-group_replication_recovery_get_public_key= ON
loose-group_replication_recovery_use_ssl= ON
loose-group_replication_group_name = '5dbabbe6-8050-49a0-9131-1de449167446'
loose-group_replication_start_on_boot = OFF
loose-group_replication_local_address = '192.168.211.129:24902'
loose-group_replication_group_seeds = '192.168.211.128:24901,192.168.211.129:24902,192.168.211.130:24903'
loose-group_replication_bootstrap_group = OFF
[mysql]
port=24802
socket=/tmp/mysql.sock
node03:
[mysqld]
datadir=/data/mysql3306/data
log-bin=/data/mysql3306/binlog
log_slave_updates = ON
basedir=/usr/local/mysql
plugin_dir=/usr/local/mysql/lib/plugin
port=24803
socket=/tmp/mysql.sock
server_id=3
gtid_mode= ON
enforce_gtid_consistency= ON
binlog_checksum=NONE
loose-group_replication_recovery_get_public_key= ON
loose-group_replication_recovery_use_ssl= ON
loose-group_replication_group_name = '5dbabbe6-8050-49a0-9131-1de449167446'
loose-group_replication_start_on_boot = OFF
loose-group_replication_local_address = '192.168.211.130:24903'
loose-group_replication_group_seeds = '192.168.211.128:24901,192.168.211.129:24902,192.168.211.130:24903'
loose-group_replication_bootstrap_group = OFF
[mysql]
port=24803
socket=/tmp/mysql.sock
4、啟動實例
[mysql@node01 ~]$ mysqld --defaults-file=/etc/primary.cnf &
[mysql@node02 ~]$ mysqld --defaults-file=/etc/slave1.cnf &
[mysql@node03 ~]$ mysqld --defaults-file=/etc/slave2.cnf &
啟動實例並且輸出日志:
$ mysqld --defaults-file=/etc/primary.cnf > primary_output.log 2>&1 &
$ mysqld --defaults-file=/etc/slave1.cnf > slave1_output.log 2>&1 &
$ mysqld --defaults-file=/etc/slave2.cnf > slave2_output.log 2>&1 &
5、安裝組復制插件(所有節點)
mysql實例啟動后,必須安裝組復制插件。
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
查看插件狀態show plugins,或者從information_schema.plugins系統表中查詢插件信息。
select * from information_schema.plugins where plugin_name = 'group_replication'\G;
6、創建復制組用戶(所有節點)
在啟動mysql實例之后,必須創建一個用戶,供服務器用於彼此連接。在組復制中,服務器都是互相“交流”的。這些命令與我們在mysql復制中使用的命令相同,我們需要在所有服務器
實例上創建這個用戶。
set sql_log_bin=0;
create user rpl@'%' identified by 'mysql';
grant replication slave on *.* to rpl@'%';
flush privileges;
set sql_log_bin=1;
7、在primary上啟動復制(primary上執行)
group_replication_bootstrap_group參數通常在第一次啟動的時候設置成OFF,因為復制組還沒有啟動,我們在primary上啟動復制組。參數group_replication_boostrap_group是可以動態設置的,我們可以動態的打開和關閉這個參數。
set global group_replication_bootstrap_group=ON;
start group_replication;
set global group_replication_bootstrap_group=OFF;
8、連接secondaries到primary節點(secondaries上執行)
mysql> change master to master_user="rpl",master_password='mysql' for channel 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.01 sec)
現在我們已經將輔助設備配置為連接到主服務器,但是連接還沒建立,我們必須通過啟動組復制來完成此過程。
9、在secondaries上啟動組復制
mysql> start group_replication;
2020-09-29T00:17:15.035829Z 10 [System] [MY-010597] [Repl] 'CHANGE MASTER TO FOR CHANNEL 'group_repl ication_applier' executed'. Previous state master
_host='', master_port= 3306, master_log_file='', ma ster_log_pos= 4, master_bind=''. New state master_host='<NULL>', master_port= 0, master_log_file=
'', master_log_pos= 4, master_bind=''.
Query OK, 0 rows affected (4.30 sec)
mysql> 2020-09-29T00:17:19.332065Z 17 [System] [MY-010597] [Repl] 'CHANGE MASTER TO FOR CHANNEL 'gro up_replication_recovery' executed'. Previous state
master_host='', master_port= 3306, master_log_fil e='', master_log_pos= 4, master_bind=''. New state master_host='node01', master_port= 24801, master_
log_file='', master_log_pos= 4, master_bind=''.
2020-09-29T00:17:19.375174Z 18 [Warning] [MY-010897] [Repl] Storing MySQL user name or password info rmation in the master info repository is not secure
and is therefore not recommended. Please conside r using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the
MySQL Manual for more information.
2020-09-29T00:17:19.395921Z 18 [System] [MY-010562] [Repl] Slave I/O thread for channel 'group_repli cation_recovery': connected to master 'rpl@node01:24
801',replication started in log 'FIRST' at posit ion 4
2020-09-29T00:17:19.511547Z 17 [System] [MY-010597] [Repl] 'CHANGE MASTER TO FOR CHANNEL 'group_repl ication_recovery' executed'. Previous state master_ho
st='node01', master_port= 24801, master_log_fil e='', master_log_pos= 4, master_bind=''. New state master_host='<NULL>', master_port= 0, master_log_ file=
'', master_log_pos= 4, master_bind=''.
start group_replication命令通常不會報告任何錯誤,並且可能需要更長的時間才能返回,這是因為當secondaries連接到主節點並開始與主節點協調時,很多工作都是在后台進行的。
10、確認集群狀態
select * from performance_schema.replication_group_members\G;
mysql> select * from performance_schema.replication_group_members\G;
*************************** 1. row ***************************
CHANNEL_NAME: group_replication_applier
MEMBER_ID: 577274f9-00e7-11eb-89e9-00505625f5f5
MEMBER_HOST: node01
MEMBER_PORT: 24801
MEMBER_STATE: ONLINE
MEMBER_ROLE: PRIMARY
MEMBER_VERSION: 8.0.18
*************************** 2. row ***************************
CHANNEL_NAME: group_replication_applier
MEMBER_ID: 75ad0e91-00e7-11eb-a505-005056320441
MEMBER_HOST: node02
MEMBER_PORT: 24802
MEMBER_STATE: ONLINE
MEMBER_ROLE: SECONDARY
MEMBER_VERSION: 8.0.18
*************************** 3. row ***************************
CHANNEL_NAME: group_replication_applier
MEMBER_ID: 7bf9c4cb-00e7-11eb-8cc3-00505625d41f
MEMBER_HOST: node03
MEMBER_PORT: 24803
MEMBER_STATE: ONLINE
MEMBER_ROLE: SECONDARY
MEMBER_VERSION: 8.0.18
3 rows in set (0.01 sec)
ERROR:
No query specified
10、關閉MGR集群(secondaries先,primary后)
node02:
mysql> stop group_replication;
Query OK, 0 rows affected (4.68 sec)
node03:
mysql> stop group_replication;
Query OK, 0 rows affected (4.68 sec)
node01:
mysql> stop group_replication;
Query OK, 0 rows affected (5.17 sec)
開啟MGR集群(primary先,secondaries后)
node01:
mysql> SET GLOBAL group_replication_bootstrap_group=ON;
Query OK, 0 rows affected (0.00 sec)
node02:
mysql> start group_replication;
node03:
mysql> start group_replication;
node01:
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
Query OK, 0 rows affected (0.00 sec)
node01查看集群狀態:
mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 577274f9-00e7-11eb-89e9-00505625f5f5 | node01 | 24801 | ONLINE | PRIMARY | 8.0.18 |
| group_replication_applier | 75ad0e91-00e7-11eb-a505-005056320441 | node02 | 24802 | ONLINE | SECONDARY | 8.0.18 |
| group_replication_applier | 7bf9c4cb-00e7-11eb-8cc3-00505625d41f | node03 | 24803 | ONLINE | SECONDARY | 8.0.18 |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
3 rows in set (0.00 sec)