老司機帶你在MySQL領域“大吉大利,晚上吃雞”

來源:互聯網
上載者:User

標籤:MySQL   MGR   

老張superzs來更新部落格啦,大家新年好啊,好久沒有跟大家見面了。說句走心的話,很想你們!最近因為要出版自己的第一本書《MySQL王者晉級之路》一直在忙於宣傳。實在抱歉,沒能及時更博。今後還是會多奉獻精彩文章!

最近絕地求生這個遊戲太火了,當我問我的朋友們你們閑時在幹嘛,基本上告訴我的答案都是在"吃雞"啊!想必很多老鐵們也玩,那一定應該知道絕地求生中有把槍叫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資料庫就是作者的信仰,愛你無怨無悔。

MGR組複製原理

先來談談什麼叫做組複製。組複製是一種可用於實現容錯系統的技術。複製組是一個通過訊息傳遞相互互動的server叢集。複製組由多個server成員組成,如的master1,master2,master3,所有成員獨立完成各自的事務。當用戶端先發起一個更新事務,該事務先在本地執行,執行完成之後就要發起對事務的提交操作了。在還沒有真正提交之前需要將產生的複製寫集廣播出去,複製到其他成員。如果衝突檢測成功,組內決定該事務可以提交,其他成員可以應用,否則就復原。最終,這意味著所有組內成員以相同的順序接收同一組事務。因此組內成員以相同的順序應用相同的修改,保證組內資料強一致性。

MGR組複製模式

組複製可以在兩種模式下運行。 在單主模式下,組複製具有自動選主功能,每次只有一個 server成員接受更新,其他成員只提供讀服務。在多主模式下運行時,所有的 server 成員都可以同時接受更新,沒有主從之分,成員角色是完全對等的。 組複製預設情況下是單主模式,我們可以通過設定參數group_replication_single_primary_mode=off,讓其變成多主模式。本章的實戰部分就是以多主模式進行MGR複製的搭建。

MGR特性介紹
  1. 完成了真正的多節點讀寫的叢集方案。
  2. 基於原生複製及paxos協議的組複製技術,並以外掛程式的方式提供,實現了資料的強一致性
  3. 由於是多節點讀寫,failover切換變得更加簡單
  4. 增加刪除節點,自動完成同步資料和更新群組內資訊的操作。擴充性地增強
    雖然在MGR的多主模式下,受到不能支援串列隔離等級和不支援外鍵級聯操作的限制條件。而且目前MySQL版本中對DDL語句操作無法實現復原,導致MGR無法對DDL語句做資料衝突檢驗,所以DDL語句在MGR中並發執行存在隱患。但這些都不能阻擋MGR的發布所帶來的開創新時代的意義。讓我們一起期待這個追求極致完美的MySQL資料庫,未來更加璀璨奪目。
MGR搭建實戰演練
環境介紹:這裡我們準備三個節點,資料庫版本使用MySQL5.7.17

資料庫IP地址 資料庫版本資訊 主機名稱 Server-id

192.168.56.101  MySQL-5.7.17    node2   1013306192.168.56.102  MySQL-5.7.17    node3   1023306192.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‘;

組件安裝完成之後,展示結果:

[email protected] 13:23:  [(none)]> show plugins;


實戰第5步:
在三個節點分別配置各自的叢集參數檔案,配置完成之後重啟資料庫
192.168.56.101參數檔案配置展示:(剩下兩個節點同理)

Group Replication
server_id = 1013306gtid_mode = ONenforce_gtid_consistency = ONmaster_info_repository = TABLErelay_log_info_repository = TABLEbinlog_checksum = NONElog_slave_updates = ONlog_bin = binlogbinlog_format= ROWtransaction_write_set_extraction = XXHASH64loose-group_replication_group_name = ‘1f2cee29-f9a2-11e7-8cbb-08002783b39d‘loose-group_replication_start_on_boot = offloose-group_replication_local_address = ‘node2:33061‘loose-group_replication_group_seeds =‘node2:33061,node3:33062,proxysql:33063‘loose-group_replication_bootstrap_group = offloose-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 = TABLErelay_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,證明已經開始正常工作了。真正可以實現多節點的讀寫操作了。

以上就是對於MGR多主模式的原理介紹及其搭建過程。我們要有一種學習新知識的能力,多實操,多演練,從中得到其真諦,感受MySQL給我們帶來的簡單快樂!今後還會多發布更多技術的文章,大家多溝通交流!

老司機帶你在MySQL領域“大吉大利,晚上吃雞”

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.