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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章