Mysql(五)組複製的實現

1.什麼是組複製?

MySQL組複製是MySQL 5.7.17開始引入的新功能,爲主從複製實現高可用功能。它基於常規的MySQL複製,利用了基於行格式的二進制日誌和GTID等特性。下圖是MySQL組複製的整體框架圖。

它支持單主模型和多主模型兩種工作方式(默認是單主模型)。

  • 單主模型:從複製組中衆多個MySQL節點中自動選舉一個master節點,只有master節點可以寫,其他節點自動設置爲read only。當master節點故障時,會自動選舉一個新的master節點,選舉成功後,它將設置爲可寫,其他slave將指向這個新的master。
  • 多主模型:複製組中的任何一個節點都可以寫,因此沒有master和slave的概念,只要突然故障的節點數量不太多,這個多主模型就能繼續可用。

2.組複製的優點

  1. 可用性:通過將數據複製到多個位置來避免單點故障問題。
  2. 可伸縮性:應用程序可以通過向副本發送讀取操作並允許主服務器僅處理寫入操作來提供更多請求。
  3. 克服單一服務器限制:所有大用戶都將達到他們的數據不再適合單個服務器的程度。解決方案是在多個服務器之間對數據進行分片,並且需要複製來處理數據流,以便有效地進行切分。
  4. MySQL複製非常容易設置並且性能非常好,因此MySQL開發人員和DBA喜歡使用此功能來擴展,併爲其MySQL環境提供高可用性。

3.實現單主模式下的組複製

前提:三臺服務器

主庫:172.25.60.3

從庫1:172.25.60.1

從庫2:172.25.60.2

首先,安裝好三臺服務器上的mysql,查看/var/log/mysql/auto.conf 文件獲取 uuid

在主庫上

1.修改mysql配置文件如下:

server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW
plugin_load_add='group_replication.so' #將組複製插件添加到服務器在啓動時加載的插件列表中。
在生產部署中,這比手動安裝插件更好。
transaction_write_set_extraction=XXHASH64
group_replication_group_name="uuid"   #告訴插件其加入或創建的組的名稱爲uuid
group_replication_start_on_boot=off
group_replication_local_address= "172.25.60.3:33061"
group_replication_group_seeds= "主庫ip:33061,從庫1ip:33061,從庫2ip:33061" # 設置成員用於與組中其他成員進行內部通信的網絡地址和端口。
group_replication_bootstrap_group=off
loose-group_replication_ip_whitelist="127.0.0.1,172.25.60.0/24"
loose-group_replication_enforce_update_everywhere_checks=ON   #最後兩行是打開組複製的標識
loose-group_replication_single_primary_mode=OFF


2.然後重新啓動mysql並做好安全初始化,再登錄mysql

在mysql中:
SET SQL_LOG_BIN=0;  #如果禁用了二進制日誌記錄,則使用創建用戶後再次啓用它 SET SQL_LOG_BIN=1;
CREATE USER rpl_user@'%' IDENTIFIED BY 'password';  #創建用戶以用來進行復制
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%'; #給創建的用戶添加權限
mysql> FLUSH PRIVILEGES; #刷新

3.設置分佈式恢復:

CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';     #分佈式恢復是加入組且與組成員沒有相同事務集的服務器所採取的第一步。沒有設置的話,組成員無法加入。

4.啓動組複製:

在之前的配置文件中我們已經添加了相關插件,如果沒有可以手動添加:

INSTALL PLUGIN group_replication SONAME 'group_replication.so';

要檢查插件是否添加成功,可以 SHOW PLUGINS;

如果成功,則如下:


5.引導組

首次啓動組複製的過程稱爲引導,爲了安全的引導,需要在主庫mysql中:
 

SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;

一旦START GROUP_REPLICATION語句返回,該組就已經啓動。您可以檢查是否已創建該組,並且其中有一個成員:

形式如下:

在從庫上

1.配置/etc/my.cnf,除了以下兩行,其他與主庫一樣:

server_id=2
group_replication_local_address= "172.25.60.1:33061"

2.在mysql中:和主庫一樣的操作

SET SQL_LOG_BIN=0;  #先關閉二進制日誌
CREATE USER rpl_user@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
SET SQL_LOG_BIN=1;   #再打開二進制日誌
CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';
SET GLOBAL group_replication_bootstrap_group=ON;
mysql> START GROUP_REPLICATION;  #啓動組

此時再檢查組成員,應該有兩個。

另一各從庫操作和這個一樣,不同的地方:
 

server-id=3
group_replication_local_address= "172.25.60.2:33061"

至此,單主模式的組複製配主完成。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章