ページの先頭行へ戻る
Enterprise Postgres 15 オペレーターユーザーズガイド

4.8.1 MTLSを使用したロジカルレプリケーションの設定

ロジカルレプリケーションの設定について説明します。

以下の手順で、MTLSを使用してロジカルレプリケーションを設定します。

  1. 2つのFEPClusterを作成し(パブリッシャーとサブスクライバー)、それらが相互に通信できることを確認します。FEPClusterの作成については、“4.1 オペレーターを使用したFEPClusterのデプロイ”を参照してください。

  2. パブリッシャーをセットアップするには、パブリッシャーとして使用するクラスタのFEPCluster yamlに次の変更を加えます。

    1. spec.fepの下にセクションreplicationSlotsを追加して、レプリケーションスロットを作成します。
      「database」は、ロジカルレプリケーションを設定するデータベースの名前である必要があります。

    2. 以下に示すように、spec.fepの下にセクションpostgresを追加します。

      caName = CA用に作成されたconfigmapの名前

      certificateName = ユーザーによって作成されたサーバ証明書を含むシークレット

    3. spec.fepChildCrVal.customPgParamsの下のwal_levelパラメータの値を「replica」から「logical」論理に変更します。

    4. 以下に示すように、spec.fepChildCrVal.customPgHbaの下にエントリを追加します。

      これには、クライアントが証明書を提示する必要があり、証明書認証のみが許可されます。

      「SubClusterName」と「SubNamespace」を、サブスクライバーFEPClusterに従って適切な値に置き換えます。

  3. サブスクライバーをセットアップするには、サブスクライバーとして使用するクラスタのFEPCluster yamlに次の変更を加えます。

    1. 以下に示すように、spec.fepChildCrValの下にcustomCertificatesを追加します。

      caName = CA用に作成されたconfigmapの名前(つまり、サーバ/クライアント証明書の署名/認証に使用されるCA証明書は、「cacert」と呼ばれるconfigMapとしてマウントされます)

      certificateName = ユーザーによって作成されたサーバ証明書を含むシークレット

      username = ロジカルレプリケーションのためにパブリッシャークラスタで作成されたロールの名前

  4. パブリッシャーFEPClusterのPodに接続してから、以下に示すようにpostgresデータベースに接続します。

  5. 次に、パブリッシャー側で、複製するテーブルを含むデータベースに接続し、logicalrepluserなどのロールを作成して、このロールに必要な権限を付与します。

    以下に例を示します。付与する権限は、要件によって異なる場合があります。

  6. パブリッシャー側で、パブリケーションを作成し、パブリケーションを変更して、複製する必要のあるテーブルを追加します。

  7. サブスクライバー側では、上記の手順3のaで追加されたカスタム証明書が、次のようにパス/ tmp / custom_certs /にマウントされます。

  8. ロジカルレプリケーションはデータのみを複製し、テーブル構造は複製しないため、複製されるテーブルの構造はサブスクライバークラスタに存在する必要があります。

    以下に示すようにサブスクリプションを作成します。


    上記の例のコマンドは次のとおりです。

    CREATE SUBSCRIPTION my_subscription CONNECTION 'host=fepcluster-publisher-primary-svc.ns-a.svc.cluster.local port=27500 sslcert=/tmp/custom_certs/logicalrepluser/tls.crt sslkey=/tmp/custom_certs/logicalrepluser/tls.key sslrootcert=/tmp/custom_certs/logicalrepluser/ca.crt sslmode=verify-full password=my_password user=logicalrepluser dbname=db1' PUBLICATION my_publication WITH (slot_name=myslot1, create_slot=false);
    
    Host = primary service of the publisher FEP Cluster
    sslcert, sslkey, sslrootcert = path to certificates mounted on the Subscriber FEP Cluster
    user= Role created on the Publisher side
    password= password for the role
    dbname= database which contains the tables to be replicated
    指定内容

    Host = パブリッシャーFEPクラスタのプライマリサービス
    sslcert, sslkey, sslrootcert = サブスクライバーFEPクラスタにマウントされた証明書へのパス
    user= パブリッシャー側で作成され、サブスクライバーからパブリッシャーへの論理レプリケーション接続を確立するために使用されるロール
    dbname= 複製されるテーブルを含むデータベース