Migration von Daten von Zalando zu CloudNativePG auf Linux on Power ( ppc64le ) -Clustern
Sie können Daten von Zalando nach CloudNativePG übertragen, indem Sie den pg_basebackup Bootstrap-Modus innerhalb eines Clusters verwenden, der im Replikationsmodus betrieben wird. Um die Daten zu übertragen, müssen Sie den Replikationscluster „ CloudNativePG “ (Ziel) erstellen, der den Datenspeicher „ Zalando “ (Quelle) repliziert.
Voraussetzungen
Um von einem Live-Cluster zu booten, führen Sie die folgenden Schritte aus:
- Stellen Sie sicher, dass Ziel und Quelle dieselbe Haupt PostgreSQL -Version haben.
- Richten Sie den
streaming_replicaBenutzer mit Replikations- und Anmelderollen in der Datenbank „ ZalandoPostgreSQL “ ein.
Ändern des Datenspeichers „ ZalandoPostgres “ für die Datenmigration
Um den Datenspeicher „ Zalando “ ( Postgres ) für die Datenmigration zu ändern, führen Sie die folgenden Schritte aus:
Verbinden Sie sich mit dem Pod „ Zalando “:
Zeigen Sie die Details des primären Pods an:
kubectl get pods -o jsonpath={.items..metadata.name} -l application=spilo,spilo-role=master -n instana-postgresBefehle direkt im Pod ausführen:
kubectl exec -it <primary_pod_name> -n instana-postgresVerbindung zur Datenbank „ Postgres “ herstellen:
psql -U postgresListen Sie die Rollen auf und erstellen Sie einen
streaming_replicaBenutzer mit Replikations- und Anmelderollen in der Datenbank „ Zalando “:\du CREATE ROLE streaming_replica WITH REPLICATION; ALTER ROLE streaming_replica WITH LOGIN PASSWORD '<password_retrived_from_zalando>';Beenden Sie das interaktive Terminal „ PostgreSQL “:
\q
Erstellen Sie zwei leere Dateien mit den Namen
custom.confundoverride.confimpgdataVerzeichnis auf allen Pods, die sich neben derpostgresql.confDatei befinden.Listen Sie die Pods auf:
kubectl get pods -n instana-postgresBefehle direkt auf dem Pod ausführen. Führen Sie den folgenden Befehl auf allen Pods aus:
kubectl exec -it <pod_name> -n instana-postgrescd /var/lib/postgresql/data/pgdata touch -f custom.conf touch -f override.conf
Ausgang aus dem Pod-Terminal:
exit
Erstellen eines „ Postgres “-Datenspeichers mithilfe des „ CloudNativePG “ „ Postgres “-Operators für die Datenmigration
Postgres -Operator online installieren
Um den „ CloudNativePGPostgres “-Operator online bereitzustellen, führen Sie die folgenden Schritte aus:
Erstellen Sie den
instana-postgres-01Namespace:kubectl create namespace instana-postgres-01Bestimmen Sie die Dateisystem-Gruppen-ID auf Red Hat OpenShift.
Red Hat OpenShift erfordert, dass Dateisystemgruppen innerhalb eines für den Namespace spezifischen Wertebereichs liegen. Führen Sie auf dem Cluster, auf dem der Operator „ CloudNativePGKubernetes ” bereitgestellt ist, den folgenden Befehl aus:
kubectl get namespace instana-postgres-01 -o yamlFür den Befehl wird eine Ausgabe ähnlich dem folgenden Beispiel angezeigt:
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-01Die
openshift.io/sa.scc.supplemental-groupsAnmerkung enthält den Bereich der zulässigen IDs. Der Bereich1000750000/10000bezeichnet 10.000 Werte, die mit1000750000der ID beginnen, und gibt somit den Bereich der IDs von1000750000bis1000760000an. In diesem Beispiel könnte der1000750000Wert als Dateisystem-Gruppen-ID verwendet werden.Installieren Sie den Operator „ CloudNativePGPostgres “, indem Sie die folgenden Befehle in der Befehlszeile „ Helm “ ausführen:
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
Erstellen Sie Image-Pull-Geheimnisse für den
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.ioHinweis: Bevor Sie das Geheimnis erstellen, aktualisieren Sie den Wert <AGENT_KEY> mit Ihrem eigenen Agentenschlüssel.Erstellen Sie eine Datei, z. B.
postgres-secret.yaml, für den externen Clusterzugriff:kind: Secret apiVersion: v1 metadata: name: instanaadmin type: Opaque stringData: username: instanaadmin password: <user_generated_password_from_zalando>Wenden Sie die
postgres-secret.yamlDatei an:kubectl apply -f postgres-secret.yaml -n instana-postgres-01Erstellen Sie eine Ressource
Cluster„ CloudNativePG “ imreplicaModus:Erstellen Sie eine Datei, z. B.
cnpg-postgres.yaml, wie folgt: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-clientWenden Sie die
cnpg-postgres.yamlDatei an, indem Sie den folgenden Befehl ausführen:kubectl apply -f cnpg-postgres.yaml -n instana-postgres-01
SSH in den Debug-Container des ersten Pods „ CloudNativePG “, um. zu ändern
postgresql.conf.Nach der Initialisierung des Clusters im Replikationsmodus lautet der anfängliche
CompletedPod-Status (postgres-1-pgbasebackup). Nachfolgende Versuche, den ersten Pod „ CloudNativePGpostgres-1“ zu starten, schlagen fehl. Dies entspricht dem erwarteten Verhalten.Um die erfolgreiche Initialisierung des
Clusterund den anschließenden Start des Pods sicherzustellen, führen Sie die folgenden Schritte aus:Führen Sie die folgenden Befehle aus, um den ursprünglichen Pod zu ermitteln, sich per SSH darin anzumelden und zu dem Verzeichnis zu wechseln, das das
pgdataVolume enthält:kubectl debug pod/postgres-1 --as-root -n instana-postgres-01cd /var/lib/postgresql/data/pgdata/Ändern Sie die Pfade
pg_hbapg_identund in derpostgresql.confDatei in jedem Pod:Ändern Sie den
pg_hbaPfad von/var/lib/postgresql/15/main/pg_hba.confzu folgendem Pfad:/var/lib/postgresql/data/pgdata/pg_hba.confÄndern Sie den
pg_identPfad von/var/lib/postgresql/15/main/pg_ident.confzu folgendem Pfad:/var/lib/postgresql/data/pgdata/pg_ident.conf
Fügen Sie am Ende
include 'custom.conf'include 'override.conf'der Datei und hinzu:echo "include 'custom.conf'" >> postgresql.conf echo "include 'override.conf'" >> postgresql.conf
Starten Sie den Pod erneut. Nachdem der Pod gestartet ist, replizieren sich alle Pods vom ersten Pod aus.
Verwenden Sie den neuen cnpg-Cluster.
Deaktivieren Sie den Replikationscluster:
Ändern Sie die
cnpg-postgres.yamlDatei:........ replica: enabled: false source: zalando-postgres ..........Die
cnpg-postgres.yamlDatei erneut anwenden:kubectl apply -f cnpg-postgres.yaml -n instana-postgres-01
Stellen Sie eine Verbindung zur Datenbank her:
psql -U postgresAktualisieren Sie die Sortierversion:
ALTER DATABASE template1 REFRESH COLLATION VERSION;
Aktualisieren Sie die Kernspezifikationskonfiguration:
Aktualisieren Sie in Ihrer Datei „ Instana Core“ die
postgresConfigKonfiguration wie im folgenden Beispiel gezeigt:..................... postgresConfigs: - authEnabled: true hosts: - postgres-rw.instana-postgres-01 .....................Die
core.yamlDatei erneut anwenden:kubectl apply -f core.yaml -n instana-core