

高岡智則
年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)
ストリーミングレプリケーション・とは?
ストリーミングレプリケーションはデータベースの主サーバーから従サーバーへ更新情報を連続して送る仕組みです。リアルタイム性と高可用性を両立させる基本技術であり、適切に設定すれば障害時の停止を防いだり読み取り処理を増やしたりできます。
仕組みの基本
データベースは更新を行うと作成されるログや記録に新しい情報を保存します。ストリーミングレプリケーションではこの更新情報を主サーバーからレプリカへ連続して送信します。レプリカは受信した情報を順番に適用してデータを最新状態に保ちます。これにより 同じデータを複数のサーバーで共有でき、読み取り処理を分散させることが可能になります。
使い方の基本
基本的な流れは次のとおりです。まず主サーバー側でReplication用の設定を有効にします。具体的には WAL のレベルを設定したり接続許可を用意したりします。次にレプリカ側を standby 状態にして主サーバーからの更新を受信します。最後に適切な遅延監視を行い Lag を把握します。
設定のポイントとしては wal_level の設定値と最大接続数の調整、レプリケーション用の認証設定、レプリカ側の復旧方法の明示などがあります。環境によっては自動的に再接続する仕組みを用意することもあります。
非同期と同期の違い
非同期は主サーバーの更新がすぐにはレプリカに適用されなくても運用できますが、障害時に最新データが失われるリスクがあります。
同期はトランザクションの確定と同時にレプリカも更新を確定させるためデータの整合性は高いものの、通信遅延や負荷によって全体の遅延が増えることがあります。
表で比べてみよう
| 項目 | 説明 |
|---|---|
| ストリーミング | 主サーバーの更新情報を連続して送る仕組み |
| レプリケーション | 更新を副サーバーへコピーして同じデータを保持すること |
| 非同期 | レプリカの適用が遅れても運用には影響が小さいが最新性は若干落ちる |
| 同期 | トランザクションの確定と同時にレプリカも更新を確定させる |
よくある誤解と注意点
Lag が生じる原因にはネットワークの遅延や更新の急増があります。運用上は Lag の監視を行い重要なポイントでのデータ更新を確実化する工夫が必要です。実運用ではバックアップとの組み合わせや定期的な検証も欠かせません。
総じてストリーミングレプリケーションはデータの可用性と読み取りの拡張性を高める強力な手法ですが、適切な設計と監視が不可欠です。
ストリーミングレプリケーションの同意語
- ストリーミングレプリケーション
- データベースの変更をストリームとして連続的に受け取り、別のノードへほぼリアルタイムで複製・同期する手法。
- リアルタイムレプリケーション
- データの更新を検知したら即時に別のノードへ反映させ、最新状態を保つ仕組み(遅延を最小化することが目的)。
- リアルタイム同期
- データを主系と従系でほぼ同時に同期して整合性を保つ仕組み。
- 継続的レプリケーション
- データを途切れなく継続的に複製する設計のこと。
- オンラインレプリケーション
- オンライン環境で稼働中もレプリケーションを継続する方式。
- 継続的データ複製
- データを継続的に複製して、別用途のデータベースへ最新状態を伝播する。
- ストリームベースレプリケーション
- ストリーム(連続的なデータの流れ)を基盤としてデータを複製する方式。
- ストリーム同期レプリケーション
- ストリームを用いてリアルタイムに同期を取りながらデータを複製する方法。
- リアルタイムデータ転送レプリケーション
- 変更データをリアルタイムに転送して別ノードに反映する仕組み。
- 増分レプリケーション
- 変更分だけを伝播して、全量同期ではなく増分でデータを複製する形式。
- オンライン同期レプリケーション
- オンライン状態を維持しつつ、同期・複製を行う方式。
- 連続データ伝播レプリケーション
- データの連続的な伝播を通じてレプリケーションを実現する考え方。
- データストリーミングによるレプリケーション
- データストリーミングを活用してデータを複製するアプローチ。
- リアルタイム更新伝播
- 更新情報をリアルタイムに他ノードへ伝える仕組み。レプリケーションの一種として用いられることがある。
ストリーミングレプリケーションの対義語・反対語
- スナップショットバックアップ
- ストリーミングを使わず、データベースの時点の状態を静止コピーとして保存するバックアップ方法。継続的なデータ転送やリアルタイム同期を前提としない点が対義語的です。
- バッチレプリケーション
- 一定の間隔でデータを集約して転送・適用する方式。リアルタイム性が低く、連続的なストリーミングとは異なる考え方です。
- 静的バックアップ
- 作成時点のデータを静止コピーとして保存するバックアップ。継続的なデータの追従やリアルタイム性を伴いません。
- ログシッピング
- WALファイルを定期的に転送して適用するバックアップ/レプリケーション方式。ストリーミングの連続性に対して、遅延が生じやすい点が対義語的です。
- 同期レプリケーション
- 複製先と同期してデータを確定させながら適用するレプリケーション。ストリーミングが含む非同期性を排除し、リアルタイム性の取り扱い方が異なる点が対比になります。
- 非ストリーミングレプリケーション
- ストリーミング(連続的なデータ転送)を使わず、代わりにバッチ/ログシッピングなど別の手法でデータを複製する方式。
ストリーミングレプリケーションの共起語
- WAL
- Write-Ahead Logging。更新を確定する前に先にログとして記録する仕組み。ストリーミングレプリケーションでは主にこのログを待機ノードへ伝送します。
- バイナリログ
- データベースの更新履歴を時系列で記録するログ。主に MySQL のストリーミングレプリケーションで元データの再現に使われます。
- レプリケーションスロット
- WALを消去せず、待機ノードが欠落しても復元可能にするための仕組み。
- GTID
- Global Transaction Identifier。全トランザクションを一意に識別するタグで、GTIDベースのレプリケーションを実現します。
- PITR
- Point-In-Time Recovery。任意の時点へデータを復元できる機能。
- pg_hba.conf
- 接続元の認証設定ファイル。レプリケーション用のアクセス許可ルールを指定します。
- replication_user
- レプリケーションを実行する際に使用する特別な権限を持つユーザー。
- pg_stat_replication
- PostgreSQLのレプリケーション状態を監視する統計ビュー。
- wal_level
- WALに記録する情報のレベルを決める設定。hot_standbyやストリーミングを有効化します。
- max_wal_senders
- WALを送出するプロセスの同時最大数。
- synchronous_standby_names
- 同期レプリケーションで待機ノードを指定する設定。
- hot_standby
- 待機ノードが読み取り可能な状態、いわゆるホットスタンバイ。
- マスター/プライマリ
- 書き込み元となる主要ノード。
- レプリカ
- 主ノードの更新を受け取り、読み取り処理を担当する副ノード。
- 非同期レプリケーション
- 主ノードの更新を待機ノードに非同期で伝送する方式。
- 同期レプリケーション
- 主ノードの更新を待機ノードの適用を確認してからのみコミットを返す方式。
- ストリーミング
- ネットワークを通じて更新を連続的に転送する伝送方式。
- 物理レプリケーション
- データベース全体のデータブロックをそのまま転送する方式。
- 論理レプリケーション
- 特定テーブルやデータを選択して転送する方式。
- pg_basebackup
- PostgreSQL の基盤バックアップを作成する公式ツール。
- read replica
- 読み取り専用として利用する副ノード。
- フェイルオーバー
- 障害発生時に自動または手動で主ノードを別ノードへ切替える処理。
- フェイルバック
- 障害後に元の主ノードへ戻す処理。
- 高可用性
- サービスを止めずに継続提供するための設計思想。
- DR
- Disaster Recovery。災害時の復旧方針と手順。
- TLS/SSL
- 通信を暗号化してセキュアにする技術。
- ネットワーク遅延
- ネットワークの遅延がレプリケーションの遅れに直結する原因。
- レプリケーション遅延
- 主ノードと待機ノードの間のデータ伝送遅延。
- 監視
- pg_stat_replication などを用いてレプリケーションの健全性を監視すること。
ストリーミングレプリケーションの関連用語
- ストリーミングレプリケーション
- プライマリサーバから物理的なWAL(Write-Ahead Logging)ログをリアルタイムで受け取り、スタンバイに適用するレプリケーション方式。主にデータの高可用性構成で使われる。
- 物理レプリケーション
- データベースのブロック単位での複製を行う方式。完全なデータベース状態を再現するため、通常はホットスタンバイやフェイルオーバーに用いられる。
- 論理レプリケーション
- テーブル単位やデータスキーマ単位でのレプリケーション。特定のテーブルやデータだけを同期したい場合に利用される。
- WALストリーミング
- Primary から standby へ WAL(Write-Ahead Log)を連続送信する仕組み。ストリーミングレプリケーションの中核。
- WALアーカイブ
- WALログを長期保存しておく機能。PITR(ポイント・イン・タイム・リカバリ)や災害復旧で活用される。
- 同期レプリケーション
- コミット時にスタンバイの確認応答を待つ方式。データの安全性は高いが遅延が増える可能性がある。
- 非同期レプリケーション
- コミット時にスタンバイの応答を待たず、パフォーマンスを優先する方式。障害時のデータ喪失リスクがある。
- 遅延レプリケーション
- 意図的にレプリケーション遅延を設定する手法。誤操作対策やバックアップの安全性を高める目的で使用される。
- ホットスタンバイ
- 読み取り専用のスタンバイサーバ。通常はストリーミングレプリケーションで更新される。
- フェイルオーバー
- 障害時に自動または手動でスタンバイを新しいプライマリへ切り替える機能。
- 昇格
- スタンバイを新しいプライマリへ転換させる操作。監視ツールと連携して自動化されることが多い。
- プライマリ
- レプリケーションの元となる書き込み可能なサーバ。
- レプリカ/スタンバイ
- プライマリのデータを複製した読み取り専用サーバ。
- トランザクション整合性
- 複数ノード間で取引が一貫性を保つようにする設計。
- LSN(Log Sequence Number)
- WAL の位置を示す識別子。レプリケーションの進捗を追跡するのに使われる。
- レプリケーションスロット
- スタンバイが必要とする WAL を確保し、遅延中でも WAL を削除しないようにする機構。
- pg_basebackup
- 物理バックアップを取得するためのツール。新規スタンバイの初期データ作成に使用される。
- pg_stat_replication
- PostgreSQL のレプリケーション状況を監視するためのシステムビュー。
- 公開・購読(Publication/Subscription)
- 論理レプリケーションの概念。公開したデータを購読側が受信して適用する。
- PITR(Point-In-Time Recovery)
- 過去の任意の時点へデータを復元する技術。WALアーカイブと組み合わせて実現する。
- リードレプリカ
- 読み取り専用の複製を利用して読み取り負荷を分散させる構成。
- レプリケーションラグ
- プライマリとスタンバイ間のデータ遅延量。監視指標として重要。
- TLS/SSL
- レプリケーション通信を暗号化してセキュリティを確保する設定。



















