MySQL 8.0.1 開始支持多源復制,即可以通過一個slave服務器從多個master服務器同步數據。這就為MySQL集群架構提供了更多的可能。MySQL 8也引入了MGR( MySQL Group Replication) 集群解決方案。
set global group_replication_beta_group=ON; CREATE SERVER 'mysql-1' FOREIGN DATA WRAPPER 'mysql' OPTIONS (USER 'group_replication_user', HOST 'mysql-1.example.com', PASSWORD 'password', PORT 3306, SSL '1', SSL_CA '/path/to/ca.pem', SSL_CERT '/path/to/client-cert.pem', SSL_KEY '/path/to/client-key.pem'); CREATE SERVER 'mysql-2' FOREIGN DATA WRAPPER 'mysql' OPTIONS (USER 'group_replication_user', HOST 'mysql-2.example.com', PASSWORD 'password', PORT 3306, SSL '1', SSL_CA '/path/to/ca.pem', SSL_CERT '/path/to/client-cert.pem', SSL_KEY '/path/to/client-key.pem'); CREATE SERVER 'mysql-3' FOREIGN DATA WRAPPER 'mysql' OPTIONS (USER 'group_replication_user', HOST 'mysql-3.example.com', PASSWORD 'password', PORT 3306, SSL '1', SSL_CA '/path/to/ca.pem', SSL_CERT '/path/to/client-cert.pem', SSL_KEY '/path/to/client-key.pem'); CREATE FUNCTION group_replication_get_primary_view() RETURNS INTEGER SONAME 'group_replication.so'; CREATE FUNCTION group_replication_member_count() RETURNS INTEGER SONAME 'group_replication.so'; CREATE FUNCTION group_replication_members() RETURNS INTEGER SONAME 'group_replication.so'; CREATE FUNCTION group_replication_leader_member() RETURNS INTEGER SONAME 'group_replication.so'; CREATE FUNCTION group_replication_exit_state_action() RETURNS INTEGER SONAME 'group_replication.so'; CREATE PROCEDURE group_replication_reset_channel() BEGIN RESET MASTER; RESET SLAVE; RESET SLAVE ALL; END;
MGR 集群解決方案使用了基于組的復制技術,類似于Galera和InnoDB集群插件。其主要特點是支持多主寫入、無共享存儲系統以及高可用性、自動故障轉移等功能。MGR 集群的實現方式是將多臺MySQL實例組成一個" MySQL Group ",通過增加新的MySQL實例來擴展集群節點。MGR 集群通過選舉算法來選出主節點,所有寫入請求都由主節點處理,從節點只進行讀取操作。
MGR集群可以通過內置的擴展函數和存儲過程來管理集群。例如,使用 group_replication_get_primary_view() 函數可以得到當前的主節點信息;使用 group_replication_members() 函數可以查看集群成員的列表;使用 group_replication_reset_channel() 存儲過程可以重置checkpoint。與 Galera 類似,MGR 也支持副本節點的延遲,通過配置 group_replication_group_name 和 group_replication_group_seeds 參數來實現。
總的來說,MGR 集群為MySQL集群架構大幅度提升了實力,通過內置的復制、選舉算法等技術,實現了可靠性、高可用、自動故障轉移等功能。同時,MGR 集群的部署也非常簡便,只需要在每個節點上啟用組復制插件,并通過 MySQL Shell 進行集群配置,就可以快速創建一個MGR 集群。