02_応用

Section 4 — 応用編:マルチリージョナル DR とゼロダウンタイム運用

🔧 対象: 中堅以上 ゴール: マルチリージョン DR、Blue-Green デプロイ、Near-Zero ダウンタイムの構築判断・実装ができる。


1. マルチリージョナル DR の選択肢

各 DB サービスの DR 構成

DB DR 構成 RTO RPO
Cloud SQL クロスリージョン リードレプリカ + 手動昇格 数十分 数秒〜数分
AlloyDB Secondary Cluster 数十分 数秒〜数分
Spanner Multi-region 自動フェイルオーバー 数秒 0
Bigtable Multi-cluster Routing 自動フェイルオーバー 数秒 0
Firestore Multi-region 自動 数秒 0

試験で問われる判断軸


2. Cloud SQL のクロスリージョン DR 構築

構築手順

# 1. プライマリリージョンに HA 構成で Primary 作成
gcloud sql instances create primary \
  --region=asia-northeast1 \
  --availability-type=REGIONAL \
  ...

# 2. 別リージョンに リードレプリカ作成
gcloud sql instances create dr-replica \
  --region=us-central1 \
  --master-instance-name=primary \
  --tier=db-n1-standard-4

# 3. 災害時: リードレプリカを昇格
gcloud sql instances promote-replica dr-replica

フェイルオーバー手順(災害時)

1. プライマリリージョン障害確認
2. アプリの書き込みを停止(ダブルライト防止)
3. DR リードレプリカを Promote
4. アプリの接続文字列を DR DB に変更
5. 新規プライマリの整合性確認
6. 監視 + アラート再設定
7. プライマリリージョン復旧後、別リードレプリカ作成 → 切り戻し計画

注意点


3. AlloyDB の Secondary Cluster

Secondary Cluster の特徴

構築

# プライマリ
gcloud alloydb clusters create primary-cluster \
  --region=asia-northeast1 ...

# Secondary (DR)
gcloud alloydb clusters create secondary-cluster \
  --region=asia-northeast2 \
  --secondary-config-primary-cluster=primary-cluster

Cloud SQL の リードレプリカ vs AlloyDB Secondary

観点 Cloud SQL クロスリージョン Replica AlloyDB Secondary Cluster
仕組み 非同期レプリ(インスタンス単位) クラスタ単位の複製
読み取り Replica を直接読める Secondary 全体を読める
Promote インスタンス Promote クラスタごと Switchover
障害復旧 手動 手動だがクラスタ単位

4. Spanner Multi-region の真価

Spanner Multi-region のアーキテクチャ

┌────────────────────────────────────────────────────────┐
│  Spanner Multi-region (例: nam3 = us-central+us-east) │
│                                                        │
│   ┌─ Read-Write Region (us-central1) ──┐               │
│   │  Paxos Leader                       │               │
│   │  + Read replicas                    │               │
│   └─────────────────────────────────────┘               │
│              │ Paxos                                    │
│   ┌─ Read-Write Region (us-east1) ─────┐               │
│   │  Paxos Voter                        │               │
│   │  + Read replicas                    │               │
│   └─────────────────────────────────────┘               │
│              │                                          │
│   ┌─ Read-only Region (us-east4) ──────┐               │
│   │  Witness (タイブレーカー)            │               │
│   └─────────────────────────────────────┘               │
└────────────────────────────────────────────────────────┘

TrueTime と外部整合

Spanner の SLA を最大化する設定


5. Bigtable Multi-cluster ルーティング

構成

[Bigtable Instance]
├── Cluster A (us-central1) — Primary 役割なし、全クラスタ等価
├── Cluster B (us-east1)
└── Cluster C (asia-northeast1)

App Profile での設定

App Profile (multi-cluster-routing)
   ├ Routing Policy: Multi-cluster routing
   ├ Cluster Group: A, B, C
   └ Allow Transactional Writes: false (シングル行のみ整合性保証)

単一クラスタ ルーティング vs マルチクラスタ ルーティング

観点 Single-cluster Multi-cluster
クラスタ選択 固定 自動(健全なクラスタ)
整合性 強整合 結果整合(クラスタ間)
HA 障害時手動切替 障害時自動切替
SLA 99.9% 99.999%

6. Firestore Multi-region の特徴

Multi-region ロケーション

自動フェイルオーバー

コストの比較

構成 コスト
Firestore Regional 標準
Firestore Multi-region 標準の約 1.5〜2 倍

7. Blue-Green デプロイの DB バージョン

概念

新バージョンを Blue環境 に並行構築 → アプリ側で切替 → 旧 Green は保持(ロールバック用)。

Cloud SQL Blue-Green

Green (現行 PostgreSQL 14)        Blue (新規 PostgreSQL 15)
       ↑                                 ↑
       │ アプリ接続                       │
       │                                 │
       └── DMS でデータ同期 ──────────────┘
            (Continuous モード)

[カットオーバー]
       Green (停止 or 残置)         Blue (新規プライマリ)
                                        ↑
                                        │ アプリ接続切替

メリット

デメリット


8. Near-Zero ダウンタイム メンテナンス

Cloud SQL Enterprise Plus の Near-Zero Downtime

仕組み

注意点


9. Pessimistic デプロイ (慎重派) の構成パターン

本番 DB の推奨デプロイ構成

[本番 DB]
├── Primary (asia-northeast1, REGIONAL HA)
├── Read Replica 1 (asia-northeast1, 読み取り用)
├── Read Replica 2 (asia-northeast1, 読み取り用)
└── Cross-region Replica (asia-northeast2, DR用)

[監視]
├── Cloud Monitoring カスタムダッシュボード
├── Alert Policy (CPU/Memory/Storage/Connections/Lag)
└── Uptime Check (外部からの接続確認)

[バックアップ]
├── 自動バックアップ (毎日 02:00)
├── PITR (35日)
├── オンデマンドバックアップ (リリース前)
└── 月次エクスポート → GCS Archive

[IAM]
├── アプリ用 SA (cloudsql.client)
├── 運用者 SA (cloudsql.editor, MFA必須)
└── 監査 SA (cloudsql.viewer)

[ネットワーク]
├── VPC + Private IP
├── Cloud SQL Auth Proxy または PSC
└── Firewall Rules (最小限)

10. プロビジョニング自動化の高度パターン

Terraform Modules でテンプレ化

module "cloud_sql_ha" {
  source = "./modules/cloud-sql-ha"

  name        = "my-app-prod"
  region      = "asia-northeast1"
  tier        = "db-custom-4-15360"
  network     = google_compute_network.main.id
  
  ha_enabled  = true
  pitr_enabled = true
  cross_region_replica = true
  replica_region = "asia-northeast2"
}

モジュール化のメリット

CI/CD ベストプラクティス


11. テストの種類とタイミング

DB に関する 4 つのテスト

テスト タイミング 目的
接続テスト デプロイ直後 接続性確認
フェイルオーバー試験 月次 or 大規模変更後 DR 動作確認
負荷試験 リリース前 性能・容量確認
整合性試験 移行後 / バックアップ復旧後 データ整合性確認

Chaos Engineering(応用)


12. このセクションのチェックリスト