Migração de dados de Zalando para CloudNativePG em clusters Linux x86_64 Linux on IBM Z and LinuxONE e
Você pode transferir dados de Zalando para CloudNativePG usando o modo pg_basebackup bootstrap em um cluster que esteja operando no modo réplica. Para transferir os dados, você precisa criar o cluster de réplica CloudNativePG (destino) que replica o armazenamento de dados Zalando (origem).
Pré-requisitos
Para inicializar a partir de um cluster ativo, execute as seguintes etapas:
- Certifique-se de que o destino e a origem tenham a mesma versão principal e secundária ( PostgreSQL ).
- Configure o
streaming_replicausuário com funções de replicação e login no banco de dados ZalandoPostgreSQL.
Modificando o armazenamento de dados Zalando Postgres para migração de dados
Para modificar o armazenamento de dados Zalando Postgres para migração de dados, execute as seguintes etapas:
Conecte-se ao pod Zalando :
Veja os detalhes do pod principal:
kubectl get pods -o jsonpath={.items..metadata.name} -l application=spilo,spilo-role=master -n instana-postgresExecute comandos diretamente no pod:
kubectl exec -it <primary_pod_name> -n instana-postgresConecte-se ao banco de dados Postgres :
psql -U postgresListe as funções e crie um
streaming_replicausuário com funções de replicação e login no banco de dados Zalando :\du CREATE ROLE streaming_replica WITH REPLICATION; ALTER ROLE streaming_replica WITH LOGIN PASSWORD '<password_retrived_from_zalando>';Saia do terminal interativo PostgreSQL :
\q
Crie dois arquivos vazios chamados
custom.confeoverride.confdentro dopgdatadiretório em todos os pods, localizados ao lado dopostgresql.confarquivo.Liste os pods:
kubectl get pods -n instana-postgresExecute comandos diretamente no pod. Execute o seguinte comando em todos os pods:
kubectl exec -it <pod_name> -n instana-postgrescd /var/lib/postgresql/data/pgdata touch -f custom.conf touch -f override.conf
Saída do terminal do pod:
exit
Criando um armazenamento de dados do Postgres usando o operador Postgres do CloudNativePG para migração de dados
Instalando o operador Postgres online
Para implantar o operador CloudNativePG Postgres online, execute as seguintes etapas:
Crie o
instana-postgres-01namespace:kubectl create namespace instana-postgres-01Determine o ID do grupo do sistema de arquivos em Red Hat OpenShift.
Red Hat OpenShift exige que os grupos do sistema de arquivos estejam dentro de um intervalo de valores específico para o namespace. No cluster onde o operador CloudNativePG Kubernetes está implantado, execute o seguinte comando:
kubectl get namespace instana-postgres-01 -o yamlUma saída semelhante ao exemplo a seguir é exibida para o comando:
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-01A
openshift.io/sa.scc.supplemental-groupsanotação contém o intervalo de IDs permitidos. O intervalo1000750000/10000indica 10.000 valores que começam com o ID1000750000, portanto, especifica o intervalo de IDs de1000750000a1000760000. Neste exemplo, o valor1000750000pode ser usado como um ID de grupo do sistema de arquivos.Instale o operador CloudNativePG Postgres executando os seguintes comandos 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
Crie segredos de extração de imagem para o
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.ioObservação: antes de criar o segredo, atualize o valor <AGENT_KEY> com sua própria chave de agente.Crie um arquivo, como
postgres-secret.yaml, para acesso externo ao cluster:kind: Secret apiVersion: v1 metadata: name: instanaadmin type: Opaque stringData: username: instanaadmin password: <user_generated_password_from_zalando>Aplique o
postgres-secret.yamlarquivo:kubectl apply -f postgres-secret.yaml -n instana-postgres-01Crie um recurso
ClusterCloudNativePG noreplicamodo:Crie um arquivo, como
cnpg-postgres.yaml, da seguinte maneira: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-clientAplique o
cnpg-postgres.yamlarquivo executando o seguinte comando:kubectl apply -f cnpg-postgres.yaml -n instana-postgres-01
Conecte-se via SSH ao contêiner de depuração do primeiro pod CloudNativePG para modificar
postgresql.conf.Após a inicialização do cluster no modo réplica, o status inicial do Pod (
postgres-1-pgbasebackup) seráCompleted. As tentativas subsequentes de iniciar o primeiro Pod CloudNativePG (postgres-1) falharão. Este é um comportamento esperado.Para garantir a inicialização bem-sucedida do
Clustere o subsequente arranque do Pod, complete as seguintes etapas:Execute os seguintes comandos para descobrir o Pod inicial, conecte-se a ele via SSH e vá para o diretório que contém o
pgdatavolume:kubectl debug pod/postgres-1 --as-root -n instana-postgres-01cd /var/lib/postgresql/data/pgdata/Modifique os
pg_hbacaminhospg_idente dentro dopostgresql.confarquivo em cada pod:Altere o
pg_hbacaminho de/var/lib/postgresql/15/main/pg_hba.confpara o seguinte caminho:/var/lib/postgresql/data/pgdata/pg_hba.confAltere o
pg_identcaminho de/var/lib/postgresql/15/main/pg_ident.confpara o seguinte caminho:/var/lib/postgresql/data/pgdata/pg_ident.conf
Adicione
include 'custom.conf'einclude 'override.conf'no final do arquivo:echo "include 'custom.conf'" >> postgresql.conf echo "include 'override.conf'" >> postgresql.conf
Reinicie o pod. Após o início do pod, todos os pods são replicados a partir do primeiro pod.
Use o novo cnpg-cluster.
Desative o cluster de réplicas:
Modifique o
cnpg-postgres.yamlarquivo:........ replica: enabled: false source: zalando-postgres ..........Reaplique o
cnpg-postgres.yamlarquivo:kubectl apply -f cnpg-postgres.yaml -n instana-postgres-01
Conecte-se ao banco de dados:
psql -U postgresAtualize a versão de classificação:
ALTER DATABASE template1 REFRESH COLLATION VERSION;
Atualize a configuração das especificações principais:
No arquivo Instana Core, atualize a
postgresConfigconfiguração conforme mostrado no exemplo a seguir:..................... postgresConfigs: - authEnabled: true hosts: - postgres-rw.instana-postgres-01 .....................Reaplique o
core.yamlarquivo:kubectl apply -f core.yaml -n instana-core