データベース管理・運用

レプリケーション れぷりけーしょん

可用性スタンバイプライマリフェイルオーバー冗長化読み取りスケール
レプリケーションについて教えて

簡単に言うとこんな感じ!

レプリケーションは「DBの分身をリアルタイムで作り続ける」仕組みだよ! 本番DBで何か起きても分身(レプリカ)に即切り替えられるし、読み取り専用クエリは分身に流して本番DBの負荷を下げることもできる。「コピーを常に持っておく」安心感の技術なんだ!


レプリケーションとは

レプリケーション(Replication)とは、あるDBサーバー(プライマリ / マスター)のデータ変更を、別のサーバー(レプリカ / スタンバイ / スレーブ)にリアルタイムまたは定期的に反映し続けることで、データの複製を維持する仕組みです。

主な目的は2つあります。1つ目は高可用性(HA):プライマリが障害を起こしたとき、レプリカへ自動切り替え(フェイルオーバー)することでサービス停止時間を最小化します。2つ目は読み取りスケールアウト:SELECT クエリをレプリカへ分散させることでプライマリの負荷を下げ、スループットを向上させます。

レプリケーションには同期レプリケーション(プライマリとレプリカ両方へのコミット確認後にOKを返す)と非同期レプリケーション(プライマリへのコミット後すぐOKを返し、レプリカへの反映は後で行う)があります。同期は安全だが遅く、非同期は速いが障害時にわずかなデータロストが起きる可能性があります。


レプリケーションの種類

種類仕組み特徴
ストリーミングレプリケーションWAL(書き込みログ)をリアルタイムに転送PostgreSQLの標準方式。低遅延
ロジカルレプリケーションSQL操作レベルで変更を転送特定テーブルのみ・バージョンをまたいだ複製が可能
バイナリログレプリケーションバイナリログをレプリカに転送MySQLの標準方式
マルチプライマリ複数サーバーがすべて書き込み可能可用性最高だが競合解決が複雑
レプリケーション構成の全体像 プライマリDB 読み書き両方 WAL / バイナリログを生成 WAL転送 スタンバイ1 読み取り専用 フェイルオーバー用 スタンバイ2 読み取り専用 読み取りスケール用 スタンバイ3 別リージョン 災害対策(DR)用 プライマリ障害時 → スタンバイ1へフェイルオーバー(昇格)

歴史と背景

  • 1990年代:Oracleがデータガード(Data Guard)として高度なレプリケーション機能を商用実装
  • 2000年代初頭:MySQLのバイナリログレプリケーションがWebサービスの読み取りスケールアウトで広く普及
  • 2004年:PostgreSQL 8.0 でウォームスタンバイ(ログシッピング)が実装
  • 2010年:PostgreSQL 9.0 でストリーミングレプリケーション(WAL転送)が実装。大幅に使いやすくなる
  • 2016年:PostgreSQL 10 でロジカルレプリケーションが実装
  • 現在:クラウドDBサービス(RDS Multi-AZ・Aurora・Cloud SQL等)がレプリケーションを自動設定・管理するため、利用者はほとんど意識せずに高可用性を確保できる

関連する規格・RFC

規格内容
PostgreSQL WALWrite-Ahead Loggingによるレプリケーション(ストリーミング・ロジカル)
MySQL Binlogバイナリログによるレプリケーション仕様

関連用語