Linux on Power ( ppc64le ) クラスター上で、 Zalando から CloudNativePG へのデータ移行
レプリカモードで動作しているクラスタ内で pg_basebackup ブートストラップモードを使用することで、 Zalando から CloudNativePG へデータを転送できます。 データを転送するには、 Zalando データストア(ソース)をレプリケートする CloudNativePG レプリカクラスター(ターゲット)を作成する必要があります。
前提条件
ライブクラスターからブートストラップするには、次の手順を完了してください:
- ターゲットとソースが同じメジャー PostgreSQL バージョンであることを確認してください。
- ZalandoPostgreSQL データベースで、レプリケーションロールとログインロールを持つユーザー
streaming_replicaを設定します。
Zalando の Postgres データストアをデータ移行用に修正する
データ移行のために Zalando の Postgres データストアを変更するには、次の手順を完了してください:
Zalando ポッドに接続します:
プライマリポッドの詳細を表示する:
kubectl get pods -o jsonpath={.items..metadata.name} -l application=spilo,spilo-role=master -n instana-postgresポッド内で直接コマンドを実行する:
kubectl exec -it <primary_pod_name> -n instana-postgresPostgres データベースに接続します:
psql -U postgresZalando データベースで、レプリケーションロールとログインロールを持つユーザー
streaming_replicaを作成し、その役割を列挙する:\du CREATE ROLE streaming_replica WITH REPLICATION; ALTER ROLE streaming_replica WITH LOGIN PASSWORD '<password_retrived_from_zalando>';PostgreSQL インタラクティブ端末を終了します:
\q
すべてのポッドの
pgdataディレクトリ内に、 ファイルpostgresql.confと同じ場所にoverride.conf配置される および というcustom.conf名前の空のファイルを2つ作成します。ポッドをリストします。
kubectl get pods -n instana-postgresポッド上で直接コマンドを実行する。 すべてのポッドで次のコマンドを実行してください:
kubectl exec -it <pod_name> -n instana-postgrescd /var/lib/postgresql/data/pgdata touch -f custom.conf touch -f override.conf
ポッド端末からの退出:
exit
データ移行のための CloudNativePGPostgres オペレータを使用した Postgres データストアの作成
Postgres オペレーターのオンラインインストール
CloudNativePGPostgres オペレーターのオンライン展開には、以下の手順を完了してください:
名前
instana-postgres-01空間を作成します:kubectl create namespace instana-postgres-01Red Hat OpenShift 上のファイルシステムグループIDを特定する。
Red Hat OpenShift ファイルシステムグループは、名前空間固有の値の範囲内にある必要があります。 CloudNativePGKubernetes オペレータがデプロイされているクラスタで、次のコマンドを実行します:
kubectl get namespace instana-postgres-01 -o yamlコマンドの実行結果は以下の例に類似した出力が表示されます:
apiVersion: v1 kind: Namespace metadata: annotations: ....... openshift.io/sa.scc.uid-range: 1000750000/10000 creationTimestamp: "2024-01-14T07:04:59Z" labels: kubernetes.io/metadata.name: instana-postgres-01 ....... name: instana-postgres-01注釈
openshift.io/sa.scc.supplemental-groupsには許可されたIDの範囲が含まれています。 この範囲1000750000/10000はIDから始まる10,0001000750000個の値を示しており、したがってIDの範囲をから1000750000まで指定します1000760000。 この例では、値はファイルシステムのグループ1000750000IDとして使用される可能性があります。以下の Helm コマンドを実行して、 CloudNativePGPostgres オペレータをインストールします:
helm repo add instana https://artifact-public.instana.io/artifactory/rel-helm-customer-virtual --username=_ --password=<AGENT_KEY>helm repo updatehelm install cnpg instana/cloudnative-pg --set image.repository=artifact-public.instana.io/self-hosted-images/3rd-party/operator/cloudnative-pg --set image.tag=v1.29.1_v0.34.0 --version=0.28.2 --set imagePullSecrets[0].name=instana-registry --set containerSecurityContext.runAsUser=<UID from namespace> --set containerSecurityContext.runAsGroup=<UID from namespace> -n instana-postgres-01
namespace
instana-postgres-01のイメージプルシークレットを作成します:kubectl create secret docker-registry instana-registry -n instana-postgres-01 \ --docker-username=_ \ --docker-password=<AGENT_KEY> \ --docker-server=artifact-public.instana.io注: シークレットを作成する前に、 <AGENT_KEY> の値を自身のエージェントキーで更新してください。外部クラスタアクセス用に、
postgres-secret.yaml次のようなファイルを作成します:kind: Secret apiVersion: v1 metadata: name: instanaadmin type: Opaque stringData: username: instanaadmin password: <user_generated_password_from_zalando>ファイルを
postgres-secret.yaml適用してください:kubectl apply -f postgres-secret.yaml -n instana-postgres-01CloudNativePG
Clusterreplicaリソースをモードで作成します:次のようにファイルを作成します(例
cnpg-postgres.yaml:)apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: name: postgres spec: instances: 3 imageName: artifact-public.instana.io/self-hosted-images/3rd-party/cnpg-containers:15_v0.39.0 imagePullPolicy: IfNotPresent imagePullSecrets: - name: instana-registry enableSuperuserAccess: true replicationSlots: highAvailability: enabled: true managed: roles: - name: instanaadmin login: true superuser: true createdb: true createrole: true replication: true passwordSecret: name: instanaadmin postgresql: pg_hba: - local all all trust - host replication postgres all trust - host replication streaming_replica 0.0.0.0/0 trust - host all all 0.0.0.0/0 trust - local replication standby trust - hostssl replication standby all md5 - hostnossl all all all reject - hostssl all all all md5 bootstrap: pg_basebackup: source: zalando-postgres replica: enabled: true source: zalando-postgres externalClusters: - name: zalando-postgres connectionParameters: host: postgres.instana-postgres.svc user: postgres password: name: instanaadmin key: password superuserSecret: name: instanaadmin storage: size: 20Gi storageClass: nfs-client次のコマンドを実行してファイルを
cnpg-postgres.yaml適用します:kubectl apply -f cnpg-postgres.yaml -n instana-postgres-01
最初の CloudNativePG ポッドのデバッグコンテナにSSH接続し、.
postgresql.confを修正する。レプリカモードでのクラスター初期化後、初期Pod (
postgres-1-pgbasebackup)のステータスは となりますCompleted。 最初の CloudNativePG ポッド(postgres-1)を起動する以降の試行は失敗します。 これは予期される動作です。ポッドの初期化
Clusterとその後の起動を確実に成功させるには、以下の手順を完了してください:以下のコマンドを実行して、初期のPodを特定し、そのPodにSSH接続し、ボリューム
pgdataを含むディレクトリに移動します:kubectl debug pod/postgres-1 --as-root -n instana-postgres-01cd /var/lib/postgresql/data/pgdata/各ポッド内の ファイル
postgresql.conf内の およびpg_identpg_hbaパスを変更します:パ
pg_hbaスを次のパス/var/lib/postgresql/15/main/pg_hba.confに変更してください:/var/lib/postgresql/data/pgdata/pg_hba.confパ
pg_identスを次のパス/var/lib/postgresql/15/main/pg_ident.confに変更してください:/var/lib/postgresql/data/pgdata/pg_ident.conf
ファイルの末尾に
include 'override.conf'とinclude 'custom.conf'を追加してください:echo "include 'custom.conf'" >> postgresql.conf echo "include 'override.conf'" >> postgresql.conf
ポッドを再始動します。 ポッドが起動した後、すべてのポッドは最初のポッドから複製される。
新しい cnpg-cluster を使用してください。
レプリカクラスタを無効化します:
ファイルを
cnpg-postgres.yaml修正してください:........ replica: enabled: false source: zalando-postgres ..........ファイルを
cnpg-postgres.yaml再適用してください:kubectl apply -f cnpg-postgres.yaml -n instana-postgres-01
次のように、データベースに接続します。
psql -U postgres照合順序のバージョンを更新する:
ALTER DATABASE template1 REFRESH COLLATION VERSION;
コア仕様構成を更新する:
Instana コアファイルで、以下の例に示すように設定
postgresConfigを更新してください:..................... postgresConfigs: - authEnabled: true hosts: - postgres-rw.instana-postgres-01 .....................ファイルを
core.yaml再適用してください:kubectl apply -f core.yaml -n instana-core