ロジカルレプリケーションの設定について説明します。
以下の手順で、MTLSを使用してロジカルレプリケーションを設定します。
2つのFEPClusterを作成し(パブリッシャーとサブスクライバー)、それらが相互に通信できることを確認します。FEPClusterの作成については、“4.1 オペレーターを使用したFEPClusterのデプロイ”を参照してください。
パブリッシャーをセットアップするには、パブリッシャーとして使用するクラスタのFEPCluster yamlに次の変更を加えます。
spec.fepの下にセクションreplicationSlotsを追加して、レプリケーションスロットを作成します。
「database」は、ロジカルレプリケーションを設定するデータベースの名前である必要があります。
以下に示すように、spec.fepの下にセクションpostgresを追加します。
caName = CA用に作成されたconfigmapの名前
certificateName = ユーザーによって作成されたサーバ証明書を含むシークレット
spec.fepChildCrVal.customPgParamsの下のwal_levelパラメータの値を「replica」から「logical」論理に変更します。
以下に示すように、spec.fepChildCrVal.customPgHbaの下にエントリを追加します。
これには、クライアントが証明書を提示する必要があり、証明書認証のみが許可されます。
「SubClusterName」と「SubNamespace」を、サブスクライバーFEPClusterに従って適切な値に置き換えます。
サブスクライバーをセットアップするには、サブスクライバーとして使用するクラスタのFEPCluster yamlに次の変更を加えます。
以下に示すように、spec.fepChildCrValの下にcustomCertificatesを追加します。
caName = CA用に作成されたconfigmapの名前(つまり、サーバ/クライアント証明書の署名/認証に使用されるCA証明書は、「cacert」と呼ばれるconfigMapとしてマウントされます)
certificateName = ユーザーによって作成されたサーバ証明書を含むシークレット
username = ロジカルレプリケーションのためにパブリッシャークラスタで作成されたロールの名前
パブリッシャーFEPClusterのPodに接続してから、以下に示すようにpostgresデータベースに接続します。
次に、パブリッシャー側で、複製するテーブルを含むデータベースに接続し、logicalrepluserなどのロールを作成して、このロールに必要な権限を付与します。
以下に例を示します。付与する権限は、要件によって異なる場合があります。
パブリッシャー側で、パブリケーションを作成し、パブリケーションを変更して、複製する必要のあるテーブルを追加します。
サブスクライバー側では、上記の手順3のaで追加されたカスタム証明書が、次のようにパス/ tmp / custom_certs /にマウントされます。
ロジカルレプリケーションはデータのみを複製し、テーブル構造は複製しないため、複製されるテーブルの構造はサブスクライバークラスタに存在する必要があります。
以下に示すようにサブスクリプションを作成します。
上記の例のコマンドは次のとおりです。
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= 複製されるテーブルを含むデータベース