一、MHA概述
MHA(Mater High Availability)是一套非常流行和實用的MySQL高可用解決方案軟件,保證MySQL主從復制集群中主庫的高可用性,保證集群業(yè)務(wù)不受影響。當master異常宕機后,MHA能夠保證在1~30s的時間內(nèi)實現(xiàn)故障轉(zhuǎn)移,選擇一個最優(yōu)slave升為最新master,同時保持數(shù)據(jù)一致性的狀態(tài),以及將整個集群的所有數(shù)據(jù)損失降到最低。因此MHA方案十分受歡迎。
二、MHA架構(gòu)
MHA由Manager(管理節(jié)點)和Node(數(shù)據(jù)節(jié)點)組成。Manager服務(wù)可以運行在一臺讀立服務(wù)器(虛擬機)上管理多個主從集群,也可以是某一個從節(jié)點或者應(yīng)用服務(wù)器節(jié)點,而Node服務(wù)需要運行在每一個MySQL服務(wù)器上。Manager會定時通過主庫上的Node服務(wù)監(jiān)控主庫,確保主庫出現(xiàn)故障時可自動(或指定)將最優(yōu)從庫升為新主庫,讓所有從庫與最新master保持正常。
三、切換原理
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供蟠龍網(wǎng)站建設(shè)、蟠龍做網(wǎng)站、蟠龍網(wǎng)站設(shè)計、蟠龍網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、蟠龍企業(yè)網(wǎng)站模板建站服務(wù),十載蟠龍做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
3.1 MHA自動切換的原理:
MHA的全名叫做mysql-master-ha,配置后可以在10-30秒內(nèi)完成master自動切換,切換過程如下:
1. 檢測master的狀態(tài),方法是一秒一次“ SELECT 1 As Value”,發(fā)現(xiàn)沒有響應(yīng)后會重復3次檢查,如果還沒有響應(yīng),shutdown并再重復一次SELECT 1 As Value確認master關(guān)閉
2. 確認SSH到master所在的機器是否可達
3. 給出消息:Connecting to a master server failed,并開始讀取配置文件masterha_default.conf和app1.conf
4. 確認復制切換模式: [info] GTID failover mode = 1
5. 報告整個架構(gòu)中的機器存活情況
6. 檢查存活的實例版本、GTID開啟情況、是否開啟read_only以及復制過濾情況
7. 接下來就是在GTID復制基礎(chǔ)上的切換過程
(1) 配置檢查階段,具體檢查如下
(2)徹底關(guān)閉master連接的階段,避免master未關(guān)閉導致的腦裂,關(guān)閉完成后給出報告
(3)master恢復階段:
?1 確認relay log最新的slave實例
?2 確定新的master
如果在配置文件中設(shè)置了候選master,會直接確定預(yù)設(shè)機器實例為master;如果沒有預(yù)設(shè),會選擇含有最新的relay log的那個slave
?3 確認新的master后,會先設(shè)置sql_log_bin=0以阻塞master日志寫入使其他slave趕上復制,應(yīng)用該最新relay log,最終獲得這個層次的數(shù)據(jù)一致性,之后再set sql_log_bin=1使恢復日志寫入??梢酝ㄟ^半同步復制來解決無法ssh到master所在機器所造成的事務(wù)丟失問題
待全部數(shù)據(jù)一致后,通過show master status確定新master的日志位置并在其他slave上執(zhí)行change master語句創(chuàng)建新的主從連接
該階段成果后給出報告
Fri Jul 1 13:35:33 2016 - [info] ** Finished master recovery successfully.
Fri Jul 1 13:35:33 2016 - [info] * Phase 3: Master Recovery Phase completed.
(4)slaves恢復階段:
先停止IO線程,等待SQL線程執(zhí)行完成后,stop slave,清除原slave信息,重新change master指向新的master,start slave ,over
(5)清除新選出的master上的slave信息
reset slave all;
至此,整個切換過程完成,最后給出切換報告
3.2 MHA在線切換的原理:
1. 檢查當前的配置信息及主從服務(wù)器的信息
包括讀取MHA的配置文件/etc/masterha/app1.cnf及檢查當前slave的健康狀態(tài)
2. 阻止對當前master的更新
主要通過如下步驟:
1> 等待1.5s($time_until_kill_threads*100ms),等待當前連接斷開。
2> 執(zhí)行 read_only=1,阻止新的DML操作
3> 等待0.5s,等待當前DML操作完成。
4> kill掉所有連接。
5> FLUSH NO_WRITE_TO_BINLOG TABLES
6> FLUSH TABLES WITH READ LOCK
3. 等待新master執(zhí)行完所有的relay log
Waiting to execute all relay logs on 192.168.244.20(192.168.244.20:3306)..
4. 將新master的read_only設(shè)置為off,并添加VIP
5. slave切換到新master上。
1> 等待slave(192.168.244.30)應(yīng)用完原主從復制產(chǎn)生的relay log,然后執(zhí)行change master操作切換到新master上。
2> 釋放原master上加的鎖。
3> 因masterha_master_switch命令行中帶有--orig_master_is_new_slave參數(shù),故原master也切換為新master的從。
6. 清理新master的相關(guān)信息。
主要是執(zhí)行了reset slave all操作,清除之前的復制信息。
注釋:應(yīng)用訪數(shù)據(jù)集群時可以采用keepalived 。
三、MySQL復制
異步復制(Asynchronous replication)
MySQL默認的復制即是異步的,主庫在執(zhí)行完客戶端提交的事務(wù)后會立即將結(jié)果返給給客戶端,并不關(guān)心從庫是否已經(jīng)接收并處理,這樣就會有一個問題,主如果crash掉了,此時主上已經(jīng)提交的事務(wù)可能并沒有傳到從上,如果此時,強行將從提升為主,可能導致新主上的數(shù)據(jù)不完整。
全同步復制(Fully synchronousreplication)
指當主庫執(zhí)行完一個事務(wù),所有的從庫都執(zhí)行了該事務(wù)才返回給客戶端。因為需要等待所有從庫執(zhí)行完該事務(wù)才能返回,所以全同步復制的性能必然會收到嚴重的影響。
半同步復制(Semisynchronous replication)
介于異步復制和全同步復制之間,主庫在執(zhí)行完客戶端提交的事務(wù)后不是立刻返回給客戶端,而是等待至少一個從庫接收到并寫到relay log中才返回給客戶端。相對于異步復制,半同步復制提高了數(shù)據(jù)的安全性,同時它也造成了一定程度的延遲,這個延遲最少是一個TCP/IP往返的時間。所以,半同步復制最好在低延時的網(wǎng)絡(luò)中使用。
異步復制
MySQL—MHA架構(gòu)圖
文章名稱:MySQLMHA應(yīng)用實踐(基礎(chǔ)知識)
瀏覽路徑:http://chinadenli.net/article38/joijsp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、網(wǎng)頁設(shè)計公司、品牌網(wǎng)站制作、虛擬主機、關(guān)鍵詞優(yōu)化、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)