レプリカクラスター
レプリカクラスターは、独立したCloudNativePG Cluster
リソースであり、別のPostgresインスタンスからレプリカにあるという主な特徴があります、理想的には同じくCloudNativePGによって管理されます。通常、レプリカクラスターは、別のリージョンの別のKubernetesクラスターにあります。レプリカクラスターはカスケードすることもでき、以下で説明するように、ソースからのデータのレプリケーションをオブジェクトストアにのみ依存できます。
次の図は、この機能の詳細を含む“Architecture” sectionから取得したもので、レプリカクラスターを使用して実装できるアーキテクチャの例を示しています。
基本的な概念
CloudNativePGは、 PostgreSQLクラスターが既存のソースソースから作成され、 レプリカクラスター 機能を介して同期が維持される場合でも、 PostgreSQLレプリケーションフレームワークの基礎に依存します。ソースは、プライマリクラスターまたは別のレプリカクラスターカスケードレプリカクラスターです。
最初のステップは、レプリカクラスターをブートストラップし、使用可能な方法のいずれかを選択することです。
ストリーミングレプリケーション
pg_basebackup経由ボリュームスナップショットからのリカバリー
オブジェクトストアのBarman Cloudバックアップからのリカバリー
Bootstrap を参照してください。
pg_basebackup ストリーミングまたはrecovery
ボリュームスナップショットまたはオブジェクトストアを使用してPostgreSQLサーバーのクローンを作成する方法については、
レプリカクラスターのベースバックアップが利用できるようになったら、PostgreSQLの継続的リカバリーを介してオリジンから変更をレプリケートする方法を定義する必要があります。 2つのオプションがあります。
レプリカクラスターとソース間でストリーミングレプリケーションを使用しますこれには、2つのクラスター間のネットワーク接続が正しく設定されていることを確認するために、いくつかの管理およびセキュリティ関連の作業を行う必要があります。
WALアーカイブオブジェクトストア上を使用して、ソースからオブジェクトストアに定期的にシップされ、レプリカクラスタの
barman-cloud-wal-restoreによってプルされるWALファイルを取得します2つのいずれか
あなたがしなければならないのは、実際に外部クラスターを定義することだけです。
外部クラスターにbarmanObjectStore セクションが含まれる場合
WALアーカイブを使用できるようになり、CloudNativePGは指定されたプライマリインスタンスに
restore_commandを自動的に設定しますボリュームスナップショットを利用できない場合、
recoveryセクションを使用してオブジェクトストアからレプリカクラスターをブートストラップできます。
外部クラスターにconnectionParameters セクションが含まれる場合
pg_basebackupセクションを使用して、ストリーミングレプリケーションを介してレプリカクラスターをブートストラップできるようになりますCloudNativePGは、指定されたプライマリインスタンスで
primary_conninfoオプションを自動的に設定するため、WALレシーバープロセスが開始され、ソースクラスターに接続してデータを受信します
作成されたレプリカクラスターは、指定されたプライマリから予約されたオブジェクトストアでバックアップを実行でき、分散方法での対称アーキテクチャが有効になります。
以下を選択することにより、PostgreSQLデータベースのお気に入りの分散アーキテクチャを決定する完全な柔軟性と自由があります。
異なるデータセンターにある複数のKubernetesクラスターにまたがるプライベートクラウド
さまざまなリージョンの複数のKubernetesクラスターにまたがるパブリッククラウド
前の2つの混合ハイブリッド
さまざまなリージョンおよびさまざまなクラウドサービスプロバイダーにある複数のKubernetesクラスターにまたがるパブリッククラウド
レプリカクラスターのセットアップ
ソースクラスターからレプリカクラスターをセットアップするには、クラスターYAMLファイルを作成し、それに応じて次の部分を定義する必要があります。
レプリカクラスターに
externalClustersセクションを定義しますレプリカクラスターのブートストラップ部分を定義します。
pg_basebackupセクションを使用してストリーミングを介してブートストラップするか、recoveryセクションを使用してボリュームスナップショットまたはオブジェクトストアからブートストラップできます。レプリカクラスターに継続的リカバリ部
.spec.replicaを定義します。行う必要があるのは、オプション.spec.replica.enabledでレプリカモードを有効にし、オプション.spec.replica.sourceでexternalClusters名前を設定することだけです
pg_basebackupを使用した例
この 最初の例 は、ブートストラップと継続的リカバリーの両方でストリーミングレプリケーションを使用してレプリカクラスターを定義します。レプリカクラスターは、TLS認証を使用してソースクラスターに接続します。
samples/ サブディレクトリ。
ソースクラスターを指しているbootstrap およびreplica
セクションに注意してください。
bootstrap:
pg_basebackup:
source: cluster-example
replica:
enabled: true
source: cluster-example
externalClusters セクションでは、 connectionParameters
サブセクションのホストに対応した適切な名前空間を使用することに注意してください。レプリカクラスターが別の名前空間にある場合、
-replication および-ca
シークレットは、必要に応じてコピーしておく必要があります。
externalClusters:
- name: <MAIN-CLUSTER>
connectionParameters:
host: <MAIN-CLUSTER>-rw.<NAMESPACE>.svc
user: streaming_replica
sslmode: verify-full
dbname: postgres
sslKey:
name: <MAIN-CLUSTER>-replication
key: tls.key
sslCert:
name: <MAIN-CLUSTER>-replication
key: tls.crt
sslRootCert:
name: <MAIN-CLUSTER>-ca
key: ca.crt
オブジェクトストアからのバックアップを使用した例
2番目の例 は、 recovery
セクションと継続的リカバリーを使用してオブジェクトストアからブートストラップするレプリカクラスターを定義します。ストリーミングレプリケーションと特定のオブジェクトストアの両方を使用します。ストリーミングレプリケーションの場合、レプリカクラスターは基本認証を使用してソースクラスターに接続します。
samples/ サブディレクトリにあります。
ソースクラスターを指しているbootstrap およびreplica
セクションに注意してください。
bootstrap:
recovery:
source: cluster-example
replica:
enabled: true
source: cluster-example
externalClusters セクションでは、 endpointURL
およびconnectionParameters.host
で適切な名前空間を使用するように注意してください。また、必要に応じて必要なシークレットがコピーされていること、およびソースクラスターのバックアップが既に作成されていることを確認してください。
externalClusters:
- name: <MAIN-CLUSTER>
barmanObjectStore:
destinationPath: s3://backups/
endpointURL: http://minio:9000
s3Credentials:
…
connectionParameters:
host: <MAIN-CLUSTER>-rw.default.svc
user: postgres
dbname: postgres
password:
name: <MAIN-CLUSTER>-superuser
key: password
注釈
ソースクラスターとレプリカクラスター間でストリーミングレプリケーションを使用するには、2つのクラスター間のネットワーク接続があることを確認し、パスワードまたは証明書を保持する必要なシークレットがすべて事前に適切に作成されていることを確認する必要があります。
ボリュームスナップショットを使用した例
ボリュームスナップショットを使用し、ストレージクラスがスナップショットクラスター間の可用性を提供する場合、それを活用して、ソースクラスターのボリュームスナップショットを介してレプリカクラスターをブートストラップできます。
3番目の例 は、 recovery
セクションを使用してボリュームスナップショットからブートストラップするレプリカクラスターを定義します。ストリーミングレプリケーション基本認証を介して、オブジェクトストアを使用してWALファイルを取得します。
samples/ サブディレクトリにあります。
レプリカクラスターでの指定されたプライマリの昇格
指定されたプライマリ を プライマリ に昇格させるには、オプション
.spec.replica.enabled
を介してレプリカクラスターでレプリカモードを無効にするだけです
replica:
enabled: false
source: cluster-example
レプリカモードが無効になると、レプリカクラスターとソースクラスターは2つの別のクラスターになり、レプリカクラスターの 指定されたプライマリ は、そのクラスターの プライマリ に昇格します。 cnpgプラグインを使用して、以前にレプリカであったクラスターのステータスを確認して、ロールの変更を確認できます。
kubectl cnpg -n <cluster-name-space> status cluster-replica-example
注釈
レプリケーションの無効化は**不可逆**オペレーションです。レプリケーションが無効になり、**指定されたプライマリ**が**プライマリ**に昇格すると、レプリカクラスターとソースクラスターは決定的に2つの独立したクラスターになります。