【れぷりけーしょん】

レプリケーション(データベース) とは?

最終更新:
💡 DBの更新を複製へ伝える

データベースの変更を別の複製へ伝える技術。読み取り負荷の分散や障害時の切替えに利用されるが、反映の遅れや切替え手順を考える必要がある。

📌 このページのポイント
更新を複製へ伝える構成の一例 アプリ Primary 読取・書込 Replica 1 読取用 Replica 2 読取用 書込 読取 更新を伝える 反映に遅れも 同期で待つ範囲・障害時の切替えは設定次第
プライマリも読み取れる構成例。複製だけで自動切替えや最新データの読み取りは保証されない。
ひよこ ひよこ
なんで複製が必要なの?
ペンギン先生 ペンギン先生
プライマリからレプリカへ更新を伝える構成なら、読み取りに使えるレプリカへ負荷を分散したり、障害時に切替え先を用意したりできるよ。ただし、効果は問い合わせや構成次第。複製を作るだけで自動的に可用性が保証されるわけではないんだ
ひよこ ひよこ
同期と非同期の違いは?
ペンギン先生 ペンギン先生
非同期はレプリカの確認を待たずに書き込みを完了する。同期は指定したレプリカ側の確認も待つけれど、何を確認するかは製品や設定次第なんだ。PostgreSQLでは変更の記録を永続ストレージに保存するまで待つ設定と、読み取りに反映されるまで待つremote_applyは違う。同期だから全レプリカの読み取りが最新、とは限らないよ
ひよこ ひよこ
レプリケーションラグって問題?
ペンギン先生 ペンギン先生
更新直後にレプリカを読むと、古いプロフィールが見えるようなことがあるよ。更新後の読み取りをプライマリへ送る設計や、必要な更新が適用されたことを確認してからレプリカを読む設計を考える。遅れの監視は発見に役立つけれど、監視するだけで遅れがなくなるわけではないよ
ひよこ ひよこ
フェイルオーバーの注意点は?
ペンギン先生 ペンギン先生
レプリカの昇格とアプリの接続先の切替えを用意し、旧プライマリも書き込みを受け続けないようにする。非同期なら未転送の更新を失う可能性もあるよ。自動化の範囲は製品や運用次第なので、切替えと復旧の手順を試しておこう
ひよこ ひよこ
レプリカがあればバックアップはいらない?
ペンギン先生 ペンギン先生
別に用意しよう。誤った更新や削除も複製へ伝わるから、現在の複製があることと、過去へ戻せることは違うんだ。例えばPostgreSQLの時点復旧には、ベースバックアップと必要な履歴のWALが必要になるよ
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「レプリケーション」って出てきたら「DBの更新を別の複製へ伝える仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Database Replication」 = データベースの複製
💬 Replicationは「複製」。更新を別のDBへ伝えて複製を保つ仕組みで、常に同時に反映されるとは限らないよ

参考資料

← 用語集にもどる