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

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

2つのミラー化ディスクで構成されたZFSプールを使用します。オフサイトバックアップ用にディスクを2枚以上購入しました。

元の計画は、3番目のディスクをミラーに接続してオフサイトバックアップを作成し、ZFSが再同期するのを待ってからドライブを取り外してオフサイトにすることでした。これはうまくいきますが、驚くほど行われているようです。いっぱい再同期はディスクが接続されるたびに発生します。すべての接続が増分またはデルタの再同期を引き起こすことを読んだが、誤解を招く可能性があります。これにより、バックアップが許容可能な時間より長くかかることがあります。

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

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

答え1

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 [email protected] 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

答え2

多くの悩みと実験の終わりにかなりの妥協がありましたが、解決策を見つけました。

まず、除外する必要があるオプションは次のとおりです。

  • コスト上の理由から、ミラープールを持つ2番目のオフサイトZFSサーバーを持つことはオプションではありません。可能であれば、これはZFS送受信を使用してリモートプールにスナップショットを送信するための最良の方法です。

  • ディスクを取り外し、自宅に持ち込むことができる2番目のオンサイトZFSミラープールを入手してください。これは最初のオプションよりも実現可能ですが、常にサイトに2つのディスクを配置するには2番目のプールが必要です(または単一のオンサイトディスクにある2つのデータコピーを使用)。現在4台のディスクがあり、5台目のディスクをサーバーに入れるのに十分なスペースがありません。これは公平なアプローチですが、それでも理想的ではありません。

  • ZFS接続と切断を使用して、ミラープールの内外にバックアップディスクを回転させます。このアプローチは効果的ですが、ディスクを追加するたびに完全な再同期を実行する必要があります。これは時間がかかりすぎて信頼できません。

attach私の解決策はandを使用するのと似ていますdetachが、onlineandを使用しますoffline。これは、再同期全体と比較して増分再同期を実行するという利点がありますが、プールが常に状態を報告するという欠点があります(プールにDEGRADEDは常に2つのディスクがあります。offlineその後、オンラインになります)。

私の設定の簡単なレビューと概要は次のとおりです。

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

バックアップを循環させる必要がある場合:

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

  • zfs offlineリモートで取得するディスクです。一度オフラインになったらhdparm -Y /dev/id消えました。 1分後、ディスクベースを部分的に取り出し(電源が切れていることを確認できるだけ)、さらに1分待ってからドライブを完全に引っ張って回転が停止したことを確認しました。ディスクを固定袋に入れ、保護ケースに入れて外側に移動します。

  • 別のオフサイトディスクをインポートしました。ホットスワップ可能なトレイに取り付けて回転させます。私はzfs onlineディスクをプールに復元し、部分再同期を開始して同時に実行しました。

システムは、いつでもONLINE2つのミラーディスクとOFFLINE1つのリモートディスク(スクラブ)を持つことを保証します。 4番目のディスクは再同期またはオンラインになります。これは、実行中のドライブに障害が発生しても、プールが2つのオンラインディスクとまだ一致できるという利点があります。

ここ数週間で素晴らしい仕事をしましたが、それでもハックだと思います。重大な問題がある場合は、フォローアップを行います。


修正する:数ヶ月間実行した後、実際の使用では分離/接続とオフライン/オンラインの両方で再同期に同じ時間がかかることがわかりました。私のテストでは、スクラブを実行していないようです。スクラブによってドライブがオフラインになっている場合は、完全な再同期が必要になると予想されます。

答え3

私が作ったzfs自動バックアップこの作業とそれ以上を透明な方法で行います。 (2つのzfsシステム間でのみ機能し、外部システムのバックアップは機能しません。)

ZFS-autobackupは、すべての機能を備えながらも、最も信頼性が高く使いやすいツールになるよう努めています。

バックアップツール、レプリケーションツール、またはスナップショットツールとして使用できます。

カスタムZFSプロパティを設定して、バックアップする項目を選択できます。これにより、特定のデータセットを簡単に追加/削除したり、プール全体をバックアップしたりできます。

他の設定はコマンドラインでのみ指定できます。 zfs-autobackupコマンドを設定してテストし、発生する可能性のある問題を解決するだけです。完了したら、コマンドをcronまたはスクリプトにコピー/貼り付けするだけです。

ZFS コマンドを使用するため、 --debug を指定すると、実際に実行されている操作を確認できます。奇妙な問題やエラーが発生しても、多くの助けになります。失敗したコマンドをコピーして貼り付け、コマンドラインで使用できます。 (他の道具から逃したもの)

他のツールにはない重要な機能の1つは、信頼できる--testオプションです。これにより、zfs-autobackupが実行する操作を確認し、パラメーターを調整できます。システム変更を除くすべての操作を実行します。

インストール手順とダウンロードについては、以下を参照してください。https://github.com/psy0rz/zfs_autobackup

関連情報