復旧リハーサル
目標
前に作ったバックアップセットで復旧リハーサルを行い、時間を測ってRTOを満たしているかを判定します。
なぜ重要なのか
復旧は、順序と検証がすべてです。一時的なパスを経由せずに-C /でそのまま展開するのは元に戻せない作業で、増分の復元順序を破ると、あるべきファイルが消えます。また、RTOは実際に測るまでは希望的観測です。実務でRTOを守れない原因の1位は、展開が遅いことではなく、バックアップを取得する時間を計算に入れていないことです。
このラボの復旧目標は、RPO 24時間、RTO 300秒です。
ステップ
/root/restディレクトリを作成し、/root/rest/objective.txtに次の2行を書いてください。RPO=24h/RTO=300s/root/bk/full.tar.gzを/root/rest/check/に復元してください。現在の/root/bk/srcには触れてはいけません。- 復元したものと元のデータを再帰的に比較し、結果を
/root/rest/diff.txtに保存してください。(ステップ4で追加したファイルのせいで差が出ることがあるので、比較の対象はconfとdataのディレクトリに限定してもかまいません。) - アーカイブから
src/app/conf.yamlだけを/root/rest/one/に復元してください。そのディレクトリに他のファイルがあってはいけません。 --strip-componentsを使って、アーカイブのsrc/を取り除き、/root/rest/stripped/に復元してください。結果として/root/rest/stripped/app/main.pyが存在する必要があります。- 増分のセットを順番どおりに復元してください。
/root/rest/inc/に、フル → inc0 → inc1の順に展開し、/root/rest/inc/src/app/new.pyが存在する必要があります。 - ステップ2から6までの復旧の一連の作業をもう一度実行しながら時間を測り、
/root/rest/timing.txtに次の2行を書いてください。ELAPSED=<초>/MEETS_RTO=<yes|no>(プレースホルダーは経過秒数です。300秒以内ならyesです) /root/rest/report.txtを次の5行で作成してください。RESTORED_FILES=<2번 복원본의 파일 수>/SELECTIVE=1/STRIPPED_OK=yes/INCREMENTAL_OK=yes/RTO_MET=<7번의 판정>(プレースホルダーは、順にステップ2の復元結果のファイル数と、ステップ7の判定です)
参考
- 選択的な復元は、
tar -xzf <아카이브> -C <대상> <아카이브 안 경로>です(プレースホルダーは、順にアーカイブ、復元先、アーカイブ内のパスです)。パスは、先にtar -tzfで確認してください。 - 増分の復元は、
tar --listed-incremental=/dev/null -xzf <아카이브> -C <대상>の形で順番に実行します(プレースホルダーは、順にアーカイブと復元先です)。 - 時間の測定は、
S=$(date +%s); ...; E=$(date +%s); echo $((E-S))です。 - よくある間違い1: ステップ2で復元先のディレクトリを事前に作らないと、tarが失敗します。
- よくある間違い2: ステップ6で増分の順序を逆にすると、あとの変更が前のもので上書きされて、ファイルが消えます。
復旧目標を記録する
/root/restディレクトリを作成し、/root/rest/objective.txtに次の2行を書いてください。
RPO=24h / RTO=300s
RPOとRTOは、このラボで与えられます。値を正確に書いてください。
一時的なパスに復元する
/root/bk/full.tar.gzを/root/rest/check/に復元してください。現在の/root/bk/srcには触れてはいけません。
今いる場所にそのまま展開しないでください。復元先を指定するオプションを使います。
元のデータと比較する
復元したものと元のデータを再帰的に比較し、結果を/root/rest/diff.txtに保存してください。(ステップ4で追加したファイルのせいで差が出ることがあるので、比較の対象はconfとdataのディレクトリに限定してもかまいません。)
ディレクトリ全体を再帰的に比較するコマンドがあります。差がなければ何も出力されません。
選択的に復元する
アーカイブからsrc/app/conf.yamlだけを/root/rest/one/に復元してください。そのディレクトリに他のファイルがあってはいけません。
アーカイブ内のパスを引数に指定すると、それだけが展開されます。まず一覧で正確なパスを確認してください。
パスを調整して復元する
--strip-componentsを使って、アーカイブのsrc/を取り除き、/root/rest/stripped/に復元してください。結果として/root/rest/stripped/app/main.pyが存在する必要があります。
先頭のパス要素をいくつ取り除くかを指定するオプションがあります。
増分を順番どおりに復元する
増分のセットを順番どおりに復元してください。/root/rest/inc/に、フル → inc0 → inc1の順に展開し、/root/rest/inc/src/app/new.pyが存在する必要があります。
フルを先に、増分を順番に展開する必要があります。復元時にスナップショットファイルは更新しません。
復旧時間を測定する
ステップ2から6までの復旧の一連の作業をもう一度実行しながら時間を測り、/root/rest/timing.txtに次の2行を書いてください。
ELAPSED=<초> / MEETS_RTO=<yes|no>(プレースホルダーは経過秒数です。300秒以内ならyesです)
開始時刻と終了時刻の差を、秒で計算します。目標と比較して判定してください。
リハーサルのレポートを作る
/root/rest/report.txtを次の5行で作成してください。
RESTORED_FILES=<2번 복원본의 파일 수> / SELECTIVE=1 / STRIPPED_OK=yes / INCREMENTAL_OK=yes / RTO_MET=<7번의 판정>(プレースホルダーは、順にステップ2の復元結果のファイル数と、ステップ7の判定です)
前のステップの実際の結果を集めてください。不一致の数は、比較の結果から出てきます。