當前位置:
首頁 > 科技 > 單機存儲系統中的故障恢復

單機存儲系統中的故障恢復

一、故障與恢復

本文中介紹的故障恢復主要是只單機存儲系統中的故障恢復,就是只有一台電腦,與之相對的是分散式存儲系統,暫且不談。

所謂故障,就是指電腦中途突然掛掉,死機,斷電等等。

所謂恢復,主要是恢復內存中的數據,而不是硬碟上的,因為硬碟上的數據是持久化的,而內存中的數據是易失的。恢復主要通過日誌來進行恢復。

單機存儲系統中的故障恢復

二、日誌

日誌主要分為兩種類型。undo日誌和redo日誌。日誌記錄的最小單位是事務,因為事務是原子性的,一個事務中可能會包含多個操作,一個事務中的操作要麼全部執行成功,要不全部執行失敗。對於每個事務,都會記錄日誌。undo日誌記錄的是事務更改前的狀態,而redo日誌記錄的是事務更改後的狀態。

舉個例子:X最初的值是5,你要在一個事務里將X的值更改為10。那麼undo日誌會記錄事務修改前的狀態<X,5>,而redo日誌會記錄事務更改之後的狀態,<X,10>。

操作系統會在內存中執行事務,並且將內存中的數據定期刷到磁碟中,從而實現將隨機寫轉化為順序寫。

三、redo日誌

重點講一下redo日誌。它記錄的是事務修改後的狀態。redo日誌記錄的順序是這樣的:

將redo日誌以追加的方式寫到磁碟的日誌文件中

將redo日誌記錄的操作在內存中進行真正的執行

返回操作成功或者失敗。

需要注意的點,是對於redo日誌來說,是要先將日誌寫到磁碟中,才能去內存中執行修改。這個順序不能顛倒。當電腦故障的時候,內存中的東西,比如X的值會丟失,但是X得值在日誌中是有記錄的,日誌又是被寫到磁碟上的,斷電不會丟失,所以可以通過讀取redo日誌成功找回X的值,將其在內存中進行恢復。

四、redo操作的優化

我們來看一下redo操作,對於每一個事務,當事務在內存中被真正執行之前,都要先往磁碟里寫redo日誌,但是,寫磁碟這個行為代價是很高的,並且如果同時有大量的事務要執行,每次都要寫磁碟,那麼會帶來較差的性能。

這裡就要分情況了,對於一致性要求高的應用,應該保證每一個事務開始前,redo日誌立刻刷入磁碟。但是對於一致性要求不高的應用,則可以先將redo日誌在內存的緩衝區中先進行緩存,等到一定的時間(如10ms)或者一定的大小(512KB)之後再定期刷入磁碟,這種優化方式被稱為成組提交,這樣就會提高系統吞吐量。但是這樣做的缺點,是如果發生故障,被緩存在內存中的一些redo日誌也會丟失,所以可能會丟失部分操作。另外,會犧牲寫事務的時延,因為提交的寫事務並不是立刻執行,要先等足夠的redo日誌被刷到磁碟才會開始執行。

五、checkpoint 檢查點

除了內存中緩存的redo日誌要被定期刷入磁碟外,內存中的數據也要被定期刷入磁碟,每當內存中的一組數據被刷入磁碟後,需要記錄日誌的回放點,以後的故障恢復只需要redo回放點後邊的日誌即可,回放點之前的日誌不需要被redo了,因為相關數據已經被刷入磁碟,不會丟失。當內存中的數據被刷入磁碟後,會在磁碟上形成一個checkpoint文件,文件中有記錄的日誌回放點。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 中國存儲 的精彩文章:

快閃記憶體陣列的垃圾回收及「寫斷崖」
你真的了解軟體定義的分散式存儲嗎?

TAG:中國存儲 |