0Pricing
SQL Academy · レッスン

ストリーミングレプリケーションと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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ストリーミングレプリケーションとWAL
  2. シャーディングのための論理レプリケーション
  3. フェイルオーバーとリーダー選出(Patroni、Stolon)
  4. 読み取りレプリカと接続ルーティング
← SQL Academyに戻る