シャーディングのための論理レプリケーション
PUBLICATION/SUBSCRIPTION論理レプリケーションでクラスター間のテーブル移行やメジャーバージョンアップグレードを行います。
「シャーディングのための論理レプリケーション」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。
論理レプリケーションと物理レプリケーション
物理レプリケーションは WAL のバイト列を複製します。クラスター全体が対象で、同じバージョンが必要です。論理レプリケーションは行を複製します。選択したテーブルが対象で、異なる PG バージョン間でも実行できます。
- 特定のテーブルを購読する
- PG 14 から PG 16 にレプリケーションする(アップグレードに利用できます)
- 注意して双方向またはマルチマスター構成にする
- 異なるスキーマを使用できる
セットアップ:パブリッシャー
プライマリをパブリッシャーとして設定します。
-- postgresql.conf
wal_level = logical
-- Create a publication:
CREATE PUBLICATION pub_orders FOR TABLE orders, order_items;
-- Or all tables in the database:
CREATE PUBLICATION pub_all FOR ALL TABLES;セットアップ:サブスクライバー
対象データベースで次の操作を行います。
CREATE SUBSCRIPTION sub_orders
CONNECTION 'host=primary port=5432 user=repl dbname=mydb'
PUBLICATION pub_orders;初期同期
サブスクリプションは、まず一致するすべてのテーブルを初期コピーし、その後変更をストリーミングします。対象のスキーマはソースと一致している必要があります。
ユースケース:メジャーバージョンのアップグレード
論理レプリケーションは、ダウンタイムを最小限に抑えて Postgres をアップグレードする現代的な方法です。
- PG16 クラスターを構築する
- PG14 から PG16 に論理レプリケーションする
- PG16 が追いついた時点でアプリを切り替える
- PG14 を停止する
ユースケース:データベースの分割
巨大な DB を小さなデータベースに分割するには、次のようにします。
- 新しいサービスに必要なテーブルだけをパブリッシュする
- 新しい DB でサブスクライブする
- 追いついた後に書き込み先を移行する
ユースケース:異種レプリカ
異なるインデックスを持つ読み取りレプリカや、レポート用の追加列を持つデータウェアハウス用 Postgres にレプリケーションできます。
競合
論理レプリケーションは競合を自動解決しません。同じ行が両側で更新されると、サブスクライバーはエラーで停止します。次の方法で回避してください。
- 一方の側だけに書き込む
- 診断を改善するために REPLICA IDENTITY FULL を使用する
- 競合を手動で解決し、サブスクリプションを再起動する
スキーマ変更
DDL はレプリケーションされません。通常はサブスクライバー、次にパブリッシャーの順に、両側でスキーマ変更を手動適用してください。または、DDL をレプリケーションできる pglogical 拡張機能を使用します。
部分レプリケーション
現在の PG では、パブリケーションごとに行フィルターと列リストを設定できます。
CREATE PUBLICATION us_only FOR TABLE customers
WHERE (country = 'US');
CREATE PUBLICATION compact FOR TABLE users (id, email);論理レプリケーションによるシャーディング
テナントを専用シャードに移動するには、次のようにします。
- ソースで、1 つのテナントに絞ったパブリケーションを作成する
- 移行先からサブスクライブする
- アプリを新しいシャードに切り替える
- ソースのテナントデータを削除する
パフォーマンスと遅延
論理レプリケーションは、サブスクリプションごとに基本的にシングルスレッドで動作します。大量のデータを扱うソースでは、複数のパブリケーションとサブスクリプション、または pglogical / Debezium のようなサードパーティ製ツールが役立つ場合があります。
まとめ
論理レプリケーションによって、行単位のストリーミングが可能になります。
- バージョンをまたいだレプリケーション、テーブルの部分レプリケーション
- ダウンタイムを最小限に抑えたメジャーアップグレード
- 競合の解決は利用者の責任
- DDL はレプリケーションされない
クイックチェック
最小限のダウンタイムで PostgreSQL 14 から 16 にアップグレードする必要があります。どのレプリケーションが役立ちますか?
よくある質問
「シャーディングのための論理レプリケーション」レッスンは無料ですか?
はい。「シャーディングのための論理レプリケーション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。
「シャーディングのための論理レプリケーション」で何を学びますか?
PUBLICATION/SUBSCRIPTION論理レプリケーションでクラスター間のテーブル移行やメジャーバージョンアップグレードを行います。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
SQL Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「シャーディングのための論理レプリケーション」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSQL Academyレッスンでコードを書いて実行できますか?
はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ストリーミングレプリケーションとWAL
- シャーディングのための論理レプリケーション
- フェイルオーバーとリーダー選出(Patroni、Stolon)
- 読み取りレプリカと接続ルーティング