在前面的 Day 06 中,我們介紹了 RTO/RPO 估算以及 BCP 營運持續計畫。我們將聚焦於昨天提到的備援架構中的專有名詞,並逐行解析實務中最常使用的自動化備份與指令。
以架構來看可以分成3種模式:分別是Hot Standby(熱備援)、Warm Standby(溫備援)、Cold Standby(冷備援)
Hot Standby(熱備援):備援伺服器保持開機,資料庫透過 Active-Passive 或 Active-Active 進行即時同步。就像發動中、隨時準備接手的雙引擎主節點一故障,系統能在秒級至分鐘級內自動切換接管服務,RTO 趨近於零,但維運成本最高。
Warm Standby(溫備援):簡單來說就是準備好備用引擎,但沒有啟動。備援環境已經建置完成(如雲端已開好小規格機器、套件已安裝),資料定期非即時同步。當主要系統掛掉時,需要手動或半自動腳本匯入資料,RTO 約在數十分鐘至數小時,成本適中。
Cold Standby(冷備援): 不開啟何備援機器,僅保存備份檔與基礎架構程式碼。災害發生時才從零建立雲端伺服器、還原資料庫。RTO 可能長達數天,但平時維護成本最低。
以策略來看可以分成3種模式:分別是Full Backup(全備份)、Incremental Backup(增量備份)、Differential Backup(差異備份)
Full Backup(全備份): 複製目標系統中的所有數據。優點是復原最簡單快捷;缺點是耗費最大儲存空間與網路頻寬。
Incremental Backup(增量備份): 僅備份「自上一次備份以來」變動的資料。優點是速度極快、佔用空間小;缺點是復原時需將全備份與後續所有增量備份按順序合建,復原手續最繁瑣。
Differential Backup(差異備份): 僅備份「自上一次全備份以來」變動的資料。優點是復原時只需要「最後一次全備份 + 最後一次差異備份」;缺點是隨著時間推移,差異備份檔會越來越大。
拿昨天的指令來舉例
0 2 * * * pg_dump -U postgres company_db > /mnt/nas/backup/db_backup.sql
這行指令可以分為兩個部分:前面是使用Cron 時間表達式設定時間,後面是實際執行的 Linux 指令。0 2 * * *時間欄位由左至右分別為:分 時 日 月 星期
* * *:每天、每月、每週幾都執行綜合意義: 「每天凌晨 02:00 定時執行一次」。
pg_dump -U postgres company_db > /mnt/nas/backup/db_backup.sql
>:Linux 的重新導向符號(Redirect),將產生的 SQL 明文輸出寫入後方指定檔案。若要將上述指令改造成符合作業安全(DevSecOps)標準的範例,建議改寫如下:
0 2 * * * pg_dump -U backup_user -h localhost company_db | gzip | gpg --encrypt --recipient "admin@company.com" > /mnt/nas/backup/db_$(date +\%Y\%m\%d_\%H\%M\%S).sql.gz.gpg
與上面的差異: