單主模式 下,組復制具有自動選主功能,每次只有壹個
server成員接受更新。單寫模式group內只有壹臺節點可寫可讀,其他節點只可以讀。對於group的部署,需要先跑起primary節點(即那個可寫可讀的節點,read_only=0)然後再跑起其他的節點,並把這些節點壹壹加進group。其他的節點就會自動同步primary節點上面的變化,然後將自己設置為只讀模式(read_only=1)。當primary節點意外宕機或者下線,在滿足大多數節點存活的情況下,group內部發起選舉,選出下壹個可用的讀節點,提升為primary節點。primary選舉根據group內剩下存活節點的UUID按字典序升序來選擇,即剩余存活的節點按UUID字典序排列,然後選擇排在最前的節點作為新的primary節點。
多主模式 下, 所有的 server 成員都可以同時接受更新。group內的所有機器都是primary節點,同時可以進行讀寫操作,並且數據是最終壹致的。
相關參數 : group_replication_single_primary_mode
是否啟動單主模式,如果啟動,則本實例是主庫,提供讀寫,其他實例僅提供讀
多主模式切換單主模式
# 所有節點執行
mysql> stop group_replication;
mysql>set global group_replication_enforce_update_everywhere_checks=OFF;
mysql>set global group_replication_single_primary_mode=on;
# 主節點(172.16.2.185)執行
set global group_replication_bootstrap_group=on;
start GROUP_REPLICATION;
set global group_replication_bootstrap_group=OFF;
# 從節點(3307、3308)執行
start GROUP_REPLICATION;
# 查看MGR組信息
mysql> select * from performance_schema.replication_group_members;
單主切換到多主模式
MGR切換模式需要重新啟動組復制,因些需要在所有節點上先關閉組復制,設置 group_replication_single_primary_mode=OFF 等參數,再啟動組復制。
# 停止組復制(所有節點執行):
mysql>stop group_replication;
mysql>set global group_replication_single_primary_mode=OFF;
mysql>set global group_replication_enforce_update_everywhere_checks=ON;
# 隨便選擇某個節點執行
mysql>SET GLOBAL? group_replication_bootstrap_group=ON;
mysql>START GROUP_REPLICATION;
mysql>SET GLOBAL? group_replication_bootstrap_group=OFF;
# 其他節點執行
mysql>STARTGROUP_REPLICATION;
msyql 5.7
# 查看MGR組信息
SELECT * FROM performance_schema.replication_group_members;
查看讀寫權限
select @@read_only, @@super_read_only;
show variables like 'read_only';
mysql 8.0
# 查看MGR組信息
mysql>SELECT * FROM performance_schema.replication_group_members;
可以看到所有節點狀態都是online,角色都是PRIMARY(mysql 8.0),MGR多主模式搭建成功。
驗證:讀寫權限
寫入數據測試: