雲端備份的四個基本方法

對你來說叫做「雲端」的東西,一點也不虛無漂渺,

實際上也只是「機房的硬體加上虛擬化相關的各種軟體」,

既然是軟硬體,就有可能老舊、壞掉、出現 Bug,導致服務中斷。

另一方面,如果應用程式沒寫好、架構設計不夠彈性,

或是錯估用戶流量,導致主機無法承載而崩潰,

都會讓服務中斷,因此備份這件事「不得不然」。

其實雲端備份的概念和技術不難,

關鍵在於公司如何看待備份這件事,

如果你把它當成戰略目標,當成對服務品質的保證,

你就要訂義所謂的 RPO 和 RTO:

1. RPO (Recovery Point Objective) 復原點目標

指的是「你最多可以忍受掉多少資料?」

因為從你最後一次備份完之後,到服務中斷的時間點,

中間累積的資料是直接遺失的,這資料有多重要,只有你自己知道。

2. RTO (Recovery Time Objective) 復原時間點目標

指的是「你最多可以忍受中斷多久?」

因為中斷後,用戶無法存取服務,只能等你把服務恢復運作。

如果只是公司介紹的官網,最多就是客戶一時查不到資料,

如果是股票交易系統,客戶無法下單造成的損失,可能會危及公司存亡。

RPO 和 RTO 示意圖
圖片來源:自行繪製

坊間有很多「專門做備份的品牌」,

像是 Veeam、NetApp 和 Arconics,

都在巿場上行之有年,以專業技術做到備份的廣度和深度,

產品價格也非一般中小企業可以負擔。

而 GCP 提供的備份功能,除了備份的資料量以外,無須負擔太多額外費用,

只要在你公司容許的 RPO 或 RTO 之下,都可以輕易使用這些功能。

以下就主機、磁碟、檔案和資料庫四種層級分別說明:

一、雲端主機如何備份?

「主機」在這裡指的是「作業系統」層級,

對整台 Compute Engine 機器備份,

其實就是對底下的 Boot Disk (開機磁碟) 備份,

而 Boot Disk 備份方法包含:

快照 (Snapshot) 、映像檔 (Image)、機器映像檔 (Machine Image) 和磁碟 (Disk) ,

而主要用在備份還原的場景,就是快照和機器映像檔。

1.快照 (Snapshot)

快照就是「記錄 Disk 當下的狀態」,若主機有問題,

無法修復的話,可以利用此快照還原到新的 Disk,

而且快照是做差異備份,並不會每次都針對整顆 Disk 備份,

造成資料太多和費用增加。

重點是快照可以設定排程自動執行,

包含每幾個小時一次、每天一次或每週哪幾天備份,

你可以依照 RPO 和 RTO 來決定想要的備份頻率。

不過要注意的是,只有 Standard 快照才可以套用排程,

Archive 和 Instant 快照無法套用排程,

但仍可以使用 Cloud Scheduler 搭配 Cloud Function

程式來定期建立快照。

建立快照排程設定
圖片來源:截圖自 GCP Console

而備份都講求要做到「異地」,

所以你在台灣 asia-east1 的主機,可以選擇「多地區」的快照,

這樣備份就不會只儲存在台灣,當台灣的資料中心有問題時,

仍然可以從亞洲其他 Region 來還原你的主機。

除此之外,排程也能設定自動刪除舊的快照,

讓你可以不用累積大量備份資料,導致額外成本。

而且快照是增量備份的型式,不會每次都整顆 Disk 備份,

除了第一次備份全部資料,第二次開始只會針對異動的資料備份。

關於快照費用,以亞洲 (Multi-Region) 來講是每 GB 0.083 美元。

至於還原速度有多快,我曾經做過小規格 Windows 主機的快照,

Disk 是 50GB,快照資料量是 20 GB,

執行還原的時間花了 80 秒左右,

依不同規格和資料大小而有所不同,僅供參考。

2.機器映像檔 (Machine Image)

有些機器不會只有 Boot Disk,會另外使用 Disk 儲存重要資料,

像是 Windows 也會另外使用 D 槽的概念,那要如何一次備份多個 Disk?

就可以用機器映像檔,同時備份一台主機的所有 Disk,確保資料讀寫的一致性,

此外它還能夠備份主機的各項設定,例如機器規格、

防火牆標記 (Tag)、SSH Key、服務帳戶、可用性政策等等,

讓你在建立機器時不用重新設定,是比較方便的地方,

而且它也和快照一樣,能夠只針對差異的內容備份。

不過它沒有內建的排程備份,

但仍可以使用 Cloud Scheduler 搭配 Cloud Function 程式來定期備份。

機器映像檔的儲存費用,以亞洲為例為每 GB 0.05 美金。

機器映像檔能夠記錄的設定資訊
圖片來源:截圖自 GCP Console

二、雲端磁碟如何備份?

如果撇開 Boot Disk 的備份,非開機磁碟的備份方案如下說明:

1.區域永久磁碟 Regional Persistent Disk

區域永久磁碟是同時在兩個 Zone 開 Disk,

例如 asia-east1-b 跟 asia-east1-c,

然後掛載到主機上,主機可以設定資料庫使用這個 Disk,

當資料有寫入動作,就會同時往兩個 Zone 的 Disk 寫入,

其費用就是兩顆 Disk 的費用。

Regional Persistent Disk 架構示意圖
圖片來源: GCP 官方文件

一旦主機有任何問題中斷了,

主機可以先在 asia-east1-c 使用快照建立機器的 Boot Disk,

然後掛載 asia-east1-c 的 Regional Persistent Disk。

好處在於,資料是最新的,因為資料本來就一直寫入這個 Disk,

直接到原來的主機壞掉那一刻,

所以不用再做什麼還原動作,掛載之後可以立即使用,非常方便,

如果你對 RPO 和 RTO 要求很高,就可以選擇這個方案。

但要注意的是,開機必須要手動,

你至少要給自己設定 Uptime Check,

這樣主機有問題才能立即接收到通知。

這裡特別提一下,區域永久磁碟也可以再加上快照排程,讓備份更完善喔!

2.映像檔 (Image)

映像檔也是對 Disk 備份,但是它不能排程備份,也不能差異備份,

因為它本來就不是拿來做備份還原的用途,

是拿來做 Autoscale、CI/CD 或地端主機上雲用的,在此不多贅述。

3.磁碟 (Disk)

磁碟本身可以讓你複製和設定備份排程,

但也沒有差異備份、Autoscale 或 CI/CD 的功能。

三、雲端檔案如何備份?

第一段快照的備份方式,算是比較粗略的方法,

如果檔案變動較快速,在快照建立的當下,

可能會有資料不一致的問題。

因此針對重要檔案的備份,必須另外處理。

1.主機的排程工作 (Cronjob)

我們可以在主機內設定排程工作,

例如每小時就執行 rsync 或 cp 指令,

將某個檔案或資料夾,複製到 Cloud Storage。

因為 Cloud Storage 目前已經能夠做到 99.999999999%

共 11 個 “9” 的年度耐用性,

代表資料遺失的機率極低,是當然的備份選項。

而且 Cloud Storage 是面對全球所有用戶,

每分每秒承載數千萬次存取的 API 服務,

其可用性不是一般的服務可以比較的。

但要注意主機本身要穩定運作,才能讓 Cronjob 確實執行。

Windows 也可以使用工作排程器執行 PowerShell 指令,定期複製資料。

2.Cloud Storage Fuse

假如不是針對某個檔案或資料夾備份,

而是針對整個 Disk 的所有檔案做備份,

可以使用 Cloud Storage Fuse,

直接把整個 GCS Bucket 掛載到主機變成一個分割區,

這樣所有的讀寫就是「即時」對 Cloud Storage 直接操作,

不用擔心儲存上的問題,

而且 Bucket 空間是無限大的 (下圖顯示為 1PB 但實際上無限大),也不用擔心 Disk 滿了。

如果你的 Bucket 是 Multi-Region 的,

等於一次把檔案寫入多個國家,自動做完異地備份。

原本這個服務都只在「社群支援」的程度,官方不保證其效能和穩定性,

但去年已經改成「官方支援」,

代表使用上有任何問題,都可以請 Google 技術人員協助。

那也可以掛載到 Windows 主機嗎?

目前也有社群版本的 gcsfuse-win 可以用。

但是要注意,Cloud Storage 的本質仍然是網路上的 API,

故讀寫的 IOPS 速度比不上真正的 Disk,

但可用性 (Availability) 和耐用性 (Durability) 則是優於 Disk。

3.Cloud Storage 的費用說明

Cloud Storage 分成四個儲存等級:

Standard、Nearline、Coldline 和 Archive,

不同等級的單價不同,以多區域為例,這裡直接擷圖官方表格如下:

不同等級 Cloud Storage 儲存費用
圖片來源: GCP 官方文件

當你使用主機的排程工作,可以視檔案多久會被提取一次,

來決定要用哪一種儲存等級,

要注意所謂的提取 (Retrieval) 包含讀取、複製、移動或重新寫入 Nearline 、Coldline

或 Archive 的物件或 Metadata,都會產生費用,整理如下表:

Cloud Storage 提取費用
整理自GCP 官方文件

如果你是用 Cloud Storage Fuse,會在一個月內頻繁寫入和讀取,

使用 Nearline 、Coldline 或 Archive 都相對不划算,

因此可以直接選擇 Standard,就不用負擔提取的費用。

另外,Cloud Storage 除了資料本身的儲存和提取費用之外,

對 Cloud Storage 的「操作」(就是呼叫 API) 也會計費,

分成 Class A 和 Class B,

像「備份」就是把一個檔案上傳到 GCS Bucket 中,

底層運作就是呼叫 storage.object.insert 這個 Class A 的 API 操作,

而取得或下載檔案,是呼叫 storage.object.insert 這個 Class B 的 API ,

以 Standard 的儲存等級,儲存兩個以上 Region 為例,

Class A 操作,一個月內超過 5,000 次,每多 1,000 次計 0.01 美元。

Class B 操作,一個月內超過 50,000 次,每多 1,000 次計 0.0004 美元。

四、雲端資料庫如何備份?

如果你是使用 Compute Engine 的主機自建資料庫,

例如 MySQL、Postgre SQL 或 SQL Server,

你能做的備份就是快照、區域永久磁碟快或原生的備份方法,步驟比較繁雜。

但如果你用的是 Cloud SQL 的話,那就方便很多,方法如下:

1.Cloud SQL 自動備份

你可以在建立資料庫主機時,勾選自動備份,

預設是每天執行一次備份。

當然這樣的 RPO和 RTO 是不夠的,

你可以 啟用 Point-in-time 復原點還原,

讓你想還原到幾點幾分都可以,

而這個功能也是勾一下就可以用了。

Cloud SQL 備份設定
圖片來源:截圖自 GCP Console

如果你本來就開在兩個 Zone 的話,

那就直接帶有自動備份跟復原點還原,

還能達成 HA (High Avalibility) 備援架構,主機有問題會自動移轉,完全不用介入處理。

關於備份的費用,MySQL、Postgret SQL 和 SQL Server 都是每 GB 0.08 美金,

如果是 HA 架構,就是再多一倍費用,為每 GB 0.16 美金。

2. Cloud SQL 唯讀副本 (Read Replica)

Cloud SQL 還能建立唯讀副本,不只在同個 Region,也能跨 Region,

你可以把主要資料庫建在台灣,副本資料庫建在美國。

當你寫入在台灣的資料庫,它會瞬間寫入美國的副本資料庫,

實測1秒之內就可以在美國讀到資料。

除了上述的還原方法,你也可以直接把副本升級成正式資料庫,

也算是變相的還原方式。

整個過程都是滑鼠點選就全部完成,

完全沒有複雜的指令或操作技術。

要注意的是,唯讀副本被視為完整資料庫主機,

所以會依照你選定的規格來計費,

但你不需要和原來資料庫相同規格,

可以選擇較小的規格,來節省費用。

3.使用 Cloud SQL 匯出 

上述兩種都是雲原生的資料庫備份方法,無法相容於非 Cloud SQL 的資料庫。

如果想把資料備份出來,並且可以在其他地方運作的話,可以使用 Cloud SQL 匯出。

包含 SQL Dump 檔案匯出CSV 檔案匯出 (注意 SQL Server 不支援)。

你可以手動在 Cloud SQL 主控台上點擊 Export,

選擇 Cloud Storage 的 Bucket 來儲存匯出的檔案。

如果要自動化,可以找一台虛擬機器,

設定 Cronjob 排程工作,但要確保主機穩定讓工作如期執行。

或是使用 Cloud Schduler 定期呼叫 Cloud Function 來執行匯出

以 MySQL 資料庫為例,SQL Dump 匯出可以執行以下指令:

gcloud sql export sql [instance_name] gs://[bucket]/sqldumpfile.gz –database=[database_name] –offload

這個方法要注意的地方很多,

包含匯出要設定正確的權限、預留 25% 以上的儲存空間、

DEFINER 語法可能會失敗、記憶會大量占用,

以及還原到(匯入)目的地資料庫的權限要設定正確等等,

而且還原必須要人工執行,並且驗證還原的結果正確無誤,

只要有個環節沒注意就會有些差錯。

因此整個操作相當複雜,務必參考 Best Practice 和各種已知問題

五、總結

在這裡將各種備份方式整理如下圖:

各種備份方法比較
圖片來源:自行繪製

像前面三段提到的備份方案,都是針對你使用 VM 的備份方法,

如果要更完善,建議你把層次拉高,

從整體架構面來調整,而不是侷限在 VM。

例如前端改成無狀態 Instance Group,

或是無伺服器例如 Google App Engine、Cloud Run 或 Cloud Function,

機器有問題就自動重啟一台新的,保持乾淨的環境,速度又快,

而檔案都固定從 Cloud Storage 或 Filestore 載入,

資料也只讀寫外部的 Cloud SQL,

各個功能都分開專門處理,除了效能提高,有問題也容易找到原因。

最後還是客觀地提醒,不要過度依賴單一廠商,

你可以多雲或混合雲,確保單一來源有任何問題,可以從其他地方復原。

等到公司規模變大之後,再去考慮專業的備份軟體,做到更完善的備份備援。

其實 GCP 近期也有 Backup and DR 企業等級的專業備份服務,未來有機會再特別說明。

本文同時刊登於思想科技官網部落格文章《【東東老師 X 思想科技】雲端備份的四個基本方法》

Table of Contents
返回頂端