ストリーミングレプリケーションとWAL
WALに基づく物理ストリーミングレプリケーションを設定し、遅延を監視して、データ損失ゼロの書き込みに向けて同期レプリカを構成します。
「ストリーミングレプリケーションとWAL」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。
なぜレプリケーションするのか
レプリケーションは、複数の目的を同時に果たします。
- HA — プライマリの障害に耐える
- 読み取りのスケーリング — SELECT をレプリカにオフロードする
- バックアップ / PITR — 継続的なアーカイブ
- 地理的分散 — ユーザーの近くにレプリカを配置する
WAL:先行書き込みログ
すべての書き込みは、まず WAL に記録されます。WAL は永続性を保証し、レプリケーションの基盤となります。WAL をレプリカにストリーミング → レプリカが WAL を再生 → レプリカが最新状態になる、という流れです。
物理ストリーミングレプリケーション
プライマリからレプリカへ、WAL をバイト単位でストリーミングします。
- レプリカはプライマリのバイナリコピーです
- 同じ PostgreSQL バージョンを使用します
- クラスター全体をレプリケーションします(すべてのデータベース、すべてのテーブル)
- 読み取り専用です
セットアップ:プライマリ
postgresql.conf でプライマリを設定します。
wal_level = replica
max_wal_senders = 10
wal_keep_size = 1GB
-- pg_hba.conf: allow replication connections
host replication replicator 10.0.0.0/24 md5セットアップ:レプリカ
ベースバックアップを作成し、primary_conninfo を指定して起動します。
pg_basebackup -h primary -D /var/lib/postgresql/data -U replicator -W -X stream -P
-- postgresql.conf on replica:
primary_conninfo = 'host=primary port=5432 user=replicator password=...'
-- Touch standby.signal file and start:
touch /var/lib/postgresql/data/standby.signal同期レプリケーションと非同期レプリケーション
- 非同期(デフォルト) — プライマリは待機せずにコミットします。レプリカに遅延が発生する可能性があります
- 同期 — プライマリは、レプリカが確認するまで COMMIT を待機します。データ損失はゼロですが、低速になります
-- Synchronous configuration on primary:
synchronous_commit = on
synchronous_standby_names = 'replica1, replica2'レプリケーション遅延
非同期レプリカはプライマリより遅れます。次の情報を監視します。
SELECT client_addr, state, sent_lsn, write_lsn, replay_lsn,
pg_wal_lsn_diff(sent_lsn, replay_lsn) AS replay_lag_bytes
FROM pg_stat_replication;レプリケーションスロット
スロットにより、レプリカが WAL を消費するまでプライマリに WAL が保持されます。
SELECT pg_create_physical_replication_slot('replica1');
-- On replica:
primary_slot_name = 'replica1'スロットの落とし穴
レプリカが切断され、再接続しないままになると、そのスロットによって WAL のクリーンアップが妨げられ、ディスクがいっぱいになります。使用していないスロットを削除してください。
SELECT pg_drop_replication_slot('replica1');カスケードレプリカ
レプリカ自体が他のレプリカに WAL をストリーミングできます。これにより、プライマリの負荷を軽減できます。
ホットスタンバイ
デフォルトでは、レプリカは読み取り専用クエリを受け付けます(hot_standby = on)。レプリカで長時間実行される読み取りクエリは WAL の再生を遅延させる可能性があるため、max_standby_streaming_delay を調整してください。
昇格
レプリカを新しいプライマリにするには、次のようにします。
pg_ctl promote -D /var/lib/postgresql/data
-- Or in SQL:
SELECT pg_promote();まとめ
ストリーミングレプリケーションは、WAL の転送と再生です。
- 物理的で、バイナリが同一
- デフォルトは非同期。データ損失ゼロには同期を使用
- スロットは WAL を保持しますが、注意が必要
- 昇格によってレプリカをプライマリに変更
クイックチェック
ストリーミングレプリカにレプリケーションスロットを使用しない場合の主なリスクは何ですか?
よくある質問
「ストリーミングレプリケーションとWAL」レッスンは無料ですか?
はい。「ストリーミングレプリケーションとWAL」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。
「ストリーミングレプリケーションとWAL」で何を学びますか?
WALに基づく物理ストリーミングレプリケーションを設定し、遅延を監視して、データ損失ゼロの書き込みに向けて同期レプリカを構成します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
SQL Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「ストリーミングレプリケーションとWAL」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSQL Academyレッスンでコードを書いて実行できますか?
はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ストリーミングレプリケーションとWAL
- シャーディングのための論理レプリケーション
- フェイルオーバーとリーダー選出(Patroni、Stolon)
- 読み取りレプリカと接続ルーティング