The Design of a Practical System for Fault-Tolerant Virtual Machines

轉(zhuǎn)載自:http://blog.luoyuanhang.com/2017/05/20/ftvm-notes/

論文地址:The Design of a Practical System for Fault-Tolerant Virtual Machines

在分布式系統(tǒng)中史汗,容錯方法有很多種犯犁,常見的傳統(tǒng)方法有:主/副服務器方法(當主服務器宕機之后毁靶,由副服務器來接管它的工作)志膀,這種方法通常需要機器之間的高帶寬舞肆。

另外還有確定(deterministic)狀態(tài)機方法:將另一臺服務器初始化為和主服務器一樣的狀態(tài)碱屁,然后讓它們都接受到同樣的輸入刁绒,這樣它們的狀態(tài)始終保持一致紧阔,但是這種方法對于非確定的(non-deterministic)操作并不適用坊罢。

本文中討論的方法是使用虛擬機作為狀態(tài)機,它具有以下優(yōu)點:

  • 操作全部被虛擬化
  • 虛擬機本身就支持 non-deterministic 操作
  • 虛擬機管理程序(Hypervision)能夠記錄所有在虛擬機上的操作擅耽,所以能夠記錄主服務器(Primary)所有操作活孩,然后在副服務器(Backup)上進行演繹

基本設(shè)計方案

img

如圖就是本文提到的容錯系統(tǒng)的架構(gòu),一個 Primary乖仇,一個 Backup憾儒,Primary 和 Backup 之間通過 Logging Channel 進行通信询兴,Primary 和 Backup 基本保持同步,Backup 稍稍落后起趾,它們兩個之間會通過 heartbeat 進行 fail 檢測诗舰,并且它們使用共享磁盤(Shared Disk)。

確定(deterministic)操作的演繹

讓兩臺機器初始狀態(tài)相同训裆,它們接受相同的輸入眶根,順序相同,兩臺機器執(zhí)行的任務的結(jié)果就會相同缭保。

但是如果存在非確定的(non-deterministic)操作(比如中斷事件汛闸、讀取CPU時鐘計數(shù)器的值操作就是非確定的),它會影響狀態(tài)機的執(zhí)行艺骂。

難點在于:

  • 需要捕捉全部的輸入和 non-deterministic 操作在保證 Backup 是deterministic 的
  • 需要準確將全部輸入和 non-deterministic 操作應用到 Backup 中
  • 需要保證系統(tǒng)高效

設(shè)計方案為:將所有的 input 和 non-deterministic 操作寫入到 log 中(file)诸老,對于 non-deterministic 操作還要記錄和它相關(guān)的狀態(tài)信息等,確保 non-deterministic 操作后Backup狀態(tài)還是和 Primary 一致

FT(Fault-Tolerance)協(xié)議

FT 協(xié)議是應用于 logging channel 的協(xié)議钳恕,協(xié)議的基本要求為:

如果 Primary 宕機了别伏,Backup 接替它的工作,Backup 之后向外界發(fā)出所有的 Output 要和 Primary 原本應當發(fā)送的一致忧额。

為了保證以上的要求厘肮,設(shè)計如下系統(tǒng):

  • Primary會在所有關(guān)于本次Output 的所有信息都發(fā)送給 Backup 之后(并且要確保 Backup 收到)才會把 output 發(fā)送給外界
  • Primary 只是推遲將 output 發(fā)送給外界,而不會暫停執(zhí)行后邊的任務

流程如圖所示:

img

但是這種方法不能保證 output 只發(fā)出一次睦番,如果 primary 宕機了类茂,backup 不能判斷它是在發(fā)送了 output 之前還是之后宕機的,因此 backup 會再發(fā)送一次 output托嚣。但是這個問題很容易解決巩检,因為:

  • output 是通過網(wǎng)絡進行發(fā)送的,例如 TCP 之類的網(wǎng)絡協(xié)議能夠檢測重復的數(shù)據(jù)包
  • 即使 output 被發(fā)送了2次其實也沒關(guān)系示启。如果 output 是一個寫操作兢哭,它會在同一個位置寫入兩次,結(jié)果不會發(fā)生變化夫嗓;如果 output 是讀取操作迟螺,讀的內(nèi)容會被放入 bounce buffer(為了消除 DMA 競爭),數(shù)據(jù)會在 IO 中斷之后被送到

宕機檢測

如何知道有機器宕機舍咖,在該系統(tǒng)中是十分重要的矩父。該設(shè)計使用的是UDP heartbeat 機制來檢測 Primary 與 Backup 之間的通信是否正常排霉。

但是使用這種方法會存在裂腦問題(split-brain窍株,Primary 和 Backup 同時宕機),該怎么解決呢?

該設(shè)計中使用了共享存儲(Shared Storage)夹姥,對它的操作是原子的,Primary 和 Backup不能同時進行一個操作(提供原子的 test-and-set 操作)

如果檢測出 Primary 宕機辙诞,Backup 會成為 Primary辙售,接替之前的工作,然后再尋找一個 Backup飞涂。

具體實現(xiàn)

啟動/重啟 Virtual Machine

如何啟動一個和 Primary 狀態(tài)一樣的 Backup旦部?

VMware Vmotion 操作能夠?qū)⒁慌_ VM 從一個 Server 完整的遷移到另一個 Server(只需要很短的中斷),在該設(shè)計中的方法對 Vmotion 做了一點修改较店,不是進行遷移士八,而是直接克隆。

管理 Logging Channel

img

如圖梁呈,該設(shè)計使用了一個大的 buffer婚度,來保存 logging entries,Primary 把自己的 entry 存到 buffer 中官卡,由 logging channel 發(fā)送給Backup 的 buffer蝗茁,然后 Backup 從 buffer 讀取命令執(zhí)行。

  • 如果 Backup 的 buffer 空了寻咒,沒有命令執(zhí)行了哮翘,Backup 會等待新的 entry
  • 如果 Primary 的 buffer 滿了,Primary 會等待毛秘,等 buffer 中有空余空間再繼續(xù)執(zhí)行

Disk I/O問題

  1. disk 操作是并行的饭寺,同時對 disk 的同一位置進行操作會導致 non-deterministic

    解決方案:檢測 IO 競爭,使這些操作串行執(zhí)行

  2. Disk IO 使用 DMA(Direct Memory Access)叫挟,同時訪問內(nèi)存同一位置的操作會導致 non-deterministic

    解決方案:對 disk 操作的內(nèi)存設(shè)置內(nèi)存的頁保護艰匙,但是這種方法代價太高;該設(shè)計中使用了 bounce buffer霞揉,它的大小和 disk 所操作的內(nèi)存部分大小是一致的旬薯,read 操作直接將內(nèi)容讀入 buffer,當其他操作完成适秩,寫入內(nèi)存绊序,write 操作將寫內(nèi)容寫入 buffer,之后再寫入磁盤秽荞。

總結(jié)

Vmware 提出的這種 Primary/Backup 方法是分布式容錯方法中非常重要的一部分骤公,可以用在許多系統(tǒng)中,不僅僅是分布式存儲(GFS 的容錯方法)扬跋,也可以用在分布式計算中阶捆,因為它是將所有的操作都記錄下來,將它們重新在 Backup 上進行演繹,從而起到了備份的作用洒试,能夠做到容錯(Fault-Tolerance)倍奢。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市垒棋,隨后出現(xiàn)的幾起案子卒煞,更是在濱河造成了極大的恐慌,老刑警劉巖叼架,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畔裕,死亡現(xiàn)場離奇詭異,居然都是意外死亡乖订,警方通過查閱死者的電腦和手機扮饶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乍构,“玉大人甜无,你說我怎么就攤上這事±桑” “怎么了毫蚓?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長昔善。 經(jīng)常有香客問我元潘,道長,這世上最難降的妖魔是什么君仆? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任翩概,我火速辦了婚禮,結(jié)果婚禮上返咱,老公的妹妹穿的比我還像新娘钥庇。我一直安慰自己,他們只是感情好咖摹,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布评姨。 她就那樣靜靜地躺著,像睡著了一般萤晴。 火紅的嫁衣襯著肌膚如雪吐句。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天店读,我揣著相機與錄音嗦枢,去河邊找鬼。 笑死屯断,一個胖子當著我的面吹牛文虏,可吹牛的內(nèi)容都是我干的诫硕。 我是一名探鬼主播戏蔑,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼猾漫,長吁一口氣:“原來是場噩夢啊……” “哼省撑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起丸相,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤阻星,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后已添,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡滥酥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年更舞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坎吻。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡缆蝉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瘦真,到底是詐尸還是另有隱情刊头,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布诸尽,位于F島的核電站原杂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏您机。R本人自食惡果不足惜穿肄,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望际看。 院中可真熱鬧咸产,春花似錦、人聲如沸仲闽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赖欣。三九已至屑彻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間畏鼓,已是汗流浹背酱酬。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留云矫,地道東北人膳沽。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親挑社。 傳聞我的和親對象是個殘疾皇子陨界,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容