星期一, 3月 23, 2015

DigitalOcean 的快照跟備份

備份跟快照對系統來說, 平常沒事正常運作時候看不出有什麼超級重要, 但是等到出事的時候才發現重要性就來不及了, 根本是一場真實的惡夢, 挑選平台的時候具有備份與快照功能服務的公司是必要的, 不管是 DigitalOcean 或是 Linode 都有這些服務
 
如果線上備份預算真的很拮据, 至少要定期將系統資料庫與程式碼使用 rsync 備份回公司內部的伺服器主機或是 NAS, 對於新創公司基本上省一元就是多活幾天的機會, 但是如果公司內部沒有太多工程師可以幫忙設定同步備份,  其實 DigitalOcean 的備份預算不太太貴, 大概是就是費用的 20%, 例如一個月5美元的機器, 備份預算就是1美元, 所以一台成本就是6美元, 一年大概就72美元起跳, 您可以保有最後4個版本的備份, 如果其中一個備份有問題無法成功, 那就是減免5%的費用(好像沒人希望這樣的事情發生), 理論上聽起來滿合理的
螢幕快照 2015 03 21 10 09 49
至於快照就比較簡單, 就是將整個系統硬碟, 封存起來放到冷凍庫中(我自己說的), 基本上系統不會運作, 所以只收取數據的保管費用, 將來要建立新機器的時候, 可以使用此快照快速的建立一台新機器, 保管費用是每GB為0.02美元, 以一顆20GB的硬碟來說一年的總成本大概只有4.8美元
Snapshots and Backups Pricing
The pricing for backups is 20% of the cost of the virtual server. So if you want to enable backups for a $5/mo virtual server, the cost for backups will be $1/mo.The 20% cost for backups assumes at least four successful backups per month. If for any reason one of those backups should fail, you will not be charged for that backup. For example, if 3 out of 4 backups are successful, your backups will cost 15% the cost of your server that month. You will not be charged beyond the fourth backup in a single month. For more information about DigitalOcean backups, click here.The price for snapshots will be $0.02 per GB of snapshot storage per month.
那現實環境我是怎麼做備份的?
基本上一台伺服器除了系統設定檔案之外, 最重要的大概是兩個部分 一個是程式碼, 另外一個是資料庫數據, 再來我們看看伺服器掛掉的幾個原因, 1. 網路, 2. 硬體故障, 3. 軟體故障(或遭入侵), 如果租用類似 中華電信, AWS, DigitalOcean 或是 Linode 服務我們大概可以先把網路與硬體故障這兩個原因先暫時排除掉, 因為資料中心有專業的工程師負責, 所以剩下大概就是軟體故障了
軟體故障又大概可以分為, 軟體本身的設計缺陷(bug), 使用open souce專案內原有的缺陷, 或是作業系統本身的漏洞, 關於軟體設計缺陷, 建議盡量精簡程式碼的方法編寫, 至於如果使用 open source的程式庫或是服務, 則是盡量要選比較活躍或是有大公司支持的專案來避免過大的漏洞, 不過以上的缺陷只要是在有妥善設定安全權限的伺服器上面運作, 理論上整個系統服務還是可以持續的運作
最後就是作業系統本身的漏洞了, 基本上我們要以任何作業系統都有漏洞為前提來架設防火牆的配置, 程式碼的部署理論上是拉進去, 而非上傳或是同步進去, 因此在應用伺服器裡面所有的程式碼基本上都是由另外一台專業的版本控制 Git 伺服器自動部署進去的, 而資料庫產生的數據, 基本上都是定時地同步到成本比較低的備援主機上面
由版本控制伺服器自動部署(將程式碼拉進去), 的好處是強制軟體工程師一定要用版本控制系統, 再來軟體工程師無法直接接觸線上的伺服器, 理論上每一段新編寫的程式碼都應該先經過A/B測試主機驗證沒問題後才部署到對外的主機, 另外如果因為程式漏洞被駭客修改過的程式碼也因此很容易就被曝光, 系統也可以透過定時稽核的機制比對程式碼是否遭到非法的修改, 與得知修改的內容與幅度, 因此最好的備份方法就是線上的應用伺服器其實都是使用副本在運作
所以結論是, 目前我大概會做快照(Snapshots)對我來說經濟效益比應該是最高的, 當然, 如果您覺得以上很麻煩其實您只要多花20%的自動備份費用就可以分散風險囉 ^^
拍快照前要先關機, 建議在還沒有產生資料的時候處理這樣可以得到最小的儲存空間, 例如下面這台機器總容量只有 1.5GB (*註1), 但是該有的配置與設定都有了, 包含一堆複雜的套件與客製化設定, 如果重新設定可能要花上很多時間, 而現在只要在一年才花不到1美元的 Snapshot 整個做備份, 真的是太划算了, 我的做法是把台北的線上機器 (除了真正的資料) 整個移植一份到 DigitalOcean 主機上面, 測試都沒問題之後, 做成 Snapshot (image檔案), 確認 Snapshot 的 image 檔案沒問題(姑且就稱之為罐頭), 接著就把這台DigitalOcean 上面的VM機器刪除了, 以後如果需要緊急備援的時候, 再使用這個 image檔案臨時產生一台VM的機器(就好像直接把罐頭打開來就可立即食用)就可以了, 不需要一直online燒錢, 萬一台北的機器出問題, 可以先讓快照的 image 檔案產生一台VM上線立即接手運作, 再利用半夜把後續的資料同步補上去
Screen Shot 2015 03 23 at 13 59 05
原來是備份到 Amazon Glacier 上面
Screen Shot 2015 03 23 at 14 05 19
您說這個機率大概有多少? 其實說高也不高, 但是在 2009 年還真的發生過(*註2) , 尤其是台灣地區的地震跟颱風常常發生, 那一年台灣對大陸的海底電纜斷了好幾天, 但是公司與內地的工廠還是要運作下去, 基本上只要透過分散式的架構來分散風險, 用最低的價格儲存快照, 之後在荷蘭, 美國, 新加坡與英國的異地備援系統就可以派上用場了
*註1: 如果您的硬碟為20GB容量, 但是只使用1.5GB的容量, 那麼快照(Snapshot)只會使用 1.5GB 或是更少的空間(費用), 請參考下方 DigitalOcean 的回信
Hello,
The snapshot size will be 1.5GB or less. Currently, it is not possible to check the snapshot size from your end, however, that feature will be rolled out soon but unfortunately I do not have an ETA available. Please let us know if you need additional help with this ticket.
*註2:
螢幕快照 2015 03 23 22 33 43
  • 以上文章 DigitalOcean 內含有推薦連結, 如果不喜歡可以點選這個 DigitalOcean 就沒有推薦連結了


張貼留言