容量計画と変更管理 — いつ満杯になるかを計算し、止める時刻を先に書く
目標ではなく実測だ — RPO・RTO・3-2-1 と人を責めない事後分析
一言でいうと
RPOとRTOは文書に書く目標であり、復旧訓練は、その目標を実際に何分で守れたかを測ることです。実際のデータ損失は「最後に成功したバックアップ」から数え、実際の復旧時間は障害が始まった瞬間からサービスが確認された瞬間まで数えます。訓練が終わったら、人を責めないポストモーテムと、担当と期限のある改善措置が残っていなければなりません。
なぜ必要なのか
「バックアップは毎時間実行され、RPOは1時間です」という文は、しばしば偽りです。バックアップジョブが2回続けて失敗したのに誰も気づかなかったなら、実際の損失は3時間です。「復旧は30分でできます」も、リストアコマンドが動く時間だけを測ったものであり、障害に気づくのに15分、復旧を決めるのに13分、準備に13分が別にかかります。目標と実測の差は、訓練をして初めて見えます。
どう動くのか
2つの目標について、NIST SP 800-34 Rev. 1は、緊急時対応計画の用語を次のように定義しています。RTO(Recovery Time Objective)は、システムが止まっていてもよい最大時間です。RPO(Recovery Point Objective)は、障害前のどの時点までのデータを復元しなければならないか、つまり失ってもよいデータの最大の時間幅です。
| 目標 | 実測方法 | |
|---|---|---|
| RPO | 失ってもよい最大時間 | 障害時刻 − 障害前の最後に成功したバックアップの時刻 |
| RTO | 止まっていてもよい最大時間 | サービス確認時刻 − 障害開始時刻 |
実測で間違えやすい箇所が2つあります。RPOを「最後のバックアップ時刻」で数えながら、そのバックアップが失敗していないかを見ないこと、そしてRTOを「リストア開始から終了まで」で数えることです。ユーザーにとってサービスは、障害が始まった瞬間から止まっていました。
区間に分けて考えます。復旧時間を、検知→判断→準備→リストア→確認の区間に分けると、どこを短くすべきかが見えます。リストアコマンドが最も長ければバックアップ方式や帯域を、検知が長ければアラートを、判断が長ければ誰が何を決めるかの手順を直します。
3-2-1ルールは、米国のUS-CERTが2012年にData Backup Optionsで推奨したルールです。データのコピーを3つ持ち(原本を含む)、2種類の異なるメディアに保存し、そのうち1つは別の場所に置きます。同じディスクアレイ内のスナップショット3つは、コピーが3つあってもメディアが1つ、場所が1つなので、ルールに違反します。アレイがまるごと壊れたり、建物が火事になったりすれば、3つがまとめて失われます。
リストアしたデータを検証します。リストアが「終わった」ことと、データが「正しい」ことは別の事実です。バックアップのときにファイルごとのハッシュを入れた一覧(manifest)を一緒に残しておけば、リストア後に一覧と照合して、欠けたファイルと内容が異なるファイルを切り分けられます。sha256sum -cがその役割を果たします。
人を責めないポストモーテムについて、SRE本のポストモーテム文化の章は、ポストモーテムは非難なし(blameless)でなければならないと述べています。誰が悪かったかを探し始めると、人々は事実を隠し、同じ条件はそのまま残ります。根本原因の節には「誰が」ではなく、その人がそうせざるを得なかった条件を書きます。バックアップの失敗がアラートにつながらなかった、バックアップ対象ボリュームの空き容量を誰も見ていなかった、といったことです。改善措置には担当と期限を付けます。担当のない措置は、誰もやりません。
現場での姿
訓練で最もよく明らかになる事実は、バックアップが静かに失敗していたことです。バックアップ対象のボリュームが満杯で増分が失敗したのに、通知がメールにしか行かず、そのメールボックスを誰も見ていなかった、という話はよくあります。そのため、バックアップの監視は「ジョブが失敗したら通知する」で止めず、「最後の成功がN分より古くなったら通知する」で仕掛けます。失敗の通知は、ジョブがそもそも動いていないときには来ません。
2つ目は、復旧手順が人の頭の中にしかないことです。訓練は、その手順を知らない人がランブックだけを見てやってみるのがよいです。訓練のとき準備区間が長い理由が「リストア用サーバーの接続情報を探していたから」なら、その情報をランブックに入れることが改善措置です。3つ目は、訓練を1回やって終わりにすることです。データの大きさや構成は変わり続けるので、半年前に45分だったリストアが、今は2時間かかるかもしれません。四半期ごとに同じ訓練を繰り返して区間ごとの時間を表に積み上げれば、目標を守れるかどうかがトレンドとして見えます。
次のラボですること
4つのデータのコピー一覧から、3-2-1に違反しているものを探します。バックアップジョブの記録と障害の記録で、実際のデータ損失時間と復旧時間を測って目標と比べ、最も長い区間を見つけます。リストアされたファイルを一覧と照合して、欠けたものと変わったものを切り分け、最後に、人を責めないポストモーテムと、担当・期限のある改善措置を書きます。