高可用MySQL MHA介绍
生活随笔
收集整理的這篇文章主要介紹了
高可用MySQL MHA介绍
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
MySQL MHA介紹
MHA簡(jiǎn)介
MHA是一位日本MySQL大牛用Perl寫一套MySQL故障切換方案,來(lái)保證數(shù)據(jù)庫(kù)系統(tǒng)的高可用,在宕機(jī)的事件內(nèi)(通常10-30秒),完成故障轉(zhuǎn)意,部署MHA,可避免主從一致性問(wèn)題,節(jié)約購(gòu)買新服務(wù)器的費(fèi)用,不影響服務(wù)器性能,易安裝,不改變現(xiàn)有部署MHA在生產(chǎn)環(huán)境的作用
一主多從的環(huán)境下,MySQL的主從復(fù)制是異步或是半同步。 Master發(fā)生故障的時(shí)候,有可能一部分(或者全部)的Slave未能獲取到最新的binlog,造成Slave之間的binlog轉(zhuǎn)發(fā)發(fā)生偏差。 如下圖所示,Master宕機(jī)之后,id=102的binlog未能被發(fā)送到任何一個(gè)Slave上,id=101的binlog只有save2上有,slave3上未能收到id=100和id-101的binlog 如果想要正確恢復(fù):- Master必須發(fā)出的ID=102的binlog
- 還要消除各個(gè)Slave之間的差異性
MHA架構(gòu)
可實(shí)現(xiàn)master工作狀態(tài)的監(jiān)控以及宕機(jī)時(shí)的故障轉(zhuǎn)移 要求:MySQL版本要在5.0以上MHA原理
1、等待SQL線程執(zhí)行完畢 2、解析最新的Slave上的中繼日志(relay log)的日志頭(log Header),為其他各個(gè)服務(wù)器確定出差異位置 3、將i1–>i2–>X 全部組成一個(gè)二進(jìn)制日志MHA的主要特性
- 從master的監(jiān)控到故障轉(zhuǎn)移全部都能自動(dòng)完成,故障轉(zhuǎn)移也可手動(dòng)執(zhí)行
- 可在秒級(jí)單位內(nèi)實(shí)現(xiàn)故障轉(zhuǎn)移
- 可將任意Slave提升至master
- 具備在多個(gè)點(diǎn)上調(diào)用外部腳本(擴(kuò)展)的技能,可以用在電源OFF或者IP地址的故障轉(zhuǎn)移上。
- 安裝和卸載不用停止當(dāng)前的mysql進(jìn)程
- MHA 自身不會(huì)增加服務(wù)器負(fù)擔(dān),不會(huì)降低性能,不用追加服務(wù)器
- 不依賴Storage Engine
- 不依賴二進(jìn)制文件的格式(不論是statement模式還是Row模式)
拓展性
- seconary_check_script
- shutdown_script
- master_ip_failover_script
- ?report_script 發(fā)郵件通知故障轉(zhuǎn)移成功或失敗等的詳細(xì)情況
案例分析
- 在DeNA的服務(wù)中(主要是社交游戲),針對(duì)有超過(guò)150組(對(duì))MASTER/SLAVE的服務(wù)器引入MHA
- MySQL一般不會(huì)出現(xiàn)服務(wù)宕機(jī),通常是由OS和H/W故障引起
- 拓展
??? 檢測(cè)MASTER是否宕機(jī)
除了Manager會(huì)對(duì)MASTER進(jìn)行監(jiān)控外,另外還通過(guò)其他兩處的遠(yuǎn)程數(shù)據(jù)中心來(lái)檢測(cè)是否可以連接到MASTER??? 強(qiáng)制宕機(jī)MASTER
ssh可以連接到的情況下用kill -9 mysqld mysqld_safe,ssh連接不到的情況下ipmitool等工具強(qiáng)制關(guān)閉電源。 ?- 針對(duì)OS掛掉的故障轉(zhuǎn)移,檢測(cè)系統(tǒng)是否掛掉需要10秒,故障轉(zhuǎn)移僅需4秒
? 判定是否可以進(jìn)行故障轉(zhuǎn)移
默認(rèn)情況,只有其他所有的SLAVE都存貨的情況下才進(jìn)行故障轉(zhuǎn)移 檢測(cè)SLAVE,判斷其工作狀態(tài)(不到1秒)? 故障轉(zhuǎn)移處理
準(zhǔn)備工作
一個(gè)可以寫的MASTER和多個(gè)SLAVE或只讀MASTER
當(dāng)MASTER崩潰時(shí),MHA會(huì)修復(fù)SLAVE之間的一致性問(wèn)題。另外,MHA會(huì)嘗試從崩潰的MASTER保存未能發(fā)送的二進(jìn)制日志并應(yīng)用到所有Slave。如果僅有一臺(tái)SLAVE服務(wù)器,就不需要擔(dān)心SLAVE之間的一致性問(wèn)題。但是即使只有一臺(tái)SLAVE服務(wù)器,在SSH可以連通的情況下,MHA在MASTER崩潰時(shí)搶救日志上也會(huì)非常有幫助,當(dāng)然,通過(guò)半同步也可以解決這個(gè)問(wèn)題。 從MHA Manager 0.52 開始支持多個(gè)MASTER(multi master)的復(fù)制。下面是MHA在多MASTER復(fù)制時(shí)注意的事項(xiàng)- 只允許有一個(gè)MASTER(可寫)。在其他MASTER上必須設(shè)置MySQL全局變量”read-only=1″
- 缺省情況下,所有被管理的服務(wù)器(在配置文件中定義的服務(wù)器)應(yīng)該是2層級(jí)聯(lián)復(fù)制。
管理3層或更多曾的及聯(lián)復(fù)制環(huán)境
MHA默認(rèn)不支持三次或更多曾的級(jí)聯(lián)復(fù)制架構(gòu)(比如Master->Master2->Slave3)。MHA僅在SLAVE直接從當(dāng)前主要MASTER進(jìn)行復(fù)制時(shí),才會(huì)進(jìn)行故障轉(zhuǎn)移和恢復(fù)操作。MHA可以管理MASTER1和MASTER2并且當(dāng)MASTER1崩潰提升MASTER為主MASTER,但是MHA不能監(jiān)控和恢復(fù)SLAVE3,因?yàn)镾LAVE3從不同的MASTER(MASTER2)上進(jìn)行主從復(fù)制。為了讓MHA在這種架構(gòu)下能進(jìn)行工作,需要以下設(shè)置:- 在MHA的配置文件中設(shè)置MASTER和二層級(jí)聯(lián)中的主機(jī)(MASTER1和MASTER2)
- 使用multi_tier_slave=1 參數(shù)并在MHA配置文件中設(shè)置所有主機(jī)。
MySQL5.0或更高的版本
MHA支持MySQL5.0或更高的版本。MHA不支持MySQL4.1,因?yàn)镸ySQL5.0開始,二進(jìn)制日志的格式發(fā)生了改變(binlog v4) MHA分析二進(jìn)制日志并確定位置點(diǎn)時(shí)止支持v4版本,所以MySQL4.1 在這里不能工作。MySQL5.0或更高版本中的mysqlbinlog同樣也需要v4版本的binlog格式。在早起的MySQL版本中主從復(fù)制處理存在一些非常嚴(yán)重的問(wèn)題,所以高度推薦使用高版本的MySQL.特別是如果你還在使用MYSQL 5.06.0 以前的版本,請(qǐng)考慮升級(jí)在候選MASTER 上必須開啟log-bin
如果當(dāng)前SLAVE未設(shè)置log-bin,很明顯他們都不能成為MASTER,MHA Manager內(nèi)部將會(huì)檢查log-bin的設(shè)置,不會(huì)將未開啟binlog的Slave提升為MASTER、如果當(dāng)前的Slave都沒(méi)有設(shè)置log-bin,MHA將會(huì)不盡興故障轉(zhuǎn)移在所有服務(wù)器上二進(jìn)制日志和中繼日志過(guò)濾規(guī)則必須一致
所有服務(wù)器上的主從復(fù)制過(guò)濾規(guī)則(binlog-do-db,replicate-ignore-db等)MHA在啟動(dòng)時(shí)檢查過(guò)濾規(guī)則,如果發(fā)現(xiàn)各服務(wù)器之間的配置不一致將不會(huì)進(jìn)行監(jiān)控或故障轉(zhuǎn)移在被選MASTER上必須存在具有復(fù)制權(quán)限的用戶
當(dāng)故障轉(zhuǎn)移完成后,所有Slave將執(zhí)行CHANGE MASTER TO 語(yǔ)句。必須存在一個(gè)具有復(fù)制權(quán)限的用戶才能進(jìn)行復(fù)制總結(jié)
以上是生活随笔為你收集整理的高可用MySQL MHA介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何安装Bit-Z IOS版APP
- 下一篇: linux cmake编译源码,linu