一、配置組復制的步驟 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)