久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Mysql中MHA的原理是什么

共計(jì) 2864 個(gè)字符,預(yù)計(jì)需要花費(fèi) 8 分鐘才能閱讀完成。

本篇內(nèi)容介紹了“Mysql 中 MHA 的原理是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓丸趣 TV 小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

MHA 簡(jiǎn)介

MHA 是由日本人 yoshinorim(原就職于 DeNA 現(xiàn)就職于 FaceBook)開(kāi)發(fā)的比較成熟的 MySQL 高可用方案。MHA 能夠在 30 秒內(nèi)實(shí)現(xiàn)故障切換,并能在故障切換中,最大可能的保證數(shù)據(jù)一致性。目前淘寶也正在開(kāi)發(fā)相似產(chǎn)品 TMHA,目前已支持一主一從。
 

MHA 架構(gòu)

MHA 由 MHA Manager 和 MHA Node 組成, 如下圖所示:

MHA Manager:
運(yùn)行一些工具,比如 masterha_manager 工具實(shí)現(xiàn)自動(dòng)監(jiān)控 MySQL Master 和實(shí)現(xiàn) master 故障切換,其它工具實(shí)現(xiàn)手動(dòng)實(shí)現(xiàn) master 故障切換、在線(xiàn) mater 轉(zhuǎn)移、連接檢查等等。一個(gè) Manager 可以管理多個(gè) master-slave 集群
 
MHA Node:
部署在所有運(yùn)行 MySQL 的服務(wù)器上,無(wú)論是 master 還是 slave。主要作用有三個(gè)。
    Ⅰ、保存二進(jìn)制日志
            如果能夠訪(fǎng)問(wèn)故障 master,會(huì)拷貝 master 的二進(jìn)制日志
     II、應(yīng)用差異中繼日志
          從擁有最新數(shù)據(jù)的 slave 上生成差異中繼日志,然后應(yīng)用差異日志。
     III、清除中繼日志
          在不停止 SQL 線(xiàn)程的情況下刪除中繼日志
 
MHA 工作原理

當(dāng) master 出現(xiàn)故障時(shí),通過(guò)對(duì)比 slave 之間 I / O 線(xiàn)程讀取 masterbinlog 的位置,選取最接近的 slave 做為 latestslave。其它 slave 通過(guò)與 latest slave 對(duì)比生成差異中繼日志。在 latest slave 上應(yīng)用從 master 保存的 binlog,同時(shí)將 latest slave 提升為 master。最后在其它 slave 上應(yīng)用相應(yīng)的差異中繼日志并開(kāi)始從新的 master 開(kāi)始復(fù)制。
在 MHA 實(shí)現(xiàn) Master 故障切換過(guò)程中,MHA Node 會(huì)試圖訪(fǎng)問(wèn)故障的 master(通過(guò) SSH),如果可以訪(fǎng)問(wèn)(不是硬件故障,比如 InnoDB 數(shù)據(jù)文件損壞等),會(huì)保存二進(jìn)制文件,以最大程度保證數(shù)據(jù)不丟失。MHA 和半同步復(fù)制一起使用會(huì)大大降低數(shù)據(jù)丟失的危險(xiǎn)。
 
當(dāng)前高可用方案
Heartbeat+DRBD:
開(kāi)銷(xiāo):需要額外添加處于被動(dòng)狀態(tài)的 master server(并不處理應(yīng)用流量)
性能:為了實(shí)現(xiàn) DRBD 復(fù)制環(huán)境的高可用,innodb-flush-log-at-trx-commit 和 sync-binlog 必須設(shè)置為 1,這樣會(huì)導(dǎo)致寫(xiě)性能下降。
一致性:在 master 上必要的 binlog 時(shí)間可能會(huì)丟失,這樣 slave 就無(wú)法進(jìn)行復(fù)制,導(dǎo)致產(chǎn)生數(shù)據(jù)一致性問(wèn)題

MySQL Cluster:
MySQL Cluster 真正實(shí)現(xiàn)了高可用,但是使用的是 NDB 存儲(chǔ)引擎,并且 SQL 節(jié)點(diǎn)有單點(diǎn)故障問(wèn)

半同步復(fù)制 (5.5+)
半同步復(fù)制大大減少了“binlog events 只存在故障 master 上”的問(wèn)題。
在提交時(shí),保證至少一個(gè) slave(并不是所有的)接收到 binlog,因此一些 slave 可能沒(méi)有接收到 binlog。

全局事務(wù) ID
在二進(jìn)制文件中添加全局事務(wù) ID(global transaction id)需要更改 binlog 格式,在 5.1/5.5 版本中不支持。
在應(yīng)用方面有很多方法可以直線(xiàn)全局事務(wù) ID,但是仍避免不了復(fù)雜度、性能、數(shù)據(jù)丟失或者一致性的問(wèn)題。
PXC:
PXC 實(shí)現(xiàn)了服務(wù)高可用,數(shù)據(jù)同步時(shí)是并發(fā)復(fù)制。但是僅支持 InnoDB 引擎,所有的表都要有主鍵。鎖沖突、死鎖問(wèn)題相對(duì)較多等等問(wèn)題。

MHA 的優(yōu)勢(shì)
1、故障切換快
在主從復(fù)制集群中,只要從庫(kù)在復(fù)制上沒(méi)有延遲,MHA 通常可以在數(shù)秒內(nèi)實(shí)現(xiàn)故障切換。9-10 秒內(nèi)檢查到 master 故障,可以選擇在 7 -10 秒關(guān)閉 master 以避免出現(xiàn)裂腦,幾秒鐘內(nèi),將差異中繼日志(relay log)應(yīng)用到新的 master 上,因此總的宕機(jī)時(shí)間通常為 10-30 秒。恢復(fù)新的 master 后,MHA 并行的恢復(fù)其余的 slave。即使在有數(shù)萬(wàn)臺(tái) slave,也不會(huì)影響 master 的恢復(fù)時(shí)間。
DeNA 在超過(guò) 150 個(gè) MySQL(主要 5.0/5.1 版本)主從環(huán)境下使用了 MHA。當(dāng) mater 故障后,MHA 在 4 秒內(nèi)就完成了故障切換。在傳統(tǒng)的主動(dòng) / 被動(dòng)集群解決方案中,4 秒內(nèi)完成故障切換是不可能的。
 
2、master 故障不會(huì)導(dǎo)致數(shù)據(jù)不一致
當(dāng)目前的 master 出現(xiàn)故障是,MHA 自動(dòng)識(shí)別 slave 之間中繼日志(relay log)的不同,并應(yīng)用到所有的 slave 中。這樣所有的 salve 能夠保持同步,只要所有的 slave 處于存活狀態(tài)。和 Semi-Synchronous Replication 一起使用,(幾乎)可以保證沒(méi)有數(shù)據(jù)丟失。

3、無(wú)需修改當(dāng)前的 MySQL 設(shè)置
MHA 的設(shè)計(jì)的重要原則之一就是盡可能地簡(jiǎn)單易用。MHA 工作在傳統(tǒng)的 MySQL 版本 5.0 和之后版本的主從復(fù)制環(huán)境中。和其它高可用解決方法比,MHA 并不需要改變 MySQL 的部署環(huán)境。MHA 適用于異步和半同步的主從復(fù)制。
啟動(dòng) / 停止 / 升級(jí) / 降級(jí) / 安裝 / 卸載 MHA 不需要改變(包擴(kuò)啟動(dòng) / 停止)MySQL 復(fù)制。當(dāng)需要升級(jí) MHA 到新的版本,不需要停止 MySQL,僅僅替換到新版本的 MHA,然后重啟 MHA Manager 就好了。
MHA 運(yùn)行在 MySQL 5.0 開(kāi)始的原生版本上。一些其它的 MySQL 高可用解決方案需要特定的版本(比如 MySQL 集群、帶全局事務(wù) ID 的 MySQL 等等),但并不僅僅為了 master 的高可用才遷移應(yīng)用的。在大多數(shù)情況下,已經(jīng)部署了比較舊 MySQL 應(yīng)用,并且不想僅僅為了實(shí)現(xiàn) Master 的高可用,花太多的時(shí)間遷移到不同的存儲(chǔ)引擎或更新的前沿發(fā)行版。MHA 工作的包括 5.0/5.1/5.5 的原生版本的 MySQL 上,所以并不需要遷移。

4、無(wú)需增加大量的服務(wù)器
MHA 由 MHA Manager 和 MHA Node 組成。MHA Node 運(yùn)行在需要故障切換 / 恢復(fù)的 MySQL 服務(wù)器上,因此并不需要額外增加服務(wù)器。MHA Manager 運(yùn)行在特定的服務(wù)器上,因此需要增加一臺(tái)(實(shí)現(xiàn)高可用需要 2 臺(tái)),但是 MHA Manager 可以監(jiān)控大量(甚至上百臺(tái))單獨(dú)的 master,因此,并不需要增加大量的服務(wù)器。即使在一臺(tái) slave 上運(yùn)行 MHA Manager 也是可以的。綜上,實(shí)現(xiàn) MHA 并沒(méi)用額外增加大量的服務(wù)。

5、無(wú)性能下降
MHA 適用與異步或半同步的 MySQL 復(fù)制。監(jiān)控 master 時(shí),MHA 僅僅是每隔幾秒(默認(rèn)是 3 秒)發(fā)送一個(gè) ping 包,并不發(fā)送重查詢(xún)。可以得到像原生 MySQL 復(fù)制一樣快的性能。

6、適用于任何存儲(chǔ)引擎
MHA 可以運(yùn)行在只要 MySQL 復(fù)制運(yùn)行的存儲(chǔ)引擎上,并不僅限制于 InnoDB,即使在不易遷移的傳統(tǒng)的 MyISAM 引擎環(huán)境,一樣可以使用 MHA。

“Mysql 中 MHA 的原理是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-03發(fā)表,共計(jì)2864字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒(méi)有評(píng)論)
主站蜘蛛池模板: 绩溪县| 木里| 济南市| 阳原县| 弋阳县| 黔江区| 福贡县| 兴义市| 闻喜县| 交城县| 宣威市| 甘德县| 招远市| 临猗县| 格尔木市| 本溪市| 南通市| 衡东县| 东乡| 临夏县| 怀来县| 乐东| 文水县| 拉萨市| 江安县| 尤溪县| 滨州市| 乐清市| 廊坊市| 平武县| 启东市| 自治县| 鞍山市| 应城市| 嘉峪关市| 包头市| 神农架林区| 永川市| 霍邱县| 巫山县| 乌拉特后旗|