Cloud SQL HAとcross-region replicaの違い: DBのzone冗長とregion冗長

Cloud SQLの可用性を考えるとき、Cloud SQL HA、read replica、cross-region replica、DRが混ざりやすくなります。

結論から言うと、Cloud SQL HAとcross-region replicaは目的が違います。

  • Cloud SQL HA: 同一region内のzone障害対策
  • cross-region replica: 別regionにデータを残す構成

本記事では、DBのzone冗長とregion冗長を分けて整理します。

Cloud SQL HAは同一region内のzone冗長

Cloud SQL HAは、Cloud SQLを高可用性構成で作る機能です。同じregion内の別zoneにstandbyインスタンスを用意します。

flowchart TB
  app["App"]

  subgraph r1["Region A"]
    subgraph z1["Zone A"]
      primary["Cloud SQL Primary"]
    end

    subgraph z2["Zone B"]
      standby["Cloud SQL Standby<br/>HA"]
    end
  end

  app --> primary
  primary -. "synchronous replication" .-> standby

想定している障害は以下です。

  • DBインスタンス障害
  • zone障害
  • メンテナンス時の切替

Cloud SQL HAはDB単体の高可用性構成です。region全体の障害やアプリ側の障害には対応しません。

cross-region replicaは別regionにデータを逃がす

cross-region replicaは、別regionにread replicaを置く構成です。

flowchart TB
  subgraph r1["Region A"]
    app["App"]
    primary["Cloud SQL Primary"]
    app --> primary
  end

  subgraph r2["Region B"]
    replica["Cloud SQL Read Replica"]
  end

  primary -. "asynchronous replication" .-> replica

この構成では、Region Aが大きく壊れても、Region Bに複製済みのデータが残ります。

ただし、Region Bにアプリがなければサービスは継続しません。Region A障害時に起きることを分解すると以下です。

Region A障害時に起きること
  • Region AのAppは止まる
  • Primary DBも止まる
  • Region Bのreplicaにデータは残る

つまり、cross-region replicaはデータ層のDR部品です。システム全体のDRではありません。

Cloud SQL HA + cross-region replica

本番DBでは、Cloud SQL HAとcross-region replicaを組み合わせることがあります。

flowchart TB
  subgraph r1["Primary Region"]
    subgraph z1["Zone A"]
      primary["Cloud SQL Primary"]
    end

    subgraph z2["Zone B"]
      standby["Cloud SQL Standby<br/>HA"]
    end
  end

  subgraph r2["Region B"]
    rr1["Read Replica"]
  end

  subgraph r3["Region C"]
    rr2["Read Replica"]
  end

  primary -. "sync HA<br/>same region" .-> standby
  primary -. "async replication<br/>cross-region" .-> rr1
  primary -. "async replication<br/>cross-region" .-> rr2

この構成は、DB層で以下を同時に狙います。

部分目的
Cloud SQL HAzone障害・DBインスタンス障害対策
cross-region read replicaregion障害時のデータ保護・復旧材料
各主要regionのreplica読み取り分散・近接読み取り

Active-Passive DRとの違い

cross-region replicaだけでは、Region Bにデータがあるだけです。サービス全体を復旧するには、アプリや入口の切替も必要です。

flowchart TB
  user["User"]
  dns["DNS / Failover"]

  subgraph r1["Primary Region"]
    app1["Active App"]
    db1["Primary DB"]
    app1 --> db1
  end

  subgraph r2["Standby Region"]
    app2["Standby App"]
    db2["Replica DB"]
    app2 --> db2
  end

  user --> dns --> app1
  db1 -. "replication" .-> db2
  dns -. "failover" .-> app2

これはシステム全体のDR構成です。DB replicaはその部品です。

使い分け

やりたいこと採用候補
DBのzone障害に備えたいCloud SQL HA
別regionにデータを残したいcross-region read replica
読み取りを別regionに分散したいread replica
region障害時にサービスも復旧したいactive-passive DRなど

まとめ

  • Cloud SQL HAは同一region内のzone冗長
  • cross-region replicaは別regionへのデータ複製
  • cross-region replicaだけではサービス全体のDRにはならない
  • Cloud SQL HA + cross-region replicaで、DB層のzone障害とregion障害に備えられる
  • システム全体のDRには、アプリ、入口、切替手順も必要

参考

タグ: GCP, クラウド設計, 可用性, データベース