在MySQL 5.7.17版本中釋出的MySQL Group Replication(後文簡稱為MGR)被很多人稱為MySQL複制方案的正規軍,可以一舉取代現在的MySQL Replication,Semisynchronous replication,甚至是可以取代之前最成功的MySQL叢集方案Galera。
MGR有兩種模式,一種是Single-Primary,一種是Multi-Primary,單主或者多主。
在前一種模式Single-Primary中,無論叢集中有多少個節點,隻有一個節點允許寫入,其它節點都是隻讀的,這個允許寫入的節點被稱為主節點,隻有當這個主節點出現問題從叢集中被踢出,才會在剩餘的節點中選舉出另外一個節點成為新的主節點,并且将該節點置為可寫模式。這個過程可以通過log清晰地看到。

在5.7.17的官方文檔中有詳細地描述如何設定Single-Primary MGR的方法。
而在後一種模式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模式。
如果MGR已經啟動,則無法動态修改該參數
首先停止複制
[email protected]> stop GROUP_REPLICATION;
Query OK, 0 rows affected (8.67 sec)
設定單主模式參數為off
ro[email protected] > set global group_replication_single_primary_mode=off;
Query OK, 0 rows affected (0.00 sec)
該參數設定為ON,則禁用了在多主模式下一些可能産生未知資料沖突的操作
([email protected]) > set global group_replication_enforce_update_everywhere_checks=ON;
Query OK, 0 rows affected (0.00 sec)
設定為第一個準備啟動MGR(bootstrap)的節點
[email protected]> SET GLOBAL group_replication_bootstrap_group=ON;
Query OK, 0 rows affected (0.00 sec)
啟動複制
[email protected]> START GROUP_REPLICATION;
Query OK, 0 rows affected (1.29 sec)
為了防止後續由于意外再啟動另外一個複制組,關閉bootstrap參數
[email protected]]> SET GLOBAL group_replication_bootstrap_group=OFF;
Query OK, 0 rows affected (0.00 sec)
此時可以從視圖中看到整個叢集隻有一個節點是ONLINE
可以加入第二個節點了。
同樣設定單主模式參數為off
r[email protected]> set global group_replication_single_primary_mode=off;
Query OK, 0 rows affected (0.00 sec)
設定update檢查參數為on
[email protected]> set global group_replication_enforce_update_everywhere_checks=ON;
Query OK, 0 rows affected (0.00 sec)
啟動複制
[email protected]> start group_replication;
Query OK, 0 rows affected (5.42 sec)
此時檢查視圖,可以發現叢集中已經存在兩個節點
group_replication_primary_member值為空,表示啟動的是Multi-Primary Mode,否則該參數顯示的是單主模式中的Primary節點。
同樣的方法可以加入第三個節點,在目前版本中MGR最多支援一個叢集中擁有9個節點。
如果需要在MySQL重新開機之後這些參數仍然生效,那麼需要将這些參數加入到my.cnf檔案中,一個典型的配置了MGR的my.cnf如下所示
文章來自微信公衆号:資料和雲
本文連結:http://www.yunweipai.com/13988.html