Lakebase にデータをレプリケートする
このガイドでは、論理レプリケーションを使用して外部 Postgres データベースから Lakebase にデータをレプリケートする方法を説明します。Lakebase はサブスクライバーとして機能します。ソース データベースに接続し、既存のデータをコピーして、切り替えを行うまで継続的な変更を適用します。これを使用して、Amazon Aurora PostgreSQL や Amazon RDS for PostgreSQL などの別の Postgres プロバイダーから、またはセルフマネージド Postgres サーバーから Lakebase にデータベースを移行します。
前提条件
- LakebaseからアクセスできるパブリックEndpointを持つソースPostgresデータベース。
- ソースデータベースでのスーパーユーザーアクセス、または管理されたPostgresサービスでの管理者アカウント。
wal_levelの設定、REPLICATION属性を持つロールの作成、および公開の作成にはすべて、このレベルのアクセス権が必要です。 - ターゲット データベースの Lakebase プロジェクト。
- サブスクリプションを作成するための Lakebase Postgres ロール:
databricks_superuserロールのメンバー、またはpg_create_subscription定義済みロールが付与されたロール。Postgres ロールの作成を参照してください。
Databricksによって、ワークスペースで論理レプリケーションが有効になっています。有効にするためのプロジェクトごとのステップはありません。サブスクライバーとして、Lakebaseではwal_levelの変更は必要ありません。wal_level = logicalが必要なのは、ソースパブリッシャーのみです。
ソースデータベースを準備する
ソースの Postgres データベースで、書き込み先行ログを logical に設定し、レプリケーションの容量があることを確認します。次の例は、セルフマネージド型の Postgres の例です。管理対象の Postgres プロバイダーは、異なる設定を使用する場合があります。
ALTER SYSTEM SET wal_level = logical;
ALTER SYSTEM SET max_wal_senders = 10;
ALTER SYSTEM SET max_replication_slots = 10;
wal_levelの変更を有効にするには、ソースデータベースを再起動します。マネージドサービスで、プロバイダーのパラメーターグループまたはフラグを使用してwal_levelをlogicalに設定します。たとえば、Amazon Aurora PostgreSQL では、DB クラスターパラメーターグループで rds.logical_replication を 1 に設定し、クラスターを再起動します。Amazon RDS for PostgreSQL では、DB パラメーターグループで同じパラメーターを設定し、インスタンスを再起動します。
レプリケーション用のロールを作成し、複製するテーブルへの読み取りアクセス権を付与します:
CREATE ROLE replication_user WITH REPLICATION LOGIN PASSWORD '<password>';
GRANT USAGE ON SCHEMA public TO replication_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO replication_user;
この CREATE ROLE ステートメントは、セルフマネージド Postgres サーバー上で記述どおりに動作します。一部のマネージド Postgres プロバイダーは、REPLICATION 属性を直接許可せず、代わりにプロバイダー固有のロールを通じてレプリケーションアクセスを許可します。ソースがマネージドサービスで実行されている場合は、プロバイダーのドキュメントに従ってロールにレプリケーションアクセスを与え、続くステップで replication_user の代わりにそのロールを使用します。たとえば、Amazon Aurora PostgreSQL および Amazon RDS for PostgreSQL では、WITH REPLICATION なしでロールを作成し、GRANT rds_replication TO replication_user を実行します。
複製するテーブルの公開物を作成します。各テーブルには、 PRIMARY KEY かレプリカ ID が設定されている必要があります。Postgresのドキュメントの「レプリカID」を参照してください。
CREATE PUBLICATION my_publication FOR TABLE orders, customers;
ソースへのアクセスをLakebaseに許可する
サブスクライバーであるLakebaseは、ソースデータベースへのアウトバウンド接続を開始します。このアウトバウンド接続は、アカウントのネットワークポリシーによって制御されます。このポリシーは、Serverlessワークロードが接続できるインターネット上の宛先を制御します。これは、Lakebaseプロジェクトの設定やデータベース内のロールによって制御されるものではありません。
変更を加える必要があるかどうかは、アカウントがネットワークポリシーを強制しているかどうかによって異なります:
- アクティブなネットワークポリシーはありません : Lakebaseは、到達可能なパブリックエンドポイントを持つパブリッシャーに到達できます。変更は必要ありません。
- アクティブなネットワークポリシー : アカウントネットワークポリシーで許可されたインターネットの宛先に、ソースデータベースのホストを追加します。「ネットワーク ポリシーの管理」を参照してください。ホストが許可されていない場合、サブスクリプションを作成した時に拒否されます。「トラブルシューティング」を参照してください。
サブスクライバー接続では、 Private Linkはサポートされていません。ソースデータベースは、パブリックEndpoint経由で到達可能である必要があります。
ターゲットテーブルを作成する
論理レプリケーションはデータをコピーしますが、スキーマはコピーしません。レプリケーションを起動する前に、ソースと同じ名前と列を持つターゲットLakebaseデータベースにテーブルを作成します。手動で作成するか、ソースからスキーマをダンプしてLakebaseにロードすることができます。スキーマのみのダンプを参照してください。
ターゲットテーブルを空で作成します。ターゲットテーブルに既に行が含まれている場合、初期テーブルコピーは重複キーまたは制約違反で失敗します。
サブスクリプションを作成する
サブスクリプションを作成できるロールとしてターゲット Lakebase データベースに接続し (「前提条件」を参照)、ソースパブリッシャーに接続するサブスクリプションを作成します。
CREATE SUBSCRIPTION my_subscription
CONNECTION 'host=<source-host> port=5432 dbname=<source-db> user=replication_user password=<password> sslmode=verify-full sslrootcert=system'
PUBLICATION my_publication;
サブスクリプションを作成すると、ソースパブリッシャーでレプリケーションスロットが起動され、既存の行がコピーされ、進行中の変更がストリームされます。
The replication slot makes the source database retain write-ahead log (WAL) until Lakebase confirms it has received the changes. If the subscription stops consuming changes, for example because it is disabled, disconnected, or failing, WAL accumulates on the source without limit. On a production source, this can fill the source's storage and cause an outage.
While replication runs, monitor how much WAL the slot retains on the source:
SELECT slot_name, active,
pg_catalog.pg_size_pretty(pg_catalog.pg_wal_lsn_diff(pg_catalog.pg_current_wal_lsn(), restart_lsn)) AS retained_wal
FROM pg_catalog.pg_replication_slots;
To cap the risk on a self-managed source, set max_slot_wal_keep_size to limit how much WAL a slot can retain. If a slot exceeds the limit, Postgres invalidates it and the subscription must be re-created. Drop the subscription as soon as you finish the migration. See Replication slots and storage.
When Lakebase subscribes, it connects out to your source database and sends the replication role's credentials to it. sslmode=verify-full with sslrootcert=system encrypts the connection and verifies the source's identity, which protects the relayed credentials against a man-in-the-middle. It works when your source uses a publicly trusted certificate authority. The weaker sslmode=require encrypts but does not verify the source. Verifying a source that uses a private certificate authority is not supported.
監視と切り替え
初期コピーと進行中の遅延を追跡します:
SELECT subname, received_lsn, latest_end_lsn, last_msg_receipt_time
FROM pg_catalog.pg_stat_subscription;
初回コピーが完了したことを確認するには、サブスクライバーでレプリケーションのモニタリングにあるテーブルごとの同期ステータスクエリーを実行し、すべてのテーブルにReady (fully live)と表示されるまで待ちます。
ターゲットが追いついたら、ソースへの書き込みを停止し、ターゲットが完全に最新であることを確認してから、アプリケーションをLakebase接続の詳細に切り替えます。
論理レプリケーションでは、シーケンス値やIDカウンターはコピーされません。Lakebaseでの書き込みを再開する前に、各ターゲットシーケンスをレプリケートされたデータと一致するようにリセットしてください。そうしないと、SERIALまたはID列への新しい挿入で重複する主キーが生成される可能性があります:
SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('orders', 'id'), (SELECT MAX(id) FROM orders));
アプリケーションが Lakebase に対して実行されたら、サブスクリプションを破棄してソースからの複製を停止します。ソースに到達可能な場合、サブスクリプションを破棄すると、その上のレプリケーションスロットも削除されます。サブスクリプションまたはパブリケーションの削除を参照してください。
モニタリングおよびクリーンアップについては、「論理レプリケーションの管理と監視」を参照してください。
次のステップ
- レプリケーションの管理 :サブスクリプションのモニタリング、スロットの管理、トラブルシューティングを行います。「 論理レプリケーションの管理とモニタリング」を参照してください。
- Lakebaseからのストリーム : Lakebaseから外部Postgresサブスクライバーに変更を公開します。Lakebase からデータを複製するを参照してください。
- 比較メソッド :データを Lakebase に出し入れするための正しい方法を選択します。Lakebase データの移動を参照してください。