新聞中心
最近絕地求生這個(gè)游戲太火了,當(dāng)我問我的朋友們你們閑時(shí)在干嘛,基本上告訴我的答案都是在"吃雞"??!想必很多老鐵們也玩,那一定應(yīng)該知道絕地求生中有把槍叫AWM。此槍傷害裸132點(diǎn),爆頭330,即使三級(jí)頭爆頭必死,無防彈衣或者防彈衣有破損,一槍死。是這個(gè)游戲中威力最大的狙擊×××,足足是98K的兩倍。

創(chuàng)新互聯(lián)建站主要從事網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)合陽,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792
那么在MySQL領(lǐng)域有沒有這么一把威力超大的“槍”呢~答案是必須有??!但老張先問你們一個(gè)問題。
請(qǐng)問你搭建MySQL復(fù)制的時(shí)候,還在執(zhí)行備份恢復(fù),在從庫進(jìn)行change master to的操作嘛?如果是那你可就真的落后了。
本章介紹MySQL官方推薦的一款高可用集群方案MySQL Group Replication。簡(jiǎn)稱:MGR(組復(fù)制)。它是官方推出的一種基于Paxos協(xié)議的狀態(tài)機(jī)復(fù)制,徹底解決了基于傳統(tǒng)的異步復(fù)制和半同步復(fù)制中數(shù)據(jù)一致性問題無法保證的情況。也讓MySQL數(shù)據(jù)庫涉及的領(lǐng)域更廣,徹底擁有了打開互聯(lián)網(wǎng)金融行業(yè)的大門。2016年12月 MySQL Group Replication推出了第一個(gè)GA版本發(fā)布在MySQL5.7.17中。但目前直接投入到生產(chǎn)環(huán)境中使用,風(fēng)險(xiǎn)還是比較大。建議等其越來越成熟之后,我們?cè)僬嬲度胧褂谩?/p>
隨著MySQL8.0版本即將與我們見面,再配合官方逐漸成熟的高可用集群 Group Replication方案,到那時(shí)再看看誰還是我們MySQL的對(duì)手,全都不在了!MySQL數(shù)據(jù)庫就是作者的信仰,愛你無怨無悔。
MGR組復(fù)制原理
先來談?wù)勈裁唇凶鼋M復(fù)制。組復(fù)制是一種可用于實(shí)現(xiàn)容錯(cuò)系統(tǒng)的技術(shù)。復(fù)制組是一個(gè)通過消息傳遞相互交互的server集群。復(fù)制組由多個(gè)server成員組成,如下圖的master1,master2,master3,所有成員獨(dú)立完成各自的事務(wù)。當(dāng)客戶端先發(fā)起一個(gè)更新事務(wù),該事務(wù)先在本地執(zhí)行,執(zhí)行完成之后就要發(fā)起對(duì)事務(wù)的提交操作了。在還沒有真正提交之前需要將產(chǎn)生的復(fù)制寫集廣播出去,復(fù)制到其他成員。如果沖突檢測(cè)成功,組內(nèi)決定該事務(wù)可以提交,其他成員可以應(yīng)用,否則就回滾。最終,這意味著所有組內(nèi)成員以相同的順序接收同一組事務(wù)。因此組內(nèi)成員以相同的順序應(yīng)用相同的修改,保證組內(nèi)數(shù)據(jù)強(qiáng)一致性。
MGR組復(fù)制模式
組復(fù)制可以在兩種模式下運(yùn)行。 在單主模式下,組復(fù)制具有自動(dòng)選主功能,每次只有一個(gè) server成員接受更新,其他成員只提供讀服務(wù)。在多主模式下運(yùn)行時(shí),所有的 server 成員都可以同時(shí)接受更新,沒有主從之分,成員角色是完全對(duì)等的。 組復(fù)制默認(rèn)情況下是單主模式,我們可以通過設(shè)置參數(shù)group_replication_single_primary_mode=off,讓其變成多主模式。本章的實(shí)戰(zhàn)部分就是以多主模式進(jìn)行MGR復(fù)制的搭建。
MGR特性介紹
- 完成了真正的多節(jié)點(diǎn)讀寫的集群方案。
- 基于原生復(fù)制及paxos協(xié)議的組復(fù)制技術(shù),并以插件的方式提供,實(shí)現(xiàn)了數(shù)據(jù)的強(qiáng)一致性
- 由于是多節(jié)點(diǎn)讀寫,failover切換變得更加簡(jiǎn)單
- 增加刪除節(jié)點(diǎn),自動(dòng)完成同步數(shù)據(jù)和更新組內(nèi)信息的操作。擴(kuò)展性地增強(qiáng)
雖然在MGR的多主模式下,受到不能支持串行隔離級(jí)別和不支持外鍵級(jí)聯(lián)操作的限制條件。而且目前MySQL版本中對(duì)DDL語句操作無法實(shí)現(xiàn)回滾,導(dǎo)致MGR無法對(duì)DDL語句做數(shù)據(jù)沖突檢驗(yàn),所以DDL語句在MGR中并發(fā)執(zhí)行存在隱患。但這些都不能阻擋MGR的發(fā)布所帶來的開創(chuàng)新時(shí)代的意義。讓我們一起期待這個(gè)追求極致完美的MySQL數(shù)據(jù)庫,未來更加璀璨奪目。
MGR搭建實(shí)戰(zhàn)演練
環(huán)境介紹:這里我們準(zhǔn)備三個(gè)節(jié)點(diǎn),數(shù)據(jù)庫版本使用MySQL5.7.17
數(shù)據(jù)庫IP地址 數(shù)據(jù)庫版本信息 主機(jī)名 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
實(shí)戰(zhàn)第1步:
在三個(gè)節(jié)點(diǎn)上執(zhí)行安裝MySQL5.7操作。(此步省略,詳情請(qǐng)見書中第一部分第二章)
實(shí)戰(zhàn)第2步:
在三個(gè)節(jié)點(diǎn)上分別設(shè)置hostname和ip地址的映射關(guān)系
實(shí)戰(zhàn)第3步:
在三個(gè)節(jié)點(diǎn)上分別創(chuàng)建復(fù)制賬號(hào),命令如下
- GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.56.%' IDENTIFIED BY '123456';
實(shí)戰(zhàn)第4步:
在三個(gè)節(jié)點(diǎn)上分別安裝GR插件,命令如下
- INSTALL PLUGIN group_replication SONAME 'group_replication.so';
組件安裝完成之后,展示結(jié)果:
- root@db 13:23: [(none)]> show plugins;
實(shí)戰(zhàn)第5步:
在三個(gè)節(jié)點(diǎn)分別配置各自的集群參數(shù)文件,配置完成之后重啟數(shù)據(jù)庫
192.168.56.101參數(shù)文件配置展示:(剩下兩個(gè)節(jié)點(diǎn)同理)
Group Replication
- 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
重點(diǎn)參數(shù)詳解:(一定要記住這些)
MGR一定要開啟GTID功能gtid_mode = ON,enforce_gtid_consistency = ON
MGR在當(dāng)前MySQL版本中,必須要設(shè)置binlog_checksum=none,并且binlog_format=row
MGR需要多源復(fù)制功能,所以需要將主從庫之間的信息記錄到表中。設(shè)置master_info_repository = TABLE和relay_log_info_repository = TABLE
MGR中開啟主鍵信息采集功能:transaction_write_set_extraction= XXHASH64
MGR中把該參數(shù)group_replication_single_primary_mode關(guān)閉目的是搭建多主模式。如果搭建單主模型,保持默認(rèn)參數(shù)即可。
MGR中需要設(shè)置組的名字,該group_replication_group_name是通過select uuid()來生成的。
MGR中本地成員的地址由該參數(shù)group_replication_local_address決定,本例中當(dāng)前節(jié)點(diǎn)是node2。后面的端口是每個(gè)節(jié)點(diǎn)都需要一個(gè)獨(dú)立的tcp端口號(hào),節(jié)點(diǎn)之間通過這個(gè)端口號(hào)進(jìn)行通信。
MGR中其他成員的地址由這個(gè)參數(shù)group_replication_group_seeds決定
MGR采取多主模式時(shí),需要讓該參數(shù)group_replication_single_primary_mode=off(默認(rèn)是單主模式)。
于此同時(shí)需要將該參數(shù)group_replication_enforce_update_everywhere_checks=true。目的是為了做多主模式限制檢測(cè)。
注:加載到參數(shù)文件里面,需要在每個(gè)參數(shù)的前面加loose。
這里再強(qiáng)調(diào)一個(gè)參數(shù)group_replication_auto_increment_increment。該參數(shù)代表自增屬性,默認(rèn)值為7。我們要保證每個(gè)成員的該值相同,并且建議該參數(shù)的設(shè)置盡量比組內(nèi)成員的個(gè)數(shù)大一些,方便后期集群的擴(kuò)展。
實(shí)戰(zhàn)第6步:
在192.168.56.101上啟動(dòng)首個(gè)節(jié)點(diǎn)的MGR集群服務(wù)。命令如下:
- CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery'
(MGR需要該異步復(fù)制通道,實(shí)現(xiàn)新節(jié)點(diǎn)加入集群自動(dòng)從其他節(jié)點(diǎn)復(fù)制數(shù)據(jù)的目的,不需要手工指定從哪個(gè)節(jié)點(diǎn)復(fù)制,master_host和master_port信息。都是自動(dòng)完成)
- SET GLOBAL group_replication_bootstrap_group = ON;
(執(zhí)行初始化操作,只有首個(gè)節(jié)點(diǎn)需要這一步操作)
- START GROUP_REPLICATION;
啟動(dòng)成功之后,查看節(jié)點(diǎn)狀態(tài)信息。命令如下
- SELECT * FROM performance_schema.replication_group_members;
關(guān)閉初始化操作 命令如下:
- SET GLOBAL group_replication_bootstrap_group = off;
注:replication_group_members表中MEMBER_STATE字段狀態(tài)為ONLINE,再執(zhí)行關(guān)閉初始化命令。
實(shí)戰(zhàn)第7步:
在192.168.56.102上面啟動(dòng)第二個(gè)節(jié)點(diǎn)的mgr集群服務(wù)。命令如下
- 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;
啟動(dòng)成功之后,查看節(jié)點(diǎn)狀態(tài)信息。命令如下
- SELECT * FROM performance_schema.replication_group_members;
實(shí)戰(zhàn)第8步:
在192.168.56.103上面啟動(dòng)第三個(gè)節(jié)點(diǎn)的mgr集群服務(wù)。命令如下
- 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;
啟動(dòng)成功之后,查看節(jié)點(diǎn)狀態(tài)信息。命令如下:
- SELECT * FROM performance_schema.replication_group_members;
可見啟動(dòng)成功之后,三個(gè)成員的狀態(tài)都是ONLINE,證明已經(jīng)開始正常工作了。真正可以實(shí)現(xiàn)多節(jié)點(diǎn)的讀寫操作了。
以上就是對(duì)于MGR多主模式的原理介紹及其搭建過程。我們要有一種學(xué)習(xí)新知識(shí)的能力,多實(shí)操,多演練,從中得到其真諦,感受MySQL給我們帶來的簡(jiǎn)單快樂!今后還會(huì)多發(fā)布更多技術(shù)的文章,大家多溝通交流!
文章標(biāo)題:老司機(jī)帶你在MySQL領(lǐng)域“大吉大利,晚上吃雞”
標(biāo)題路徑:http://www.dlmjj.cn/article/codojoe.html


咨詢
建站咨詢
