2013-10-21 107 views
0

我對快照如何作爲備份有些困惑。我目前正在運行一個腳本,每天晚上執行我們的mongo數據和日誌的快照。但我看到的信息表明,快照是漸進式的,這使我感到困惑。他們是增量的嗎?如果是這樣,哪一個是基礎的,我將如何重置基地?我寧願每次都拍一張完整的快照。亞馬遜EBS快照混淆

此外,任何人都知道一種方法來自動展開舊快照?他們只是不斷建立起來。

+0

建議轉移到dba.stackexchange.com,因爲這比編程更基礎。 – WiredPrairie

+0

我不認爲dba.se會是正確的網站,因爲這似乎不是關於實際的數據庫,而是關於ec2和ebs快照。 –

回答

4

每個EBS快照都是一個獨立的快照,如果恢復到新捲上,它將爲您提供一個與其在snahshot時存在的卷相同的卷。

但是,快照存儲在S3中,它們的存儲方式(以及存儲這些快照的方式)是增量式的。

Amazon EBS快照是增量備份,這意味着只有設備上自上次快照以來更改過的塊纔會保存。如果您的設備擁有100 GB的數據,但自上次快照以來只有5 GB的數據發生了更改,則只有5個額外的快照數據會被存儲回Amazon S3。即使快照以增量方式保存,但在刪除快照時,只會刪除其他任何快照不需要的數據。因此,無論先前哪些快照已被刪除,所有活動快照都將包含恢復卷所需的全部信息。此外,恢復卷的時間對於所有快照都是相同的,提供完整備份的恢復時間,並節省增量空間。

http://aws.amazon.com/ebs/

所以在幕後,此快照只包含從先前的快照更改的塊......但恢復快照並不意味着你必須把增量碎片重新走到一起。 EBS自動爲您做到這一切,所有的幕後。

因此,假設您有一個100 GB的EBS卷,快照A,B和C按照該順序拍攝,並且沒有卷的其他快照。

快照A的大小爲100GB(可能更少,因爲您從未寫過的空間可能會從shapshot中刪除)。

如果20GB發生了變化,那麼您拍攝了快照B,該快照的大小爲20GB,但如果您恢復了它,由此產生的卷將包含完整的100GB,因爲它的指針指向shapshot A的未更改數據。

然後另一個10GB發生了變化,並且您拍攝了快照C.這將是一個10GB的快照,指針返回B用於前面的數據,其餘指針返回A.同樣,恢復這個會在您拍攝快照時獲得完整音量C.

現在,如果您刪除快照B,快照B中更改的塊但在後續拍攝中未更改,C會前滾到快照C中這樣您仍然可以在快照C點恢復整個卷,並且快照C將是30 GB的快照。

這是一個過於簡單化,因爲它可能會有一些相同的塊從A - > B和B - > C發生變化,使C的最終版本略小於30 GB,但它確實表達了總體思路。每個快照僅用於恢復目的,但EBS的內部工作只存儲與之前快照不同的部分,並且您僅支付快照包含的數據量的存儲空間。不幸的是,目前沒有辦法通過API找到每個快照的實際大小,因爲這些信息沒有暴露出來......它們總是顯示與卷大小相同。

無法自動清除快照。對於我的系統,我編寫了一個腳本,每天運行一次,根據標籤查找要進行快照的卷。然後根據我的保留策略考慮哪些卷具有足夠的快照,並刪除任何其他快照 - 但它只會刪除它自己創建的快照,並且這是基於快照腳本應用於其創建的快照的標籤。

+0

謝謝。聽起來像黑魔法,在幕後進行。如果亞馬遜爲EBS建立一個備份工具,就像他們在RDS上一樣,這將是非常好的。那麼我會用這個做一些實驗。再次,謝謝你的非常徹底的答覆。 – CargoMeister

+0

您可能還會看看Eric Hammond的[ec2-consistent-snapshot utility](http://alestic.com/2012/02/ec2-consistent-snapshot-on-github)。它將凍結文件系統,同時拍攝「應該」爲您提供最可靠快照的快照。一如既往,請記住,除非您使用備份策略實際進行成功的測試恢復,否則實際上並沒有備份策略。 :) –

+0

啊是的,我以前見過。它最終變得糟糕。在我們走得更遠之前,我們將對整個事件進行測試,包括刪除快照。再次感謝。 – CargoMeister