您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關在MySQL中的高可用集群方案MGR是怎樣的,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
最近絕地求生這個游戲太火了,當我問我的朋友們你們閑時在干嘛,基本上告訴我的答案都是在"吃雞"啊!想必很多老鐵們也玩,那一定應該知道絕地求生中有把槍叫AWM。此槍傷害裸132點,爆頭330,即使三級頭爆頭必死,無防彈衣或者防彈衣有破損,一槍死。是這個游戲中威力最大的狙擊×××,足足是98K的兩倍。
那么在MySQL領域有沒有這么一把威力超大的“槍”呢~答案是必須有啊!但先問你們一個問題。
請問你搭建MySQL復制的時候,還在執行備份恢復,在從庫進行change master to的操作嘛?如果是那你可就真的落后了。
今天介紹MySQL官方推薦的一款高可用集群方案MySQL Group Replication。簡稱:MGR(組復制)。它是官方推出的一種基于Paxos協議的狀態機復制,徹底解決了基于傳統的異步復制和半同步復制中數據一致性問題無法保證的情況。也讓MySQL數據庫涉及的領域更廣,徹底擁有了打開互聯網金融行業的大門。2016年12月 MySQL Group Replication推出了第一個GA版本發布在MySQL5.7.17中。但目前直接投入到生產環境中使用,風險還是比較大。建議等其越來越成熟之后,我們再真正投入使用。
隨著MySQL8.0版本即將與我們見面,再配合官方逐漸成熟的高可用集群 Group Replication方案,到那時再看看誰還是我們MySQL的對手,全都不在了!MySQL數據庫就是作者的信仰,愛你無怨無悔。
先來談談什么叫做組復制。組復制是一種可用于實現容錯系統的技術。復制組是一個通過消息傳遞相互交互的server集群。復制組由多個server成員組成,如下圖的master1,master2,master3,所有成員獨立完成各自的事務。當客戶端先發起一個更新事務,該事務先在本地執行,執行完成之后就要發起對事務的提交操作了。在還沒有真正提交之前需要將產生的復制寫集廣播出去,復制到其他成員。如果沖突檢測成功,組內決定該事務可以提交,其他成員可以應用,否則就回滾。最終,這意味著所有組內成員以相同的順序接收同一組事務。因此組內成員以相同的順序應用相同的修改,保證組內數據強一致性。
組復制可以在兩種模式下運行。 在單主模式下,組復制具有自動選主功能,每次只有一個 server成員接受更新,其他成員只提供讀服務。在多主模式下運行時,所有的 server 成員都可以同時接受更新,沒有主從之分,成員角色是完全對等的。 組復制默認情況下是單主模式,我們可以通過設置參數group_replication_single_primary_mode=off,讓其變成多主模式。本章的實戰部分就是以多主模式進行MGR復制的搭建。
完成了真正的多節點讀寫的集群方案。
基于原生復制及paxos協議的組復制技術,并以插件的方式提供,實現了數據的強一致性
由于是多節點讀寫,failover切換變得更加簡單
增加刪除節點,自動完成同步數據和更新組內信息的操作。擴展性地增強
雖然在MGR的多主模式下,受到不能支持串行隔離級別和不支持外鍵級聯操作的限制條件。而且目前MySQL版本中對DDL語句操作無法實現回滾,導致MGR無法對DDL語句做數據沖突檢驗,所以DDL語句在MGR中并發執行存在隱患。但這些都不能阻擋MGR的發布所帶來的開創新時代的意義。讓我們一起期待這個追求極致完美的MySQL數據庫,未來更加璀璨奪目。
環境介紹:這里我們準備三個節點,數據庫版本使用MySQL5.7.17
數據庫IP地址 數據庫版本信息 主機名 Server-id
192.168.56.101 MySQL-5.7.17 node2 1013306 192.168.56.102 MySQL-5.7.17 node3 1023306 192.168.56.103 MySQL-5.7.17 proxysql 1033306
實戰第1步:
在三個節點上執行安裝MySQL5.7操作。(此步省略,詳情請見書中第一部分第二章)
實戰第2步:
在三個節點上分別設置hostname和ip地址的映射關系
實戰第3步:
在三個節點上分別創建復制賬號,命令如下
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.56.%' IDENTIFIED BY '123456';
實戰第4步:
在三個節點上分別安裝GR插件,命令如下
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
組件安裝完成之后,展示結果:
root@db 13:23: [(none)]> show plugins;
實戰第5步:
在三個節點分別配置各自的集群參數文件,配置完成之后重啟數據庫
192.168.56.101參數文件配置展示:(剩下兩個節點同理)
server_id = 1013306 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 transaction_write_set_extraction = XXHASH64 loose-group_replication_group_name = '1f2cee29-f9a2-11e7-8cbb-08002783b39d' loose-group_replication_start_on_boot = off loose-group_replication_local_address = 'node2:33061' loose-group_replication_group_seeds ='node2:33061,node3:33062,proxysql:33063' loose-group_replication_bootstrap_group = off loose-group_replication_single_primary_mode=off loose-group_replication_enforce_update_everywhere_checks=true
重點參數詳解:(一定要記住這些)
MGR一定要開啟GTID功能gtid_mode = ON,enforce_gtid_consistency = ON
MGR在當前MySQL版本中,必須要設置binlog_checksum=none
,并且binlog_format=row
MGR需要多源復制功能,所以需要將主從庫之間的信息記錄到表中。設置master_info_repository = TABLE
和relay_log_info_repository = TABLE
MGR中開啟主鍵信息采集功能:transaction_write_set_extraction= XXHASH64
MGR中把該參數group_replication_single_primary_mode
關閉目的是搭建多主模式。如果搭建單主模型,保持默認參數即可。
MGR中需要設置組的名字,該group_replication_group_name
是通過select uuid()
來生成的。
MGR中本地成員的地址由該參數group_replication_local_address
決定,本例中當前節點是node2。后面的端口是每個節點都需要一個獨立的tcp端口號,節點之間通過這個端口號進行通信。
MGR中其他成員的地址由這個參數group_replication_group_seeds
決定
MGR采取多主模式時,需要讓該參數group_replication_single_primary_mode=off
(默認是單主模式)。
于此同時需要將該參數group_replication_enforce_update_everywhere_checks=true
。目的是為了做多主模式限制檢測。
注:加載到參數文件里面,需要在每個參數的前面加loose。
這里再強調一個參數group_replication_auto_increment_increment
。該參數代表自增屬性,默認值為7。我們要保證每個成員的該值相同,并且建議該參數的設置盡量比組內成員的個數大一些,方便后期集群的擴展。
實戰第6步:
在192.168.56.101上啟動首個節點的MGR集群服務。命令如下:
CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery'
(MGR需要該異步復制通道,實現新節點加入集群自動從其他節點復制數據的目的,不需要手工指定從哪個節點復制,master_host和master_port信息。都是自動完成)
SET GLOBAL group_replication_bootstrap_group = ON;
(執行初始化操作,只有首個節點需要這一步操作)
START GROUP_REPLICATION;
啟動成功之后,查看節點狀態信息。命令如下
SELECT * FROM performance_schema.replication_group_members;
關閉初始化操作 命令如下:
SET GLOBAL group_replication_bootstrap_group = off;
注:replication_group_members表中MEMBER_STATE字段狀態為ONLINE,再執行關閉初始化命令。
實戰第7步:
在192.168.56.102上面啟動第二個節點的mgr集群服務。命令如下
CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery'; set global group_replication_allow_local_disjoint_gtids_join=ON; START GROUP_REPLICATION;
啟動成功之后,查看節點狀態信息。命令如下
SELECT * FROM performance_schema.replication_group_members;
實戰第8步:
在192.168.56.103上面啟動第三個節點的mgr集群服務。命令如下
CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery'; set global group_replication_allow_local_disjoint_gtids_join=ON; START GROUP_REPLICATION;
啟動成功之后,查看節點狀態信息。命令如下:
SELECT * FROM performance_schema.replication_group_members;
可見啟動成功之后,三個成員的狀態都是ONLINE,證明已經開始正常工作了。真正可以實現多節點的讀寫操作了。
以上就是在MySQL中的高可用集群方案MGR是怎樣的,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。