如何執行 zfs 池的增量/連續備份?
如何在異地連續/增量備份 zfs 池?
我認識到
send/receive
over ssh 是一種方法,但是它需要手動管理快照。我發現了一些工具,但大多數不再受支持。
一個看起來很有前途的工具是https://github.com/jimsalterjrs/sanoid但是我擔心非廣為人知的工具可能弊大於利,因為它可能會損壞/刪除數據。
如何執行連續/增量 zfs 備份?
ZFS是一個令人難以置信的文件系統,可以解決我的許多本地和共享數據儲存需求。
雖然,我確實喜歡盡可能使用**集群 ZFS**的想法,但有時它不切實際,或者我需要儲存節點在地理上的一些分離。
我的案例之一是 Linux 應用伺服器上的高性能複制儲存。例如,我支持一個傳統軟體產品,該產品受益於低延遲 NVMe SSD 驅動器的數據。該應用程序有一個應用程序級鏡像選項,可以復製到輔助伺服器,但它通常不准確,並且是 10 分鐘的RPO。
我已經通過擁有一個可以是本地、遠端或兩者的輔助伺服器(也在類似或不同的硬體上執行 ZFS)解決了這個問題。通過結合下面詳述的三個實用程序,我精心設計了一個複制解決方案,它為我提供了連續複製、深度快照保留和靈活的故障轉移選項。
zfs-auto-snapshot - https://github.com/zfsonlinux/zfs-auto-snapshot
只是啟用定期 ZFS 文件系統級別快照的便捷工具。我通常在生產量上按照以下時間表執行:
# /etc/cron.d/zfs-auto-snapshot PATH="/usr/bin:/bin:/usr/sbin:/sbin" */5 * * * * root /sbin/zfs-auto-snapshot -q -g --label=frequent --keep=24 // 00 * * * * root /sbin/zfs-auto-snapshot -q -g --label=hourly --keep=24 // 59 23 * * * root /sbin/zfs-auto-snapshot -q -g --label=daily --keep=14 // 59 23 * * 0 root /sbin/zfs-auto-snapshot -q -g --label=weekly --keep=4 // 00 00 1 * * root /sbin/zfs-auto-snapshot -q -g --label=monthly --keep=4 //
Syncoid (Sanoid) - https://github.com/jimsalterjrs/sanoid
該程序可以執行 ZFS 文件系統的臨時快照/複製到次要目標。我只使用產品的同步部分。
假設server1和server2 ,從****server2執行簡單命令以從server1提取數據:
#!/bin/bash /usr/local/bin/syncoid root@server1:vol1/data vol2/data exit $?
Monit 是一個極其靈活的作業調度器和執行管理器。預設情況下,它以 30 秒的間隔工作,但我修改配置以使用 15 秒的基本時間週期。
每 15 秒(1 個週期)執行上述複製腳本的範例配置
check program storagesync with path /usr/local/bin/run_storagesync.sh every 1 cycles if status != 0 then alert
這很容易通過配置管理實現自動化和添加。通過在 Monit 中包裝快照/複製的執行,您可以獲得集中狀態、作業控制和警報(電子郵件、SNMP、自定義腳本)。
結果是我的伺服器具有多個月的快照以及許多回滾點和保留點:https ://pastebin.com/zuNzgi0G - 另外,一個連續滾動的 15 秒原子副本:
# monit status
Program 'storagesync' status Status ok monitoring status Monitored last started Wed, 05 Apr 2017 05:37:59 last exit value 0 data collected Wed, 05 Apr 2017 05:37:59 . . . Program 'storagesync' status Status ok monitoring status Monitored last started Wed, 05 Apr 2017 05:38:59 last exit value 0 data collected Wed, 05 Apr 2017 05:38:59