設計の判断

可用性と災害復旧

DR の構成は、許容できる停止時間 (RTO) と失ってよいデータの時間幅 (RPO) から逆算して選びます。どちらも短いほど、待機側で動かしておくものが増え、費用が上がります。

災害復旧 (DR) の設計は、サービスの名前ではなく RTO と RPO の数字から始めます。RTO が数時間でよければバックアップから作り直すコールド、数十分ならデータだけ同期しておくウォーム、数分以内なら両方で動かし続けるホットを選びます。SLA、SLO、稼働率の計算は 可用性と冗長化 で扱いました。

RTO と RPO は技術者だけでは決められません。「注文が 1 時間止まったら売上をいくら失うか」「直近 5 分の注文が消えたら誰が困るか」を事業側と話して数字にします。

守る障害の範囲で、複製の方法が変わる

リージョン Aゾーン aゾーン bVMリージョン MIGVMリージョン MIGCloud SQLプライマリCloud SQLHA の待機同期リージョン BVM イメージ障害時に起動レプリカ昇格して使う非同期
ゾーン障害には同じリージョンの別ゾーンへの同期複製で、リージョン障害には別リージョンへの非同期複製で備えます。非同期なので、リージョン障害では RPO が 0 になりません。

ゾーン障害への備えは、多くのマネージドサービスで設定 1 つで済みます。Cloud SQL の HA 構成なら費用はスタンドアロンの約 2 倍です。リージョン障害への備えは、データの複製、接続先の切り替え、手順の訓練まで要ります。要件に「リージョン障害」と書かれていなければ、まずマルチゾーン構成で足りるかを考えます。ゾーンとリージョンの関係は リージョン・ゾーンと可用性 で読んでください。

RTO と RPO から DR パターンを選ぶ

コールドRTO 数時間〜本番定期コピーバックアップ何も動いていないウォームRTO 数十分本番非同期複製DB だけ稼働アプリはイメージホットRTO 数分以内本番同期複製本番と同じ両方が受け付ける
待機側で動かしておくものが増えるほど、RTO と RPO は短くなり、費用は上がります。

3 つのパターンは Google Cloud の DR 計画ガイドの分類です。ガイドは RTO と RPO を数値で示していないので、図の目安はこのカリキュラムでの読み替えです。

選ぶ順序は次のとおりです。

  1. RPO から複製の方法を決める。数時間の欠損を許せるならバックアップ、数分ならレプリケーション、0 に近いなら同期レプリケーションか Spanner。
  2. RTO から待機側で動かすものを決める。作り直す時間を待てるならコールド、データベースの昇格で済ませるならウォーム、切り替えの操作をなくすならホット。
  3. 厳しいほうに合わせる。RPO 5 分で RTO 4 時間なら、データは複製してアプリは障害時に作るウォームです。
  4. 費用を見積もって事業側に返す。合わなければ RTO と RPO を緩められないか交渉する。

試すRTO と RPO から DR を選ぶ

RTO (許容できる停止時間)
RPO (失ってよいデータの時間幅)

選ばれたパターン: ウォーム費用 中

過去その後通常運転中。「障害を起こす」を押す

復旧と複製の遅れの時間は、このカリキュラムで置いた目安です。公式の値ではありません。

RPO 5 分 なら、データは非同期のレプリケーションで写せば足ります。RTO 30 分 なら、待機側はデータベースだけを小さく動かし、障害時に昇格する形で間に合います。どちらもウォームを選びます。

1 つのシステムの中でも、部品ごとにパターンを変えてかまいません。DR 計画ガイドの例では、過去のコンプライアンス用データはコールド、顧客向けのオンラインサービスはホットです。

データベースごとの複製の仕組み

サービスゾーン障害への備えリージョン障害への備え
Cloud SQLHA 構成。2 ゾーンに同期で書き込み、障害時は約 60 秒で切り替わる別リージョンのリードレプリカを昇格する。非同期なので RPO は 0 にならない
AlloyDB for PostgreSQLリージョン内の HA 構成別リージョンのセカンダリ クラスタを昇格する。非同期
Spannerリージョン構成で SLA 99.99%デュアルリージョン、マルチリージョン構成で SLA 99.999%。リージョン間も強整合
Firestoreリージョン構成で SLA 99.99%マルチリージョン構成で SLA 99.999%。作成後にロケーションは変えられない
Bigtable別ゾーンにクラスタを追加別リージョンにクラスタを追加。クラスタ間は結果整合
Cloud Storageリージョンのバケットでも複数ゾーンに冗長化デュアルリージョン、マルチリージョン。既定の複製は RPO 12 時間、ターボ レプリケーション (デュアルリージョンのみ) は RPO 15 分
Compute Engine のディスクリージョン永続ディスク、Hyperdisk Balanced High Availability で 2 ゾーンに同期複製非同期レプリケーションで別リージョンへ。目標 RPO は 1 分

Cloud SQL の HA の待機側は読み取りに使えないので、読み取りを分散するならリードレプリカを別に作ります。Enterprise Plus エディションでは、別リージョンの DR レプリカとデータを失わずに役割を入れ替えるスイッチオーバーと、接続先を自動で切り替える書き込みエンドポイントが使えます (Cloud SQL の DR)。

RPO が 0 に近く、しかもリージョン障害に備える要件では、非同期の Cloud SQL と AlloyDB では足りません。Spanner のマルチリージョン構成を候補にします。

バックアップはレプリケーションとは別に持つ

レプリケーションは、誤って消した行もランサムウェアで暗号化されたデータも、そのまま待機側へ写します。過去の時点に戻すにはバックアップが別に要ります。

Backup and DR Service は、Compute Engine、Filestore、Cloud SQL、AlloyDB、VM 上の Oracle や SQL Server などのバックアップをポリシーでまとめて管理します。バックアップ ボールトに設定した保持期間 (最長 99 年) が過ぎるまで、管理者でも削除できません。Cloud SQL 単体なら、自動バックアップとポイントインタイム リカバリ (PITR) で障害の直前の時刻に戻せます。HA 構成ではこの 2 つの有効化が前提条件です。

試してみる

コールドパターンの最小形として、ディスクのスナップショットを別のゾーンで復元します。

gcloud config set compute/region asia-northeast1

# 10 GB のディスクを作り、スナップショットを取る
gcloud compute disks create dojo-dr-disk --size=10GB --zone=asia-northeast1-a
gcloud compute snapshots create dojo-dr-snap \
  --source-disk=dojo-dr-disk --source-disk-zone=asia-northeast1-a

# スナップショットの保存場所 (storageLocations) を確認する
gcloud compute snapshots describe dojo-dr-snap --format="value(storageLocations)"

# 別のゾーンでディスクを復元する
gcloud compute disks create dojo-dr-restored \
  --source-snapshot=dojo-dr-snap --zone=asia-northeast1-b
gcloud compute disks list --filter="name~dojo-dr"

スナップショットはリージョンかマルチリージョンに保存されます。マルチリージョンなら、リージョン障害のときも別のリージョンで復元できます。RPO は最後にスナップショットを取った時刻で決まります。

後片付けをします。

gcloud compute disks delete dojo-dr-disk --zone=asia-northeast1-a --quiet
gcloud compute disks delete dojo-dr-restored --zone=asia-northeast1-b --quiet
gcloud compute snapshots delete dojo-dr-snap --quiet

試験で問われる判断

以下は、このカリキュラムで作った例です。

「社内の経費精算システム。翌営業日までに復旧すればよく、前日分のデータまでは失ってよい」。日次のバックアップを別リージョンに置くコールドです。待機系を常時動かす選択肢は費用が過剰です。

「決済の記録。リージョンが停止しても 1 件も失わず、数分で再開する」。Cloud SQL のクロスリージョン レプリカは非同期なので外し、Spanner のマルチリージョン構成と、複数リージョンのバックエンドを持つグローバル ロードバランサを選びます。

「Cloud SQL をゾーン障害でも自動で切り替えたい」。HA 構成です。別リージョンのリードレプリカはリージョン障害への備えで、昇格に手動の操作が要ります。

「管理者のアカウントが乗っ取られても、バックアップを削除されないようにしたい」。Backup and DR Service のバックアップ ボールトに保持期間を設定します。レプリカを増やしても削除は複製されます。

次のページでは、オンプレミスや他クラウドのシステムを Google Cloud へ移す計画を立てます。

理解度チェック

答えを開く前に、自分で考えてください。結果はこのブラウザにだけ残り、間違えた問題は復習のページでまとめて解き直せます。

思い出す

Cloud SQL を別リージョンのリードレプリカに複製していても、リージョン障害のときに RPO が 0 にならないのはなぜですか。RPO を 0 に近づけたいときは何を候補にしますか。

状況で選ぶ

倉庫の在庫管理システムは Cloud SQL を使っています。事業側と話し、リージョン障害のときは RPO 5 分、RTO 4 時間と決めました。費用はできるだけ抑えたいと言われています。どの構成にしますか。

説明する

データを別リージョンへレプリケーションしていても、バックアップを別に持つ必要があるのはなぜですか。管理者のアカウントが乗っ取られた場合も想定して説明してください。