日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

mysql高可用方案MHA介紹

 財(cái)商能力 2014-02-14
mysql高可用方案MHA介紹
概述
MHA是一位日本MySQL大牛用Perl寫(xiě)的一套MySQL故障切換方案,來(lái)保證數(shù)據(jù)庫(kù)系統(tǒng)的高可用.在宕機(jī)的時(shí)間內(nèi)(通常10—30秒內(nèi)),完成故障切換,部署MHA,可避免主從一致性問(wèn)題,節(jié)約購(gòu)買(mǎi)新服務(wù)器的費(fèi)用,不影響服務(wù)器性能,易安裝,不改變現(xiàn)有部署。
   還支持在線(xiàn)切換,從當(dāng)前運(yùn)行master切換到一個(gè)新的master上面,只需要很短的時(shí)間(0.5-2秒內(nèi)),此時(shí)僅僅阻塞寫(xiě)操作,并不影響讀操作,便于主機(jī)硬件維護(hù)。
在有高可用,數(shù)據(jù)一致性要求的系統(tǒng)上,MHA 提供了有用的功能,幾乎無(wú)間斷的滿(mǎn)足維護(hù)需要。
 優(yōu)點(diǎn)
1        master自動(dòng)監(jiān)控和故障轉(zhuǎn)移
  在當(dāng)前已存在的主從復(fù)制環(huán)境中,MHA可以監(jiān)控master主機(jī)故障,并且故障自動(dòng)轉(zhuǎn)移。
即使有一些slave沒(méi)有接受新的relay log events,MHA也會(huì)從最新的slave自動(dòng)識(shí)別差異的relay log events,并apply差異的event到其他slaves。因此所有的slave都是一致的。MHA秒級(jí)別故障轉(zhuǎn)移(9-12秒監(jiān)測(cè)到主機(jī)故障,任選7秒鐘關(guān)閉電源主機(jī)避免腦裂,接下來(lái)apply差異relay logs,注冊(cè)到新的master,通常需要時(shí)間10-30秒即total downtime)。另外,在配置文件里可以配置一個(gè)slave優(yōu)先成為master。因?yàn)镸HA修復(fù)了slave之間的一致性,dba就不用去處理一致性問(wèn)題。
     當(dāng)遷移新的master之后,并行恢復(fù)其他slave。即使有成千上萬(wàn)的slave,也不會(huì)影響恢復(fù)master時(shí)間,slave也很快完成。
      DeNA公司在150+主從環(huán)境中用MHA。當(dāng)其中一個(gè)master崩潰,MHA4秒完成故障轉(zhuǎn)移,這是主動(dòng)/被動(dòng)集群解決方案無(wú)法完成的。
2        互動(dòng)(手動(dòng))master故障轉(zhuǎn)移
 MHA可以用來(lái)只做故障轉(zhuǎn)移,而不監(jiān)測(cè)master,MHA只作為故障轉(zhuǎn)移的交互。
3        非交互式故障轉(zhuǎn)移
 非交互式的故障轉(zhuǎn)移也提供(不監(jiān)控master,自動(dòng)故障轉(zhuǎn)移)。這個(gè)特性很有用,特別是你已經(jīng)安裝了其他軟件監(jiān)控master。比如,用Pacemaker(Heartbeat)監(jiān)測(cè)master故障和vip接管,用MHA故障轉(zhuǎn)移和slave提升。
4        在線(xiàn)切換master到不同主機(jī)
 在很多情況下,有必要將master轉(zhuǎn)移到其他主機(jī)上(如替換raid控制器,提升master機(jī)器硬件等等)。這并不是master崩潰,但是計(jì)劃維護(hù)必須去做。計(jì)劃維護(hù)導(dǎo)致downtime,必須盡可能快的恢復(fù)??焖俚膍aster切換和優(yōu)雅的阻塞寫(xiě)操作是必需的,MHA提供了這種方式。優(yōu)雅的master切換, 0.5-2秒內(nèi)阻塞寫(xiě)操作。在很多情況下0.5-2秒的downtime是可以接受的,并且即使不在計(jì)劃維護(hù)窗口。這意味著當(dāng)需要更換更快機(jī)器,升級(jí)高版本時(shí),dba可以很容易采取動(dòng)作。
5        master crash不會(huì)導(dǎo)致主從數(shù)據(jù)不一致性
    當(dāng)master crash后,MHA自動(dòng)識(shí)別slave間relay logevents的不同,然后應(yīng)用與不同的slave,最終所有slave都同步。結(jié)合通過(guò)半同步一起使用,幾乎沒(méi)有任何數(shù)據(jù)丟失。
其他高可用方案
6        MHA部署不影響當(dāng)前環(huán)境設(shè)置
MHA最重要的一個(gè)設(shè)計(jì)理念就是盡可能使用簡(jiǎn)單。使用與5.0+以上主從環(huán)境,其他HA方案需要改變mysql部署設(shè)置,MHA不會(huì)讓dba做這些部署配置,同步和半同步環(huán)境都可以用。啟動(dòng)/停止/升級(jí)/降級(jí)/安裝/卸載 MHA都不用改變mysql主從(如啟動(dòng)/停止)。
當(dāng)你需要升級(jí)MHA到新版本時(shí),不需要停止mysql,僅僅更新HMA版本,然后重新啟動(dòng)MHAmanger即可。
   MHA 支持包含5.0/5/1/5.5(應(yīng)該也支持5.6,翻譯文檔時(shí)MHA開(kāi)發(fā)者沒(méi)更新對(duì)于5.6版本)。有些HA方案要求特定的mysql版本(如mysqlcluster,mysql with global transaction id 等),而且你可能不想僅僅為了MasterHA而遷移應(yīng)用。很多情況下,公司已經(jīng)部署了許多傳統(tǒng)的mysql應(yīng)用,開(kāi)發(fā)或dba不想花太多時(shí)間遷移到不同的存儲(chǔ)引擎或新的特性(newer bleeding edge distributions 不知道這個(gè)是否該這么翻譯)。
7        不增加服務(wù)器費(fèi)用
MHA 包含MHA Manager和MHA node。MHA node運(yùn)行在每臺(tái)mysql服務(wù)器上,Manager可以單獨(dú)部署一臺(tái)機(jī)器,監(jiān)控100+以上master,總服務(wù)器數(shù)量不會(huì)有太大增加。需要注意的是Manager也可以運(yùn)行在slaves中的一臺(tái)機(jī)器上。
8        性能無(wú)影響
當(dāng)監(jiān)控master,MHA只是幾秒鐘(默認(rèn)3秒)發(fā)送ping包,不發(fā)送大的查詢(xún)。主從復(fù)制性能不受影響
9        適用任何存儲(chǔ)引擎
Mysql不僅僅適用于事務(wù)安全的innodb引擎,在主從中適用的引擎,MHA都可以適用。即使用遺留環(huán)境的mysiam引擎,不進(jìn)行遷移,也可以用MHA。
 與其他HA方案比較
Doing everything manually
Mysql replication 是同步或半同步。當(dāng)master崩潰時(shí),很有可能一些slave還沒(méi)有接受最新的relay log events,這意味著每一個(gè)slave都相互處在不同的狀態(tài)。人為修復(fù)一致性問(wèn)題顯得不再平凡。沒(méi)有一致性問(wèn)題,主從也可能不會(huì)啟動(dòng)(如duplicate key error)。花費(fèi)1個(gè)多小時(shí)重新啟動(dòng)主從復(fù)制顯得不同尋常。
Single master and single slave
在單一主從情況下,一些slave 落后與其他slave的情況將不會(huì)發(fā)生。其中一個(gè)master崩潰,可以輕松的讓?xiě)?yīng)用轉(zhuǎn)移到一個(gè)新的master上面,提供對(duì)外服務(wù),故障遷移很簡(jiǎn)單。
Master, one candidate master, and multiple slaves雙主多從
雙主多從的架構(gòu)也很常見(jiàn)。主master掛掉,備用master將接替主master提供服務(wù)。某些情況配置為多主架構(gòu)。
M(RW)-----M2(R)                      M(RW), promoted from M2
       |                                          |
  +----+----+          --(master crash)-->   +-x--+--x-+
 S(R)     S2(R)                             S(?)      S(?)
                                          (Fromwhich position should S restart replication?)
但是這并不作為master故障轉(zhuǎn)移方案。當(dāng)前master掛掉,剩余slave不一定接受全部relay log events,修復(fù)數(shù)據(jù)一致性還是問(wèn)題。
這種架構(gòu)使用廣泛,但是不是所有人都能深刻理解上述問(wèn)題。當(dāng)前master掛掉,slave變得不統(tǒng)一或者slave不能從新的master復(fù)制數(shù)據(jù)。
也許雙master,其中一個(gè)master只讀,每個(gè)master都至少有一個(gè)slave也許可能解決問(wèn)題。
         M(RW)--M2(R)
          |      |
        S(R)   S2(R)
Pacemaker + DRBD
Pecemaker(Heartbeat)+DRBD+Mysql是一個(gè)通用方案。但是這個(gè)方案也有以下問(wèn)題
1 費(fèi)用問(wèn)題,特別是跑大量主從環(huán)境。Pecemaker+DRBD是主動(dòng)/被動(dòng)的解決方案,因此需要一臺(tái)被動(dòng)服務(wù)器對(duì)外不提供任何應(yīng)用服務(wù)?;镜男枰呐_(tái)mysql服務(wù)器,one active master,one passive master,two slaves。
2 宕機(jī)時(shí)間(downtime)。Pacemaker+DRBD是主備集群,主master掛掉,備用master啟用。這可能花費(fèi)長(zhǎng)的時(shí)間,特別是沒(méi)有用innodb plugin。即使用innodb plugin,花費(fèi)幾分鐘開(kāi)始在備用master上接受連接也不尋常。另外,因?yàn)閭溆胢aster上數(shù)據(jù)/文件緩存是空的,恢復(fù)時(shí)間,熱身(填充數(shù)據(jù)到data buffer pool)花費(fèi)不可忽視的時(shí)間。實(shí)踐中,需要一臺(tái)或更多slave提供足夠的讀服務(wù)。在熱身時(shí)間內(nèi),空緩存導(dǎo)致寫(xiě)性能降低
3 寫(xiě)問(wèn)題下降或一致性問(wèn)題。為了讓主動(dòng)/被動(dòng)集群真正的工作,每次提交(commit)后,必須刷新事務(wù)日志(binary log和innodb log),也就是必須設(shè)置innodb-flush-log-at-trx-commit=1,sync-binlog=1。設(shè)置sync-binlog=1會(huì)降低寫(xiě)性能,因?yàn)閒sync()函數(shù)被序列化(sync-binlog=1,group commit失效)。大部分案例中,不設(shè)置sync-binlog=1.如果沒(méi)有設(shè)置sync-binlog=1,活動(dòng)master crash,新的master(先前被動(dòng)服務(wù)器)可能會(huì)丟失一些已經(jīng)發(fā)送到slave的binary log events。假如 master 掛掉,slave A接受到mysqld-bin.000123,位置1500。binlog data刷新到硬盤(pán)的位置在1000,那么新的master數(shù)據(jù)也只能mysqld-bin.000123的1000處,然后在啟動(dòng)時(shí)創(chuàng)建一個(gè)新的binary log mysqld-bin.000124。如果發(fā)生這種情況,slave A不能繼續(xù)復(fù)制,因?yàn)樾碌膍aster 沒(méi)有mysqld-bin.000123位置1500.
 4 復(fù)雜。對(duì)多數(shù)人來(lái)說(shuō),安裝/初始化pacemake和DRBD不是容易的事情。相對(duì)于其他案例,初始化DRBD需要重新創(chuàng)建系統(tǒng)分區(qū)也不容易。要求dba在DRBD和linux內(nèi)核層有足夠的技能。如果dba執(zhí)行了一個(gè)錯(cuò)誤命令(如執(zhí)行drbdadm–overwrite-data-of-peer primary 在被動(dòng)節(jié)點(diǎn)),那么將會(huì)損壞活動(dòng)的數(shù)據(jù)。重要的是另外一旦硬盤(pán)io層出現(xiàn)問(wèn)題,多數(shù)dba處理這種問(wèn)題不是容易的。
MySQL Cluster
Mysql cluster是真正的高可用解決方案,但是必須得用NDB存儲(chǔ)引擎。如果你用innodb,將不能發(fā)揮mysql cluster集群優(yōu)勢(shì)。
Semi-Synchronous Replication
半同步復(fù)制大大降低了binlog event僅僅存在于崩潰master上的這種風(fēng)險(xiǎn)。這非常有用的能避免數(shù)據(jù)丟失。但是半同步不能解決所有一致性問(wèn)題,只能保證一個(gè)(不是所有)slave接受到master端的commit的binlog events,其他slave也許還沒(méi)有接受全部的binlog events。不能apply不同的binlog events 從新的slave到 其他slave上,也不能保證相互一致性
Global Transaction ID
GlobalTransaction ID所要達(dá)到的目的跟MHA相同,但它覆蓋更多。MHA只是兩級(jí)復(fù)制,但是global transaction id覆蓋任何級(jí)別的復(fù)制環(huán)境,即使第兩級(jí)復(fù)制失敗,dba也能覆蓋第三級(jí)。Check Google'sglobal transaction id project for details。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多