天天看點

MySQL Group Replication實踐MySQL Group Replication實踐

MySQL Group Replication實踐

Group Replication直接翻譯過來就是組複制,是基于組的複制(Group-based Replication)技術,和galera叢集可以相提并論,在應用場景中可以實作高可用。

Replication-group(複制組)是由能夠互相通信的多個伺服器(節點)組成的。一個Replication-group就是一組節點,每個節點都可以獨立執行事務,而讀寫事務則會在于group内的其他節點進行協調之後再commit。

2016年12月12日,在MySQL 5.7.17中,Group Replication GA。

下載下傳最新的MySQL5.7.17版本,進行測試:

準備工作,GroupReplication有很多限制,需要将以下幾個參數加入到配置檔案中。

gtid_mode = ON

enforce_gtid_consistency = ON

master_info_repository = TABLE

relay_log_info_repository = TABLE

binlog_checksum = NONE

transaction_write_set_extraction = XXHASH64

slave_parallel_type = LOGICAL_CLOCK

slave_preserve_commit_order = ON

也可以啟動後通過set global這種方式來設定,其中gtid_mode和enforce_gtid_consistency為不可動态動态修改參數

$ mysqld --defaults-file=mysql4307.cnf --initialize-insecure #初始化資料庫并且不生成密碼

$ mysqld --defaults-file=mysql4307.cnf & #啟動資料庫

$ uuidgen #生成uuid,用作後面group_replication_name

929c33d5-bdd8-44fa-87be-ae9f8e96d0f2

在第一個節點上操作:

mysql> INSTALL PLUGIN group_replication SONAME "group_replication.so";

mysql> SET GLOBAL group_replication_group_name = "929c33d5-bdd8-44fa-87be-ae9f8e96d0f2”;

mysql> SET GLOBAL group_replication_local_address = "192.168.1.1:13306";

mysql> SET GLOBAL group_replication_bootstrap_group = ON; #隻在第一個節點設定,叢集啟動後需要将該參數關閉

mysql> START GROUP_REPLICATION;

mysql> GRANT replication_slave on *.* to repl@’%’ identified by‘repl4slave’; FLUSH PRIVILEGES;

在第後續節點上操作:

mysql> INSTALL PLUGIN group_replication SONAME "group_replication.so";

mysql> SET GLOBAL group_replication_group_name = "929c33d5-bdd8-44fa-87be-ae9f8e96d0f2”;

mysql> SET GLOBAL group_replication_local_address = "192.168.1.2:13306";

mysql> SET GLOBAL group_replication_group_seeds = "192.168.1.1:13306";

mysql> CHANGE MASTER TO MASTER_USER="repl",MASTER_PASSWORD="repl4slave" FOR CHANNEL"group_replication_recovery";

mysql> START GROUP_REPLICATION;

如果無法啟動,請檢視錯誤日志,裡面說明的相關原因。

為了友善,我們可以把參數寫入到配置檔案中,可以省去多數配置步驟。

plugin-load = group_replication.so

group_replication_single_primary_mode = OFF

group_replication_start_on_boot = OFF

group_replication_group_name   = "929c33d5-bdd8-44fa-87be-ae9f8e96d0f2”

group_replication_local_address = '10.11.8.39:24902'

group_replication_group_seeds  = '10.11.8.38:24901,10.11.8.39:24901'

說明:

group_replication_single_primary_mode 是否隻有一個主可寫,設定為ON時,其它節點不可寫

group_replication_start_on_boot 是否在mysql啟動時同時啟動Group Replication

group_replication_bootstrap_group 是否為Group Replication的引導節點,叢集中第一個節點需要設定為ON來啟動Group Replication

經過測試,也是操作失誤,發現了一個問題,就是用CRT同時向2個執行個體中發送指令,drop database xxx,竟然2個執行個體中資料庫全部删除,随之就開始報錯,無法進行同步。同時也找出了在出錯時,沒有重要資料情況下或資料庫量少,快速恢複但為叢集的辦法(請勿在生産環境中使用,後果自負)。

mysql> stop group_replication;

mysql> reset master;

mysql> start group_replication;

$ mysql < backup.sql

繼續閱讀