使用場景及限制
限制:比如寫集合沖突問題,必須要求有主鍵,只支持innodb,不支持外鍵、save point等,還有集群的強一致導致對網絡的要求較高,如果遇到網絡波動,對集群的影響較大。最大9個節點
使用場景:強一致性
事務
1.當一個事務准備在事務所在的server提交的時候,此server會原子性的廣播此事務所修改的值及所在行的標識到所有server;所有server會對提交的事務順序達成一個共識(consensus);當不同server並發對某一行數據進行變更時,有可能會產生沖突,certification進程會對沖突進行檢測並處理,處理的規則是:提交第一個事務,回滾第二個事務;
2.當在certify階段后應用日志的階段,group replication允許破壞certify進程達成的commit順序,只要不破壞數據的一致性及有效性
單主與多主模式
單主模式:group_replication_single_primary_mode = on,其他加入到集群的節點super_read_only參數默認會被設置為on,group_replication_enforce_update_everywhere_checks是強一致性檢查的開關,單主模式或者想切換為單主模式的時候,必須關掉此參數
選舉:1.版本(考慮到兼容性的問題,最低版本被選舉為主節點),2. group_replication_member_weight(權重,0-100,默認為50),3.最小server_uuid
多主模式:不支持外鍵和SERIALIZABLE 隔離級別 ,這兩個約束的檢查由此參數控制group_replication_enforce_update_everywhere_checks,多主模式目前還是支持性不強,因為某一節點的ddl還是會阻塞其他節點的增刪改;
節點之間的關系
1.組關系服務判定哪些節點是online,哪些節點正在加入集群,這些信息會被維護在一個視圖中,每一個節點中都會有一個這樣的共同維護的視圖,增加和刪除節點都會觸發視圖的變更;當一個節點自主離開組時,需要其他大多數節點達成一致意見變更視圖,當節點非自主離開組時,比如機器宕機或者網絡中斷,則會觸發failure detection機制,faliue detection機制會觸發視圖的變更;當一個組內大部分機器都宕機時,視圖的變更就不能得到大部分節點的同意,整個組的狀態為了避免腦裂就會處在阻塞狀態,這時候需要人工干涉;
2. group_replication_member_expel_timeout 防止被懷疑是失敗的成員,被提出集群前延長等待的時間
failure detection
節點間傳遞信息沒有得到答復,節點則會被懷疑為dead,當一個節點被其他節點懷疑為dead,此時此節點不能執行任何事務
group_replication_member_expel_timeout:設置從創建懷疑(在最初的5秒檢測周期之后發生)到驅逐成員之間的時間。可以設置最多1小時的等待時間。
group_replication_autorejoin_tries 使成員在被移出或無法到達的超時之后嘗試重新加入群組。該成員每隔5分鍾進行指定數量的自動重新聯接嘗試。
fault tolerance
單主模式的搭建

2.select * from performance_schema.replication_group_members\G;
3. select * from performance_schema.replication_connection_status\G;
4. select * from performance_schema.replication_applier_status\G;
一致性
主節點宕機:8.0.14之前,主節點宕機后會立馬選舉一個新的節點作為主節點,程序端則可以立馬對新節點進行讀寫,即使新的主節點並沒有追平數據,這樣就可能會讀到不一致的數據;8.0.14之后,可以有另一種選擇,復制組不提供寫服務直到新的節點完全應用舊主節點的日志,由參數group_replication_consistency控制(eventual,before,after,before and after,before_on_primary_failover)
3.新庫導入數據
4.CHANGE MASTER TO MASTER_USER='root', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';
5.start group_replication;
flow control
組復制要求事務在大部分節點接收並對並發事務的順序達成一致意見后才可以提交,正常情況下是可以實現的,但假設有一些性能較差的節點,這些節點將會和寫節點有較大的差距。
group_replication_flow_control_certifier_threshold
group_replication_flow_control_applier_threshold
group_replication_flow_control_mode=QUOTA (disabled)
這兩個參數默認為25000,當超過這個閾值時,將會觸發流控,限制主節點的寫入速度。開啟流控后,MGR的寫入能力由集群中性能最低的節點決定。
messages compression and messages fragmentation
STOP GROUP_REPLICATION;
SET GLOBAL group_replication_compression_threshold = 2097152;
START GROUP_REPLICATION;
此參數默認為1000000,可以調整為2m,表示當消息大小超過2m時,則壓縮消息
STOP GROUP_REPLICATION;
SET GLOBAL group_replication_communication_max_message_size= 5242880;
START GROUP_REPLICATION;