【MySQL】MySQL MGR組復(fù)制搭建(單主及多主模式)

1最岗、背景

MGR(MySQL Group Replication)是MySQL官方在5.7.17版本引進(jìn)的一個數(shù)據(jù)庫高可用與高擴(kuò)展的解決方案,以插件形式提供,實現(xiàn)了分布式下數(shù)據(jù)的最終已執(zhí)行包雀,總結(jié)MGR的特點(diǎn)如下:

  • 高一致性:基于分布式paxos協(xié)議實現(xiàn)組復(fù)制,保證數(shù)據(jù)一致性
  • 高容錯性:自動檢測機(jī)制亲铡,只要不是大多數(shù)節(jié)點(diǎn)都宕機(jī)就可以繼續(xù)工作才写,內(nèi)置防腦裂保護(hù)機(jī)制;
  • 高擴(kuò)展性:節(jié)點(diǎn)的添加與移除會自動更新組成員信息奖蔓,新節(jié)點(diǎn)加入后赞草,自動從其他節(jié)點(diǎn)同步增量數(shù)據(jù),知道與其他節(jié)點(diǎn)數(shù)據(jù)一致吆鹤;
  • 高靈活性:提供單住和多主模式厨疙,單主模式在主庫宕機(jī)后能夠自動選主,所有寫入都在主節(jié)點(diǎn)進(jìn)行疑务,多主模式支持多節(jié)點(diǎn)寫入沾凄。

2、環(huán)境

  • 操作系統(tǒng):CentOS 7

  • 數(shù)據(jù)庫版本:5.7.22

  • 主機(jī)1:192.168.106.203

  • 主機(jī)2:192.168.106.204

  • 主機(jī)3:192.168.106.205

3知允、搭建步驟

3.1 數(shù)據(jù)庫安裝部署步驟撒蟀,略

3.2 分別將主機(jī)的ip做映射

由于在集群中的merber_host中的值不能相同,所以需要做映射温鸽,當(dāng)然不做也可以牙肝,后面提到如何設(shè)置

3.3 開始搭建集群節(jié)點(diǎn)一(主機(jī)1)

3.3.1 修改第一個節(jié)點(diǎn)的配置文件,內(nèi)容添加如下:

# replication param  

# server-id,組內(nèi)唯一ID嗤朴,不可重復(fù)配椭,一般配置為IP的后幾位  

server_id = 203  

# 開啟二進(jìn)制日志  

log_bin = mysql-bin  

# 開啟gtid模式  

gtid_mode = on  

enforce_gtid_consistency = 1  

# 開啟存儲從主庫接收來的二進(jìn)制日志  

log_slave_updates = 1  

# 設(shè)置二進(jìn)制日志格式為row  

binlog_format = row  

# group replication param  

#復(fù)制元數(shù)據(jù)存入系統(tǒng)表  

master_info_repository = table  

#復(fù)制元數(shù)據(jù)存入系統(tǒng)表  

relay_log_info_repository = table  

#禁用二進(jìn)制日志時間校驗和  

binlog_checksum = none  

#server必須為每個事物  

transaction_write_set_extraction=XXHASH64  

# 復(fù)制組的名字,可以隨意起雹姊,但一定要遵循gtid的格式  

loose-group_replication_group_name='aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'  

#插件在server啟動時是否自動啟動組復(fù)制股缸,如果不在配置文件中配置可在后面動態(tài)配置  

loose-group_replication_start_on_boot = off  

#使用這個地址接收來自組中其他成員的傳入連接,一般為本機(jī)地址  

loose-group_replication_local_address = '192.168.106.203:33061'  

#組成員  

loose-group_replication_group_seeds = '192.168.106.203:33061,192.168.106.204:33061,192.168.106.205:33061'  

#是否為Group Replication的引導(dǎo)節(jié)點(diǎn)吱雏,集群中第一個節(jié)點(diǎn)需要設(shè)置為ON來啟動Group Replication敦姻,如果不在配置文件中配置可在后面動態(tài)配置  

loose-group_replication_bootstrap_group = off  

# 一般配置為本機(jī)地址,也就是文中一開頭說的如果不做映射那么要配置這個  

report_host = 192.168.106.203  

report_port=3306  

# 是否只有一個主可寫歧杏,設(shè)置為ON時镰惦,其它節(jié)點(diǎn)不可寫,這個此處沒設(shè)置  

group_replication_single_primary_mode = ON  

3.3.2 重啟數(shù)據(jù)庫服務(wù)

# systemctl restart mysqld  

3.3.3 登錄到數(shù)據(jù)庫

mysql > mysql -uroot -pyourpassword  

3.3.4 關(guān)閉二進(jìn)制日志記錄功能

mysql > set sql_log_bin=0;  

3.3.5 創(chuàng)建一個用于復(fù)制的用戶犬绒,不建議用root用戶

mysql > grant replication slave on *.* to rpl_user@'%' identified by 'rpl_pass';  

mysql > flush privileges;  

3.3.6 開啟二進(jìn)制日志記錄功能

mysql > set sql_sql_log_bin = 1;  

3.3.7 設(shè)置使用組復(fù)制的用戶

mysql > change master to master_user='rpl_user',master_password='rpl_pass' for channel 'group_replication_recovery';  

3.3.8 安裝組復(fù)制插件

mysql > install PLUGIN group_replication SONAME 'group_replication.so';  

3.3.9 開啟插件自動引用組功能

mysql > set global group_replication_bootstrap_group = ON;  

3.3.10 開啟組復(fù)制

mysql > start group_replication;  

3.3.11 關(guān)閉插件自動引用組功能

mysql > set global group_replication_bootstrap_group = OFF;  

3.3.12 查看組內(nèi)節(jié)點(diǎn)和節(jié)點(diǎn)狀態(tài)

查看組內(nèi)成員
.mysql > select * from performance_schema.replication_group_members;  

如果member_state顯示為online則為成功

具體說明見另附

查看節(jié)點(diǎn)狀態(tài)
select * from performance_schema.replication_group_member_stats \G旺入;  
image

3.4 搭建第二個節(jié)點(diǎn)(主機(jī):192.168.106.204)

3.4.1 修改配置文件,

除了一下三項之外其他配置與節(jié)點(diǎn)一的一致(當(dāng)然部分配置可以根據(jù)實際情況調(diào)整)

server_id = 203  

loose-group_replication_local_address = '192.168.106.204:33061'  

report_host = 192.168.106.204  

3.4.2 重啟數(shù)據(jù)庫服務(wù)

# systemctl restart mysqld  

3.4.3 登錄到數(shù)據(jù)庫

mysql > mysql -uroot -pyourpassword  

3.4.4 關(guān)閉二進(jìn)制日志記錄功能

mysql > set sql_log_bin=0;  

3.4.5 創(chuàng)建一個用于復(fù)制的用戶,不建議用root用戶

mysql > grant replication slave on *.* to rpl_user@'%' identified by 'rpl_pass';  

mysql > flush privileges;  

3.4.6 開啟二進(jìn)制日志記錄功能

mysql > set sql_sql_log_bin = 1;  

3.4.7 設(shè)置使用組復(fù)制的用戶

mysql > change master to master_user='rpl_user',master_password='rpl_pass' for channel 'group_replication_recovery';  

3.4.8 安裝組復(fù)制插件

mysql > install PLUGIN group_replication SONAME 'group_replication.so';  

3.4.9 除了第一個節(jié)點(diǎn),其他節(jié)點(diǎn)都需要執(zhí)行這命令

mysql > set global group_replication_allow_local_disjoint_gtids_join = ON;  

3.4.10 開啟組復(fù)制

mysql > start group_replication;  

3.4.11 查看成員信息:

mysql > select * from performance_schema.replication_group_members;  

3.4.12 查看節(jié)點(diǎn)信息:

mysql > select * from performance_schema.replication_group_member_stats;
image

3.5 節(jié)點(diǎn)三的配置方式與節(jié)點(diǎn)二的配置方式相同

3.5.1 查看成員信息:

mysql > select * from performance_schema.replication_group_members;  

3.5.2 查看節(jié)點(diǎn)信息:

mysql > select * from performance_schema.replication_group_member_stats \G  
測試步驟:
  1. 在主庫上創(chuàng)建一個庫茵瘾,然后創(chuàng)建表礼华,在兩個從庫上查詢數(shù)據(jù)是否同步?

  2. 兩個從庫只能執(zhí)行查詢操作拗秘?

  3. 手動關(guān)閉主庫圣絮,確認(rèn)兩個從庫其中一個是否會變成主庫?而且是MEMBER_ID第一個字母按優(yōu)先級排列的接管主庫雕旨?

常用命令:

查看成員信息:

mysql > select * from performance_schema.replication_group_members;  

查看節(jié)點(diǎn)信息:

mysql > select * from performance_schema.replication_group_member_stats \G  

查看主節(jié)點(diǎn):

mysql > select variable_value from performance_schema.global_status where variable_name='group_replication_primary_member';  

查看主節(jié)點(diǎn)方式2:

select @@read_only;  

正常情況下且是在單主的情況下扮匠,從節(jié)點(diǎn)都是不可寫的,即該參數(shù)的值為1凡涩,而主節(jié)點(diǎn)的值為0

4棒搜、多主模式切換

切換為多主

MGR切換模式需要重新啟動組復(fù)制,因些需要在所有節(jié)點(diǎn)上先關(guān)閉組復(fù)制突照,設(shè)置 group_replication_single_primary_mode=OFF 等參數(shù)帮非,再啟動組復(fù)制。

# 停止組復(fù)制(所有節(jié)點(diǎn)執(zhí)行):  

mysql> stop group_replication;  

mysql> set global group_replication_single_primary_mode=OFF;  

mysql> set global group_replication_enforce_update_everywhere_checks=ON;  

# 隨便選擇某個節(jié)點(diǎn)執(zhí)行  

mysql> SET GLOBAL group_replication_bootstrap_group=ON;  

mysql> START GROUP_REPLICATION;  

mysql> SET GLOBAL group_replication_bootstrap_group=OFF;  

# 其他節(jié)點(diǎn)執(zhí)行  

mysql> START GROUP_REPLICATION;  

# 查看組信息讹蘑,所有節(jié)點(diǎn)的 MEMBER_ROLE 都為 PRIMARY  

mysql> SELECT * FROM performance_schema.replication_group_members;  

切換回單主

# 所有節(jié)點(diǎn)執(zhí)行  

mysql> stop group_replication;  

mysql> set global group_replication_enforce_update_everywhere_checks=OFF;  

mysql> set global group_replication_single_primary_mode=ON;  

# 主節(jié)點(diǎn)(如主機(jī)1)執(zhí)行  

SET GLOBAL group_replication_bootstrap_group=ON;  

START GROUP_REPLICATION;  

SET GLOBAL group_replication_bootstrap_group=OFF;  

# 從節(jié)點(diǎn)(主機(jī)2末盔、主機(jī)3)執(zhí)行  

START GROUP_REPLICATION;  

# 查看MGR組信息  

mysql> SELECT * FROM performance_schema.replication_group_members;  

5、搭建時遇到的問題

5.1 在執(zhí)行change master的時候報錯

ERROR 3077 (HY000): To have multiple channels, repository cannot be of type FILE; Please check the repository configuration and convert them to TABLE.  

解決方法:

從庫需要master-info-repository座慰、relay-log-info-repository設(shè)置為table

5.2 如果節(jié)點(diǎn)曾經(jīng)做過從庫陨舱,那么在開啟組復(fù)制的時候會報錯,且日志中會出現(xiàn)以下錯誤:

[ERROR] Plugin group_replication reported: 'Can't start group replication on secondary member with single primary-mode while asynchronous replication channels are running

解決方法:

1版仔、停止該節(jié)點(diǎn)的主從:stop slave;

2游盲、建議刷新日志(生產(chǎn)環(huán)境慎用),reset master;reset slave;

6蛮粮、附

6.1 MySQL Group Replication 節(jié)點(diǎn)狀態(tài):

  • CHANNEL_NAME : 顯示的值永遠(yuǎn)為group_replication_applier

  • MEMBER_ID : 節(jié)點(diǎn)serer_uuid

  • MEMBER_PORT : 節(jié)點(diǎn)服務(wù)端口益缎,取值為server_port指定的端口

  • MEMBER_HOST : 如果沒有配置report_host選項,那么取值為機(jī)器的hostname然想,可以通過report_host配置指定具體的IP

  • MEMBER_STATE : 節(jié)點(diǎn)狀態(tài)

  • MEMBER_STATE字段顯示當(dāng)前節(jié)點(diǎn)的狀態(tài)莺奔,根據(jù)官方文檔,取值和介紹如下所示:

取值 解釋 狀態(tài)是否在集群內(nèi)同步
ONLINE 表示該節(jié)點(diǎn)可正常提供服務(wù) YES
RECOVERING 表示當(dāng)前節(jié)點(diǎn)正在從其他節(jié)點(diǎn)恢復(fù)數(shù)據(jù) YES
OFFLINE 表示GR插件已經(jīng)加載变泄,但是該節(jié)點(diǎn)不屬于任何一個GR組 NO
ERROR 表示節(jié)點(diǎn)在recovery階段出現(xiàn)錯誤或者從其他節(jié)點(diǎn)同步狀態(tài)中出現(xiàn)錯誤 NO
UNREACHABLE 節(jié)點(diǎn)處于不可達(dá)狀態(tài)令哟,無法與之發(fā)生網(wǎng)絡(luò)通訊 NO

從上表可以知道,只有ONLINERECOVERING兩種狀態(tài)會在集群中得到同步妨蛹。這個狀態(tài)同步是指狀態(tài)在所有節(jié)點(diǎn)上面查詢均能保持一致的意思屏富。至于OFFLINEERRORUNREABLE蛙卤,做以下說明:

只有在當(dāng)前OFFLINE節(jié)點(diǎn)查詢replication_group_members表才能得到OFFLINE狀態(tài)狠半,在其他節(jié)點(diǎn)上查詢replication_group_members表,則一般沒有該節(jié)點(diǎn)的狀態(tài)(很好理解,因為OFFLINE節(jié)點(diǎn)已經(jīng)不屬于這個GR組了)

只有在當(dāng)前ERROR節(jié)點(diǎn)查詢replication_group_members表才能得到ERROR狀態(tài)典予,同上面的OFFLINE甜滨,在其他節(jié)點(diǎn)上查詢也看不到該節(jié)點(diǎn)

假設(shè)節(jié)點(diǎn)A與B網(wǎng)絡(luò)通訊失敗乐严,那么在節(jié)點(diǎn)A上查詢replication_group_members表瘤袖,有可能得到B的狀態(tài)為UNREACHABLE

6.2 擴(kuò)展

http://www.reibang.com/p/2ee012fe003f

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市昂验,隨后出現(xiàn)的幾起案子捂敌,更是在濱河造成了極大的恐慌,老刑警劉巖既琴,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件占婉,死亡現(xiàn)場離奇詭異,居然都是意外死亡甫恩,警方通過查閱死者的電腦和手機(jī)逆济,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來磺箕,“玉大人奖慌,你說我怎么就攤上這事∷擅遥” “怎么了简僧?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長螺句。 經(jīng)常有香客問我姻几,道長缀辩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任啦逆,我火速辦了婚禮,結(jié)果婚禮上笛洛,老公的妹妹穿的比我還像新娘夏志。我一直安慰自己,他們只是感情好撞蜂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布盲镶。 她就那樣靜靜地躺著,像睡著了一般蝌诡。 火紅的嫁衣襯著肌膚如雪溉贿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天浦旱,我揣著相機(jī)與錄音宇色,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛宣蠕,可吹牛的內(nèi)容都是我干的例隆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼抢蚀,長吁一口氣:“原來是場噩夢啊……” “哼镀层!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起皿曲,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤唱逢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后屋休,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坞古,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年劫樟,在試婚紗的時候發(fā)現(xiàn)自己被綠了痪枫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡叠艳,死狀恐怖奶陈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情虑绵,我是刑警寧澤尿瞭,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站翅睛,受9級特大地震影響声搁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜捕发,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一疏旨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扎酷,春花似錦檐涝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至凡纳,卻和暖如春窃植,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背荐糜。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工巷怜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留葛超,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓延塑,卻偏偏與公主長得像绣张,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子关带,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容