📖

【Database Replication】3つのStandby Modeをちゃんと理解する。

2023/04/04に公開

Database Replicationとは

文字通り「DBを複製する」こと。
複製する方法としてLogical ReplicationPhysical Replicationが存在する。

Logicalな複製
👉論理的な更新情報(更新用SQL)の転送と適用。
👉異なる構成のDB間でデータ連携/複製する用途に向いている。

Physicalな複製
👉物理的な変更情報(ログ)の転送と適用。
👉同一構成のDBを複製する用途に向いている。

本稿では主に「ReplicationしたやつをどうStandbyさせておくか」について記すので、LogicalとPhysicalの違いについては一旦割愛する。

DB Replicationの何がいいの?

✅参照性能の向上 ※読み取り専用(ReadReplica)を作成する場合に限る
✅高可用性の実現
✅Primaryを止めずにCold Backup可能。

Replicationなし

複製しない場合、どのようにDBサーバを運用することになるかまとめてみる。
✅DBサーバは1つのみ。
✅Backupを毎日取得する。Backup保管場所はDBサーバ以外のところに。
✅DBサーバが死んだら、人間が手動で新しいDBサーバを作成&Backupを元にRestoreする。

Replicationあり

複製するDBサーバをどのように待機/Standbyさせておくかで、だいぶ運用方法が変わってくる

Hot Standby

Standbyは読み取り専用(Read Replica)として常時起動。
✅Primaryに対する更新を逐一Standbyに反映する。
✅Primaryが死んだら、StandbyをPrimaryに昇格する。

Warm Standby

Primaryが生きている限り、StandbyはClientから参照されない。
✅Primaryが生きている間も、Standbyは起動しながらPrimaryからの更新を反映する。
✅Primaryが死んだら、StandbyはPrimaryに昇格する。

Cold Standby

✅Primaryが生きている間は、Standbyは起動されない状態。
✅PrimaryはStandbyがRestoreするためのLogを逐一連携しておく。
Primaryが死んだ後でStandbyを起動&Primaryが連携しておいてくれたLogを
  利用してRestoreを実施&最終的にPrimaryに昇格する。

Replicationの仕組み = ログを連携する。

PostgreSQL

PostgreSQLでは、WAL(ログ先行書き込み/Write Ahead Log)の仕組みでトランザクションログが生成されるので、これをReplicationに利用する。

MySQL

MySQLでは、トランザクションの記録がバイナリログに出力されるため、これをReplicationに利用する。

Discussion