閱讀576 返回首頁    go 阿裏雲 go 技術社區[雲棲]


如何將MySQL GR 設置為多主模式

在MySQL 5.7.17版本中發布的MySQL Group Replication(後文簡稱為MGR)被很多人稱為MySQL複製方案的正規軍,可以一舉取代現在的MySQL Replication,Semisynchronous replication,甚至是可以取代之前最成功的MySQL集群方案Galera。


MGR有兩種模式,一種是Single-Primary,一種是Multi-Primary,單主或者多主。


在前一種模式Single-Primary中,無論集群中有多少個節點,隻有一個節點允許寫入,其它節點都是隻讀的,這個允許寫入的節點被稱為主節點,隻有當這個主節點出現問題從集群中被踢出,才會在剩餘的節點中選舉出另外一個節點成為新的主節點,並且將該節點置為可寫模式。這個過程可以通過log清晰地看到。

640?wx_fmt=png&wxfrom=5&wx_lazy=1


在5.7.17的官方文檔中有詳細地描述如何設置Single-Primary MGR的方法。

Deploying Group Replication in Single-Primary Mode(https://dev.mysql.com/doc/refman/5.7/en/group-replication-deploying-in-single-primary-mode.html)


而在後一種模式Multi-Primary中,所有的節點都是主節點,都可以同時被讀寫,看上去這似乎更好,但是因為多主的複雜性,在功能上如果設置了多主模式,則會有一些使用的限製,比如不支持Foreign Keys with Cascading Constraints。


在多主模式下,集群中的節點退出集群,也不再會出現重新選舉的動作,因為本來所有的節點都是Primary節點。


但是不確認是什麼原因,在官方文檔中沒有單獨的章節來描述如何設置集群為Multi-Primary模式。隻是在最後語焉不詳地提及了一句:Multi-primary mode groups (members all configured with group_replication_single_primary_mode=OFF) 讓讀者可以知道跟group_replication_single_primary_mode參數有關。


以下為設置Multi-Primary MGR的方法。假設集群之前已經處於Single-Primary模式。


group_replication_single_primary_mode=ON,表示啟動了Single-Primary模式,那麼修改為OFF就意味著要啟動Multi-Primary模式。

640?wx_fmt=png&wxfrom=5&wx_lazy=1


如果MGR已經啟動,則無法動態修改該參數

640?wx_fmt=png&wxfrom=5&wx_lazy=1


首先停止複製

root@lh> stop GROUP_REPLICATION;

Query OK, 0 rows affected (8.67 sec) 


設置單主模式參數為off

root@lh > set global group_replication_single_primary_mode=off;

Query OK, 0 rows affected (0.00 sec)


該參數設置為ON,則禁用了在多主模式下一些可能產生未知數據衝突的操作

(root@lh) > set global group_replication_enforce_update_everywhere_checks=ON;

Query OK, 0 rows affected (0.00 sec) 


設置為第一個準備啟動MGR(bootstrap)的節點

root@lh> SET GLOBAL group_replication_bootstrap_group=ON;

Query OK, 0 rows affected (0.00 sec) 


啟動複製 

root@lh> START GROUP_REPLICATION;

Query OK, 0 rows affected (1.29 sec) 


 為了防止後續由於意外再啟動另外一個複製組,關閉bootstrap參數

root@lh]> SET GLOBAL group_replication_bootstrap_group=OFF;

Query OK, 0 rows affected (0.00 sec) 


此時可以從視圖中看到整個集群隻有一個節點是ONLINE

640?wx_fmt=png&wxfrom=5&wx_lazy=1


可以加入第二個節點了。

同樣設置單主模式參數為off

root@lh> set global group_replication_single_primary_mode=off;

Query OK, 0 rows affected (0.00 sec) 


設置update檢查參數為on

root@lh> set global group_replication_enforce_update_everywhere_checks=ON;

Query OK, 0 rows affected (0.00 sec) 


啟動複製

root@lh> start group_replication;

Query OK, 0 rows affected (5.42 sec) 


此時檢查視圖,可以發現集群中已經存在兩個節點

640?wx_fmt=png&wxfrom=5&wx_lazy=1


group_replication_primary_member值為空,表示啟動的是Multi-Primary Mode,否則該參數顯示的是單主模式中的Primary節點。

640?wx_fmt=png&wxfrom=5&wx_lazy=1


同樣的方法可以加入第三個節點,在當前版本中MGR最多支持一個集群中擁有9個節點。


如果需要在MySQL重啟之後這些參數仍然生效,那麼需要將這些參數加入到my.cnf文件中,一個典型的配置了MGR的my.cnf如下所示

640?wx_fmt=png&wxfrom=5&wx_lazy=1



本文出自數據和雲公眾號,原文鏈接


最後更新:2017-07-18 10:03:05

  上一篇:go  關於Oracle Sharding,你想知道的都在這裏
  下一篇:go  真實場景下Oracle Sharding的優勢比較和選擇