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 HA | zone障害・DBインスタンス障害対策 |
| cross-region read replica | region障害時のデータ保護・復旧材料 |
| 各主要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には、アプリ、入口、切替手順も必要