多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > 互聯(lián)網(wǎng) > PagerDuty實戰(zhàn)分析:將MySQL遷移至XtraDB并成功運行EC2

PagerDuty實戰(zhàn)分析:將MySQL遷移至XtraDB并成功運行EC2

來源:程序員人生   發(fā)布時間:2014-09-24 20:21:55 閱讀次數(shù):2581次

【編者按】 PagerDuty是一家新興的互聯(lián)網(wǎng)創(chuàng)業(yè)公司,它是一款能夠在服務(wù)器出問題是發(fā)送提醒的產(chǎn)品,包括屏幕顯示、電話呼叫、短信通知、電郵通知等。目前AdMob、37Signals、StackOverflow、Instagram等均采用了PagerDuty作為消息通知以及突發(fā)事件處理工具。本文作者Doug Barth分享了PagerDuty是如何成功地把現(xiàn)有系統(tǒng)MySQL遷移至XtraDB集群,以及在這一過程中遇到的利與弊。


在半年前,PagerDuty公司成功地把現(xiàn)有系統(tǒng)從MySQL遷移至XtraDB集群,并在其上運行亞馬遜EC2。


舊系統(tǒng)配置分析

從配置上看,這是一個非常典型的MySQL環(huán)境:

  • 一對Percona服務(wù)器負(fù)責(zé)對一個DRBD卷進(jìn)行數(shù)據(jù)寫入。
  • 以主副EBS雙機(jī)對DRBD卷進(jìn)行備份。
  • 設(shè)立兩個同步復(fù)制數(shù)據(jù)庫,當(dāng)主服務(wù)器出現(xiàn)問題時,能把業(yè)務(wù)系統(tǒng)無縫轉(zhuǎn)移到次服務(wù)器。
  • 配置一系列異步復(fù)制機(jī),以應(yīng)對重大災(zāi)難、緊急備份、突發(fā)變更維護(hù)。

存在的問題

兢兢業(yè)業(yè)的舊系統(tǒng)服務(wù)多年后,面對日益突出的可靠性問題,開始顯現(xiàn)出力不從心了。此外,每次進(jìn)行主服務(wù)器切換,無疑于是一場悲劇:要進(jìn)行DRBD主機(jī)切換,首先得在主服務(wù)器上中斷MySQL,脫機(jī)DRBD卷,把從服務(wù)器狀態(tài)變更為主服務(wù)器,重新載入DRBD,最后重啟MySQL。而這一整套過程會導(dǎo)致服務(wù)中斷,因為MySQL在由中斷到重啟的過程中,我們設(shè)置了一個冷卻緩沖池,在系統(tǒng)服務(wù)重回正軌前這個冷卻機(jī)制需要時間預(yù)熱。

我們嘗試通過Percona的緩沖池恢復(fù)(buffer-pool-restore)功能來減少中斷時間,但這相對于我們體型龐大的緩沖池來說如同蚍蜉撼樹。同時該功能會增加額外的系統(tǒng)資源開銷。還有個問題是,一旦發(fā)生意外的主服務(wù)器切換,異步從服務(wù)器將停止運作,必須手動重啟。

擁抱XtraDB集群的原因

XtraDB集群的特色:相校于之前的雙機(jī)系統(tǒng),集群中采用的是三機(jī)同時運作,兩兩進(jìn)行同步備份。因此連接切換時間大為減少。

支持多主服務(wù)器同時在線,每個主服務(wù)器擁有一個熱緩沖池。異步從服務(wù)器可以選擇任何節(jié)點作為主機(jī),節(jié)點間的轉(zhuǎn)移不會中斷備份復(fù)制進(jìn)程。

自動化的節(jié)點機(jī)制與我們目前的自動化系統(tǒng)配合良好。配置新節(jié)點后,我們只需提交一個節(jié)點地址,新節(jié)點將會自動收到一個數(shù)據(jù)備份集,同步數(shù)據(jù)后會加載到主服務(wù)器群中。

前期準(zhǔn)備

將XtraDB集群接入現(xiàn)行系統(tǒng),需要進(jìn)行一定的前期準(zhǔn)備。部分是簡單的MySQL微調(diào),其余的是一些基礎(chǔ)化的操作。

在MySQL上的操作:

  • 確保只在InnoDB數(shù)據(jù)表中設(shè)置主鍵。
  • 確保不使用query cache(查詢緩存),由于cluster不支持。
  • 復(fù)制方式由基于語句的方式變更為基于行的方式。

除上述MySQL端的操作,為了能在DRBD服務(wù)器上進(jìn)行獨立的測試,應(yīng)用系統(tǒng)端需要進(jìn)行如下的變更:

  • 采用分布式鎖機(jī)制,由于MySQL采用的是從本地到集群節(jié)點的,例如:執(zhí)行SELECT FOR UPDATE語句。
  • 用Zookeeper鎖替換MySQL鎖。
  • 為了檢驗所有寫入的數(shù)據(jù)能在所有節(jié)點上進(jìn)行數(shù)據(jù)同步,我們對作業(yè)邏輯作出變更,以大量小規(guī)模數(shù)據(jù)處理代替一次性大規(guī)模數(shù)據(jù)處理。

模式變更的選擇

在XtraDB集群中進(jìn)行模式變動是牽一發(fā)而動全身的。在集群有兩種實現(xiàn)方式,一種是total order isolation (TOI,總序分離式),另外一種是rolling schema upgrade (RSU,滾動模式升級)。

在RSU模式下,允許單獨地對節(jié)點進(jìn)行更新。當(dāng)執(zhí)行DDL語句時,按序同步各個節(jié)點,執(zhí)行完畢后再重新加入集群。但是這個功能會招致不穩(wěn)定性,同時數(shù)據(jù)的大量刷新動作引起的系統(tǒng)問題是不可避免的,由于RSU需要等待DDL語句執(zhí)行完畢才能進(jìn)行緩存刷新。

相比之下,TOI的更新操作是一次性同步所有節(jié)點,阻斷集群通信直到更新完成。我們衡量一番后,決定采用TOI模式。由于系統(tǒng)中斷時間較短,所以這次沒有對集群進(jìn)行阻斷。

遷移過程

首先,我們在現(xiàn)系統(tǒng)中建立一個集群作為現(xiàn)DRBD數(shù)據(jù)庫的一個從屬。當(dāng)該從屬數(shù)據(jù)庫接收到所有寫入操作時,我們可以進(jìn)行壓力測試,看看它的承載能力如何;同時會進(jìn)行相關(guān)數(shù)據(jù)收集和分析。

在進(jìn)行一系列相關(guān)基準(zhǔn)測試后,我們發(fā)現(xiàn)了兩點技術(shù)細(xì)節(jié)是能夠幫助實現(xiàn)遷移前后的系統(tǒng)性能趨于一致:

  • 把innodb_flush_log_at_trx_commit的值設(shè)為0或2,可以獲得最優(yōu)寫入性能。由于所有變更都是被復(fù)制到3個節(jié)點的,即使出現(xiàn)失效情況都不會出現(xiàn)數(shù)據(jù)丟失情況。
  • innodb_log_file_size的值需要設(shè)置成較大數(shù)值,我們將其設(shè)置為1GB。

進(jìn)行一番測試后,XtraDB集群的各項指標(biāo)令人滿意,我們接下來開始著手進(jìn)行實際切換。

首先把所有測試環(huán)境下的配置進(jìn)行備份。因為一旦cluster出現(xiàn)宕機(jī),我們可以快速恢復(fù)其至一個單一節(jié)點cluster。我們編寫了具體的操作程序以及進(jìn)行了相關(guān)壓力測試。

在對現(xiàn)有系統(tǒng)的兩個DRBD服務(wù)器進(jìn)行從屬服務(wù)器設(shè)置后,我們還設(shè)置了其余服務(wù)器的從屬設(shè)置(例如:災(zāi)難恢復(fù),備份等)。一切就緒后,我們執(zhí)行了一次常規(guī)的從屬升級操作把系統(tǒng)切換到新環(huán)境中。

切換前后的架構(gòu)變化如下圖所示:



切換后的優(yōu)點分析

對正在運行的cluster進(jìn)行重啟和更新時,成功避免了之前造成的通信中斷影響。成功以TOI模式(pt-online-schema-change)進(jìn)行模式變更。寫入沖突處理能力得到優(yōu)化提升。當(dāng)發(fā)現(xiàn)一個沖突后,XtraDB Cluster會返回一個死鎖錯誤信息,在以TOI模式執(zhí)行DDL語句時同樣可觸發(fā)該錯誤信息返回。之后,沖突錯誤會導(dǎo)致應(yīng)用程序服務(wù)器返回一個503錯誤,而我們的負(fù)載平衡層設(shè)置會捕獲該錯誤,隨后會嘗試在另外的服務(wù)器上重新遞交寫入請求。

切換后的缺點分析

部分cluster的關(guān)鍵狀態(tài)計數(shù)器是按狀態(tài)改變的,例如在執(zhí)行顯示全局狀態(tài)指令后(SHOW GLOBAL STATUS),其值會重設(shè)為0。這樣會造成很難根據(jù)計數(shù)器來進(jìn)行重要的狀態(tài)監(jiān)控,例如流控制,因為其值的頻繁變更會造成無法準(zhǔn)確監(jiān)控系統(tǒng)的狀態(tài)(在使用XtraDB Cluster 5.6的Galera 3.x系統(tǒng)中,該問題已得到解決)。當(dāng)一寫入操作沖突發(fā)生時,MySQL動態(tài)記錄適配器會忽略來自交互語句拋出的異常。
對于系統(tǒng)冷卻預(yù)熱問題仍待進(jìn)一步改進(jìn)。目前,我們的應(yīng)用程序服務(wù)器是連接到一個本地的HAproxy實例,該實例會把自身的連接數(shù)據(jù)發(fā)送給一個cluster節(jié)點。在執(zhí)行計劃維護(hù)任務(wù)時,我們只能緩慢地把數(shù)據(jù)推入另一個節(jié)點,以在其能完全承載整個系統(tǒng)負(fù)荷前進(jìn)行緩沖池的預(yù)熱。在將來,我們會按計劃完全轉(zhuǎn)變?yōu)槎嘀鳈C(jī)環(huán)境設(shè)置,以確保所有節(jié)點都有一個就緒的緩沖池。

英文出自: Highscalability

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 国产一级毛片视频在线! | 亚洲第一成年网 | 欧美国产综合日韩一区二区 | 亚洲成a人在线观看 | 欧美性videostv极度另类 | 欧美va在线观看 | 亚洲五月婷 | 中文字幕乱码二三区免费 | 综合久久久久综合 | 亚洲 欧美 校园 | 成人6969www色 | 动漫毛片网站 | 欧美日本亚洲 | 亚洲人成网站在线观看播放青青 | 国产高清不卡一区二区三区 | 91久久亚洲精品国产一区二区 | 国产午夜精品久久久久免费视 | free性德国丰满hd | 中文乱码一本到无线202 | 亚洲自偷 | 最近最新中文字幕大全手机在线 | 精品视频在线观看一区二区三区 | 午夜在线亚洲 | 国产成人高清一区二区私人 | 亚洲专区视频 | 欧美黑人巨大最猛性xxxxx | 在线观看日韩欧美 | 久久永久免费视频 | 欧美精品一区二区三区四区 | 欧美高清正版在线 | 亚洲一区欧美 | 在线观看日韩欧美 | 欧美三级短视频 | 日韩免费一级片 | 成人欧美一区二区三区小说 | 亚州天堂网 | 尤物色视频 | 免费看www网站入口 免费看w片的网站在线看 | 高清国产一区二区三区 | 最近最新中文字幕大全2019免费视频 | www.看片|