外部レプリカを構成する

このページでは、logical decodingpglogical 拡張機能を使用して Cloud SQL 外部のレプリカを複製する Cloud SQL インスタンスを構成する方法について説明します。

レプリケーションの詳細については、Cloud SQL でのレプリケーションをご覧ください。

外部レプリカの構成を行う

始める前に

このタスクを開始する前に、外部レプリカの要件を満たす Cloud SQL インスタンスと外部 PostgreSQL インスタンスを用意しておく必要があります。

ソース インスタンスの要件

外部リードレプリカのソース インスタンスは、プライマリ インスタンスまたはスタンドアロン インスタンスである必要があります。Cloud SQL リードレプリカを外部リードレプリカのソース インスタンスとして使用することはできません。リードレプリカはプライマリ インスタンスのディスククローンから再作成されることがあり、リードレプリカは外部リードレプリカへのレプリケーション状態を維持できません。

プライマリ インスタンスを構成する

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
  2. プライマリ インスタンスで外部レプリカの IP アドレスへのアクセスを有効にします。

    IP アクセスの有効化の詳細については、IP 接続のためのアクセスを構成するをご覧ください。

  3. 後で使用できるように、プライマリ インスタンスのパブリック IP アドレスとパブリック送信 IP アドレスを記録します。これらの値はインスタンスの [概要] ページで確認できます。
  4. 右上隅の Cloud Shell アイコン()をクリックします。
  5. Cloud Shell プロンプトで、組み込み PostgreSQL クライアントを使用してプライマリ インスタンスに接続します。
       
    gcloud sql connect PRIMARY_INSTANCE_NAME \
    --user=postgres
       
       
  6. root パスワードを入力します。postgres プロンプトが表示されます。
  7. REPLICATION 属性を持つ PostgreSQL ユーザーを作成します。
    CREATE USER REPLICATION_USER WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
       
  8. pglogical 拡張機能をインストールして構成します。

    Cloud SQL インスタンスを編集して、以下のフラグを追加して設定します。

    • cloudsql.enable_pglogical
    • cloudsql.logical_decoding
    • max_replication_slots
    • max_worker_processes
    • max_wal_senders
    • これらのフラグの詳細については、PostgreSQL リソースのページをご覧ください。

    データベースを再起動してログインし、plication_user に切り替えて pglogical 拡張機能を作成します。

    CREATE EXTENSION pglogical;
       
  9. pglogical ノードを作成します。

    pglogical ノードは物理的な PostgreSQL インスタンスを表し、そのインスタンスの接続の詳細を保存しています。

    SELECT pglogical.create_node(
      node_name := 'provider',
      dsn := 'host=PRIMARY_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
       );
       
  10. 新しいデータベースで開始する場合は、プライマリ インスタンスとレプリカ インスタンスの両方に同じデータベースとテーブルを作成します。次に例を示します。
    CREATE DATABASE test;
    
    \connect test;
    
    CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
    INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
    
    CREATE EXTENSION pglogical;
  11. プライマリ インスタンスにデータベースがすでに存在する場合は、レプリカでもデータベースを作成する必要があります。これを行うには、プライマリ インスタンスから Cloud Storage バケットにデータベースをエクスポートし、レプリカにインポートします。詳しくは、Cloud SQL から Cloud Storage の SQL ダンプファイルにデータをエクスポートするをご覧ください。
  12. 異なるデータセットを異なる宛先に複製できるように、pglogical はレプリケーション セットのコンセプトに対応しています。たとえば、テーブルをデフォルトのレプリケーション セットに追加するには、次のコマンドを実行します。
    SELECT pglogical.replication_set_add_table('default', 'replica_test', true);
       

外部レプリカを構成する

  1. レプリケーション用に特別なユーザーを作成し、レプリケーションの権限を付与します。
    CREATE USER REPLICATION_USER WITH REPLICATION SUPERUSER LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
       
  2. 新しいデータベースで開始する場合は、REPLICATION_USER を使用して、プライマリ インスタンスとレプリカ インスタンスの両方に同じデータベースとテーブルを作成します。次に例を示します。
    CREATE DATABASE test;
    \connect test;
    CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
    INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
      
  3. プライマリ インスタンスからエクスポートしたファイルを外部レプリカ インスタンスにシードするには、エクスポートしたファイルを Cloud Storage からダウンロードします。外部レプリカが Compute Engine インスタンス上にある場合は、gcloud storage コマンドを使用してファイルをダウンロードできます。
    gcloud storage cp gs://BUCKET_NAME/DUMP_FILE_NAME .
        
  4. ファイルをデータベースにインポートします。
    psql --user=postgres --password < DUMP_FILE_NAME.
    
  5. OS に応じて pglogical をインストールします。たとえば、PostgreSQL バージョン 13 を実行する Debian システムの場合は、sudo apt-get install postgresql-13-pglogical です。
  6. replication_user としてデータベースにログインし、次のパラメータを設定します。
    ALTER SYSTEM SET shared_preload_libraries = 'pglogical';
    ALTER SYSTEM SET max_replication_slots = #; (where # is the same as you set on the primary).
    ALTER SYSTEM SET max_worker_processes = #; (where # is the same as you set on the primary).
    # Logout of the database and restart it. For example,
    # sudo /etc/init.d/postgresql restart
    # Log back in the database as the replication_user.
    # Since the pglogical extension is created local to each database, you need to
    # execute CREATE EXTENSION pglogical in each database you create, so if you
    # haven't already done that:
    CREATE EXTENSION pglogical;
       

    For more information about these flags, see the PostgreSQL resources page.

  7. pglogical ノードを作成します。
    SELECT pglogical.create_node(
      node_name := 'subscriber',
      dsn := 'host=REPLICA_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
      );
      
  8. pglogical サブスクリプションを作成します。
    SELECT pglogical.create_subscription(
        subscription_name := 'SUBSCRIPTION_NAME',
        provider_dsn := 'host=PRIMARY_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
    );
      
  9. サブスクリプションのステータスを確認します。
    SELECT * FROM pglogical.show_subscription_status('SUBSCRIPTION_NAME');
       
  10. ステータスが「replicating」と表示されている場合、設定は成功です。
  11. 一部のデータをプライマリに挿入し、レプリカにもデータが存在することを確認します。

トラブルシューティング

pglogical のトラブルシューティングをご覧ください。

次のステップ