ZFSミラー化プールの効果的なオフサイトバックアップ戦略は何ですか?


9

2つのミラーリングされたディスクで構成されるZFSプールを使用しています。オフサイトバックアップを実行するために、さらに2つのディスクを購入しました。

私の最初の計画は、3番目のディスクをミラーに接続してオフサイトバックアップを作成し、ZFSが回復するのを待ってから、ドライブを切り離してオフサイトに運ぶことでした。これは十分に機能しますが、ディスクが接続されるたびに完全な復元を実行するように見えることに驚いています(読み取りごとに、おそらく誤解されていますが、接続するたびに増分または差分復元が発生します)。これにより、許容範囲を超えるバックアップが行われます。

私の要件は、毎日ローテーションできるzpoolとそのすべてのスナップショットのオフサイトコピーを用意することです。つまり、再同期には最大で24時間かかることを意味します。現在はそれに近いのですが、プールを拡張する計画では、その時間枠を超えてプッシュします。

完全な復元操作を必要としないオフサイトのバックアップを保持するにはどうすればよいですか?バックアップドライブで別のファイルシステムを使用する必要がありますか(ZFSプールの一部にするのではなく、イメージをエクスポートするなど)?別のプールにバックアップを作成し、作成時に新しいスナップショットをそのプールに送信する必要がありますか?


私の現在の戦略は、複数のプールを使用する方法で、スナップショットの同期を保つためにzfs sendおよびreceiveを使用しています。あなたがこれまたはより良いオプションに対する議論を見つけたかどうか聞いてみたいです。
so12311 2014年

回答:


3

多くのいじくりと実験の結果、かなり大きなトレードオフがありましたが、解決策を見つけました。

まず、私が除外しなければならなかったオプション:

  • ミラーリングされたプールを備えた2番目のオフサイトZFSサーバーを用意することは、コストのために選択肢になりませんでした。それがオプションであった場合、これは断然最良のアプローチであり、スナップショットをリモートプールに送信するためにZFS送信/受信を利用します。

  • 2つ目のオンサイトZFSミラープールがあり、ディスクを削除して持ち帰ることができます。これは最初のオプションよりも実行可能ですが、2番目のプールには常に2つのディスクをオンサイトにする(または1つのオンサイトディスクで2つのデータコピーを使用する)必要があります。現在、私には4つのディスクがあり、サーバーの5分の1のスペースはありません。これは公平なアプローチですが、それでも理想的ではありません。

  • ZFSアタッチおよびデタッチを使用して、バックアップディスクをミラーリングされたプールの内外にローテーションします。これはうまく機能しますが、ディスクが追加されるたびに完全な復元を実行する必要があります。これには受け入れられないほど長い時間がかかるため、これに頼ることはできませんでした。

私のソリューションはattachandの使用に似てdetachいますがonline、andを使用していofflineます。これには、完全な再同期よりも差分再同期を実行するという利点がありますが、プールは常にDEGRADED状態を報告するという欠点があります(プールには常に2つのディスクがあり、回転オフサイトディスクofflineは、リモートストレージにあり、再同期してオンラインになるとマークされます。オンサイトの場合)。

だから、簡単な要約と私のセットアップの概要:

1つのZFSサーバーと4つの同一のディスクがあります。ZFSは、ミラーリングされたプールを使用するように設定されています。4つのディスクのうち2つは、このプールの永続的なメンバーです。他の2つのディスクは回転します。1つは常にオフサイトストレージにあり、もう1つはすぐに使えるバックアップとして機能するプールの一部です。

バックアップをローテーションするときがきたとき:

  • zfs scrubバックアップディスクにエラーがないことを確認するために完了するのを待ちます

  • I zfs offlineリモート取られるディスク。オフラインになった後、hdparm -Y /dev/idスピンダウンしました。1分後、ディスクスレッドを部分的に取り外し(電力の損失を確実にするのに十分なほど)、ドライブを完全に引き出す前にさらに1分待って、回転が停止したことを確認します。ディスクは固定バッグに入れられ、保護ケースに入れられてオフサイトに送られます。

  • 他のオフサイトディスクを持ち込みます。ホットスワップトレイにインストールされ、起動します。私zfs onlineはディスクをプールに復元し、部分的な再同期を開始してそれを並行させるために使用しています。

このシステムは、常に2つのONLINEミラーディスクと1つのOFFLINEリモートディスク(スクラブ済み)があることを保証します。4番目のディスクは、回復中またはオンラインのいずれかです。これには、実行中のドライブに障害が発生した場合に、プールが2つのオンラインディスクの一貫性を保つという利点があります。

過去数週間はうまくいきましたが、私はこれをハックなアプローチだと考えています。大きな問題が発生した場合はフォローアップします。


更新:これを2か月間実行した後、実際の使用では、デタッチ/アタッチとオフライン/オンラインの両方で再同期に同じ時間がかかっていることがわかりました。私のテストでは、スクラブを実行していたとは思いません。私の直感は、ドライブがスクラブのためにオフラインの場合、完全な回復が必要であることです。


これは間違いなく、4つではなく3つのデバイスでは機能しませんか?Oracle Solaris ZFS管理ガイド「場合は、ミラー・プールに障害が発生していると述べているすべてのコンポーネント第4の駆動は厳密には必要ではないことを意味すると思われ、ミラーのが削除され、」[重点鉱山]。
ケニーエビット2015年

1
3つのデバイスとは、常にプール内にある2つのディスクと時々オフサイトにある1つのディスク、または常にプール内にあり1つのディスクとオフサイトにローテーションする2つのディスクを意味しますか?2番目のオプションでは、完全にオンラインのディスクが1つしかないときにプールで不良データが検出されると(2番目のディスクが回転しているか、まだ完全に回復していない場合)、データが失われることが予想されます。私の2セントは、ミラーリングされたプールに2つのフルタイムオンラインディスクがあることを常に確認することです。
2015年

私はあなたが言及する2番目のオプションを意味しました。そのオプションを使用すると、1つのディスクのみがオンラインのときに、データが不良になる可能性はどのくらいありますか?部分的/増分的再シルバー化は比較的迅速なはずですよね?そして、悪いデータがあったとしても、2番目のドライブから回復できないのではないでしょうか。または、最悪の場合、3番目のドライブから回復しますか?[明らかに、回復が不可能なシナリオがあります。しかし、それは4台のドライブでも当てはまります。または実際には任意の数。]
Kenny Evitt、2015年

私は常に2つのオンラインミラーディスクを使用し、3番目と4番目はバックアップのローテーションに使用します。ミラーにオンラインディスクが1つしかない場合は常に脆弱です。また、私のアプローチを使用しても、オフサイトのバックアップディスクで整合性の問題が発生し、100%回復できない可能性があります(理想的にはいつでもオフサイトにある2つのミラーリングされたディスクであるため、2つの整合性を比較できます。
2015年

要約すると、ZFSはデータの単一のコピーを回避すること(または少なくともパリティーを持ち、不良データの再構築を可能にすること)のすべてです。オンラインディスクが1つまたはバックアップデータのコピーが1つしかない場合、データが失われるおそれがあります。
STW 2015年

2

zfsがスナップショットをリモートZFSマシンに送信しないのはなぜですか?これには単純なbashスクリプトを使用します。

#!/usr/local/bin/bash
# ZFS Snapshot BASH script by Shawn Westerhoff
# Updated 1/14/2014

### DATE VARIABLES
# D = Today's date
# D1 = Yesterday's date
# D# = Today less # days date
Y=$(date -v-1d '+%m-%d-%Y')
D=$(date +%m-%d-%Y)
D1=$(date -v-1d '+%m-%d-%Y')
D10=$(date -v-10d '+%m-%d-%Y')
D20=$(date -v-20d '+%m-%d-%Y')

# Step 1: Make the snapshots

for i in $( zfs list -H -o name ); do
    if [ $i == tier1 ]
    then echo "$i found, skipping"
    else
    zfs snapshot $i@$D
    fi
done

# Step 2: Send the snapshots to backup ZFS sever

    for i in $( zfs list -H -o name ); do
        zfs send -i $i@$D1 $i@$D | ssh -c arcfour root@10.10.10.10 zfs recv $i
    done

# Step 3: Destroy snapshots that are 20 days old

for i in $( zfs list -H -o name ); do
        if [ $i == tier1 ]
        then echo "$i found, skipping"
        else
        zfs destroy $i@$D20
        fi
done

0

私はsnapdumpと呼ばれるツールを作成しました。これを使用すると、外部(非zfs)ファイルシステムにzfsデータセットの増分ダンプを作成できます。Snapdumpは、単一のコマンドで増分スナップショットチェーンを復元することもサポートしています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.