mysql的組複製

                                                     mysql的組複製

先說說數據庫複製的各種形式

異步複製模式下,Master上執行事務產生 binlog,slave 通過連接 master 抓取 binlog 的內容接收到本地的 relaylog 上,然後 apply 對應的事務,產生 slave 服務器上自身的 binlog(由--log-slave-update 參數決定)。流程圖如下:

Screenshot from 2018-06-11 16-13-45.png

其次是半同步複製,流程圖如下

Screenshot from 2018-06-11 16-15-21.png

異步複製模式下,如果 slave 全部宕機,則在 master 上的事務無法同步到 slave 上,存在一定的數據安全風險。


半 同步複製解決了數據安全風險的問題,在半同步環境下要求至少有一臺 slave 接收到 master 的binlog併成功寫入到本地的 relaylog, master 上的事務纔可以成功提交,這樣對主庫的事務提交速度會產生一定影響,半同步在數據安全和數據庫性能兩者之間做了一箇中和。


在實際使用過程中,可以通過配置參數(rpl_semi_sync_master_timeout 單位是毫秒,默認爲10000,即10s)設定若 slave 在多長時間沒有ack返回,同步模式由半同步自動修改爲異步同步模式。


組複製分單主模式和多主模式,mysql 的複製技術僅解決了數據同步的問題,如果 master 宕機,意味着數據庫管理員需要介入,應用系統可能需要修改數據庫連接地址或者重啓才能實現。

Screenshot from 2018-06-11 16-17-24.png


組複製的特點:

● 高一致性

基於原生複製及 paxos 協議的組複製技術,並以插件的方式提供,提供一致數據安全保證;


● 高容錯性

只要不是大多數節點壞掉就可以繼續工作,有自動檢測機制,當不同節點產生資源爭用衝突時,不會出現錯誤,按照先到者優先原則進行處理,並且內置了自動化腦裂防護機制;


● 高擴展性

節點的新增和移除都是自動的,新節點加入後,會自動從其他節點上同步狀態,直到新節點和其他節點保持一致,如果某節點被移除了,其他節點自動更新組信息,自動維護新的組信息;


● 高靈活性

有單主模式和多主模式,單主模式下,會自動選主,所有更新操作都在主上進行;

多主模式下,所有 server 都可以同時處理更新操作。


目前組複製最多支持一個組中有 9 個 server

做組複製時,注意做好解析/etc/hosts,關閉密碼插件,在 /etc/my.conf 中寫入,

validate_password=OFF
或是在vim /etc/init.d/mysqld 進行註釋

Screenshot from 2018-06-13 21-05-14.png


實驗:

server1    192.168.122.11

server2    192.168.122.12

server3    192.168.122.13


一、配置文件

/etc/my.cnf  

server2,3的配置文件區別僅在於 server-id 與 local_address

Screenshot from 2018-06-13 22-45-05.png

複製框架

設置將 server 配置爲使用唯一標識號 1,以啓用全局事務標識符,並將複製元數據存儲在系統表(而不是文件)中。 此外,它設置 server 打開二進制日誌記錄,使用基於行的格式並禁用二進制日誌事件校驗和。


組複製設置

Screenshot from 2018-06-13 22-45-10.png

第 1 行指示 server 必須爲每個事務收集寫集合,並使用 XXHASH64 哈希算法將其編碼爲散列。

第 2 行告知插件,正在加入或創建的組要命名爲“aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa”。

第 3 行指示插件在 server 啓動時不自動啓動組複製。

第 4 行告訴插件使用 本地主機或IP 地址 127.0.0.1 ,端口 24091 用於接受來自組中其他成員的傳入連接。

第 5 行告訴插件,當下面這些 server 需要加入組時,應該連接到這些主機和端口上訪問他們,這些就是種子成員。

第 6 行指示插件是否自動引導組。此選項在任何時候只能在一個 server 實例上使用,通常是首次引導組時(或在整個組被崩潰然後恢復的情況下)。 如果您多次引導組,例如,當多個 server 實例設置了此選項,則它們可能會人爲地造成腦裂的情況,其中存在兩個具有相同名稱的不同組。 在第一個server 實例加入組後禁用此選項。


二、數據庫配置


1.用戶憑據

分佈式恢復過程依賴於 group_replication_recovery 複製通道,該複製通道用於在組成員之間傳輸事務。 因此,需要設置具有正確權限的複製用戶,以便組複製可以直接建立成員到成員的恢復複製通道。

mysql> SET SQL_LOG_BIN=0;    關閉二進制日誌

mysql> grant replication slave on *.* to rpl_user@'%' identified by 'LH=liuhuan123';    創建 rpl_user 用戶並且授權使之可以進行復制功能

mysql> flush privileges; 

mysql> SET SQL_LOG_BIN=1;    開啓二進制日誌

mysql> change master to master_user='rpl_user',master_password='LH=liuhuan123' for channel 'group_replication_recovery';    下次需要從其他成員恢復其狀態時,使用 group_replication_recovery 複製通道的給定憑據.。


2.啓動組複製


mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';    安裝插件

mysql> SET GLOBAL group_replication_bootstrap_group=ON;    server1引導組,啓動組複製程序,只用在組複製成員中執行一次即可。不可將此參數寫在配置文件中,因爲在下一次啓動組複製時,會有兩個不同的組有相同的名稱。

mysql> START GROUP_REPLICATION;    啓動 server1的組複製

mysql> SET GLOBAL group_replication_bootstrap_group=OFF;    將引導組複製的程序關閉,其餘成員直接加入該組即可。


mysql> SELECT * FROM performance_schema.replication_group_members;  查看

Screenshot from 2018-06-13 23-07-02.png



三、向組中添加實例


server2端

mysql> SET SQL_LOG_BIN=0;
mysql> grant replication slave on *.* to rpl_user@'%' identified by 'LH=liuhuan123';
mysql> SET SQL_LOG_BIN=1;
mysql> CHANGE MASTER TO MASTER_USER='rpl_user',MASTER_PASSWORD='LH=liuhuan123' for CHANNEL 'group_replication_recovery';

mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';    安裝插件

mysql> start group_replication;    將 server2 添加到組

Screenshot from 2018-06-13 23-14-26.png

查日誌得:

Screenshot from 2018-06-13 23-15-49.png


上網查找(網站 bing.com)

Screenshot from 2018-06-13 23-17-11.png


Screenshot from 2018-06-13 23-18-40.png

server3同理,查看mysql> SELECT * FROM performance_schema.replication_group_members;


Screenshot from 2018-06-13 23-20-27.png


四、高可用驗證


1、驗證數據寫入

server1端,寫入數據

Screenshot from 2018-06-13 23-24-11.png

server2,3端查看

Screenshot from 2018-06-13 23-25-21.png


2、模擬宕機一個節點驗證


關閉server2

Screenshot from 2018-06-13 23-28-39.png

Screenshot from 2018-06-13 23-28-53.png

在server1寫入數據

Screenshot from 2018-06-13 23-29-44.png

啓動server2

Screenshot from 2018-06-13 23-30-42.png

再次查看組成員,發現server2已重新加入組

Screenshot from 2018-06-13 23-31-30.png


查看數據,發現數據已同步

Screenshot from 2018-06-13 23-32-20.png




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