Migrazione dei dati da Zalando a CloudNativePG su cluster Linux on Power ( ppc64le )
È possibile trasferire i dati da Zalando a CloudNativePG utilizzando la pg_basebackup modalità bootstrap all'interno di un cluster che opera in modalità replica. Per trasferire i dati, è necessario creare il cluster replica (destinazione) CloudNativePG che replica l'archivio dati (origine) Zalando.
Prerequisiti
Per eseguire il bootstrap da un cluster live, completare i seguenti passaggi:
- Assicurarsi che la destinazione e l'origine abbiano la stessa versione principale di PostgreSQL.
- Configurare
streaming_replical'utente con i ruoli di replica e accesso nel database Zalando PostgreSQL.
Modifica dell'archivio dati Zalando Postgres per la migrazione dei dati
Per modificare l'archivio dati Zalando Postgres per la migrazione dei dati, completare i seguenti passaggi:
Connettiti al pod Zalando :
Visualizza i dettagli del pod primario:
kubectl get pods -o jsonpath={.items..metadata.name} -l application=spilo,spilo-role=master -n instana-postgresEsegui i comandi direttamente nel pod:
kubectl exec -it <primary_pod_name> -n instana-postgresConnettiti al database dell' Postgres :
psql -U postgresElenca i ruoli e crea un
streaming_replicautente con ruoli di replica e accesso nel database Zalando :\du CREATE ROLE streaming_replica WITH REPLICATION; ALTER ROLE streaming_replica WITH LOGIN PASSWORD '<password_retrived_from_zalando>';Esci dal terminale interattivo dell' PostgreSQL :
\q
Crea due file vuoti denominati
custom.confeoverride.confall'interno dellapgdatadirectory su tutti i pod, che si trovano accanto alpostgresql.conffile.Elenca i pod:
kubectl get pods -n instana-postgresEsegui i comandi direttamente sul pod. Esegui il seguente comando su tutti i pod:
kubectl exec -it <pod_name> -n instana-postgrescd /var/lib/postgresql/data/pgdata touch -f custom.conf touch -f override.conf
Uscita dal terminal pod:
exit
Creazione di un archivio dati di tipo " Postgres " utilizzando l'operatore " CloudNativePGPostgres " per la migrazione dei dati
Installazione online dell'operatore Postgres
Per distribuire online l'operatore Postgres dell' CloudNativePG, completare i seguenti passaggi:
Crea lo
instana-postgres-01spazio dei nomi:kubectl create namespace instana-postgres-01Determinare l'ID del gruppo del file system su Red Hat OpenShift.
Red Hat OpenShift richiede che i gruppi del file system rientrino in un intervallo di valori specifico per lo spazio dei nomi. Sul cluster in cui è distribuito l'operatore CloudNativePG Kubernetes, eseguire il comando seguente:
kubectl get namespace instana-postgres-01 -o yamlPer il comando viene visualizzato un output simile al seguente esempio:
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-01L'annotazione
openshift.io/sa.scc.supplemental-groupscontiene l'intervallo degli ID consentiti. L'intervallo1000750000/10000indica 10.000 valori che iniziano con l'ID1000750000, quindi specifica l'intervallo di ID da1000750000a1000760000. In questo esempio, il valore1000750000potrebbe essere utilizzato come ID di gruppo del file system.Installare l'operatore Postgres dell' CloudNativePG eseguendo i seguenti comandi Helm :
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
Crea segreti di pull delle immagini per il
instana-postgres-01namespace:kubectl create secret docker-registry instana-registry -n instana-postgres-01 \ --docker-username=_ \ --docker-password=<AGENT_KEY> \ --docker-server=artifact-public.instana.ioNota: prima di creare il segreto, aggiorna il valore <AGENT_KEY> con la tua chiave agente.Creare un file, ad esempio
postgres-secret.yaml, per l'accesso al cluster esterno:kind: Secret apiVersion: v1 metadata: name: instanaadmin type: Opaque stringData: username: instanaadmin password: <user_generated_password_from_zalando>Applica il
postgres-secret.yamlfile:kubectl apply -f postgres-secret.yaml -n instana-postgres-01Crea una risorsa
ClusterCloudNativePG inreplicamodalità:Crea un file, ad esempio
cnpg-postgres.yaml, come segue: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-clientApplica il
cnpg-postgres.yamlfile eseguendo il seguente comando:kubectl apply -f cnpg-postgres.yaml -n instana-postgres-01
Eseguire SSH nel contenitore di debug del primo pod dell' CloudNativePG e per modificare
postgresql.conf.Dopo l'inizializzazione del cluster in modalità replica, lo stato iniziale del Pod (
postgres-1-pgbasebackup) saràCompleted. I tentativi successivi di avviare il primo pod CloudNativePG (postgres-1) falliranno. Questo è un comportamento previsto.Per garantire il corretto avvio del
Clustere il successivo avvio del Pod, completare i seguenti passaggi:Esegui i seguenti comandi per individuare il Pod iniziale, accedervi tramite SSH e vai alla directory che contiene il
pgdatavolume:kubectl debug pod/postgres-1 --as-root -n instana-postgres-01cd /var/lib/postgresql/data/pgdata/Modifica i percorsi
pg_hbapg_idente all'interno delpostgresql.conffile in ogni pod:Modifica il
pg_hbapercorso da/var/lib/postgresql/15/main/pg_hba.confal seguente percorso:/var/lib/postgresql/data/pgdata/pg_hba.confModifica il
pg_identpercorso da/var/lib/postgresql/15/main/pg_ident.confal seguente percorso:/var/lib/postgresql/data/pgdata/pg_ident.conf
Aggiungi
include 'custom.conf'einclude 'override.conf'alla fine del file:echo "include 'custom.conf'" >> postgresql.conf echo "include 'override.conf'" >> postgresql.conf
Riavvia il pod. Dopo l'avvio del pod, tutti i pod vengono replicati dal primo pod.
Utilizza il nuovo cnpg-cluster.
Disabilita il cluster di replica:
Modifica il
cnpg-postgres.yamlfile:........ replica: enabled: false source: zalando-postgres ..........Riapplicare il
cnpg-postgres.yamlfile:kubectl apply -f cnpg-postgres.yaml -n instana-postgres-01
Connettiti al database:
psql -U postgresAggiorna la versione di collazione:
ALTER DATABASE template1 REFRESH COLLATION VERSION;
Aggiorna la configurazione delle specifiche di base:
Nel file Instana Core, aggiornare la
postgresConfigconfigurazione come mostrato nell'esempio seguente:..................... postgresConfigs: - authEnabled: true hosts: - postgres-rw.instana-postgres-01 .....................Riapplicare il
core.yamlfile:kubectl apply -f core.yaml -n instana-core