Usar uma importação gerenciada para configurar a replicação de bancos de dados externos

Nesta página, descrevemos como configurar e usar uma importação gerenciada para dados ao replicar de um servidor externo para o Cloud SQL.

É necessário concluir todas as etapas nesta página. Quando terminar, você poderá administrar e monitorar a instância de representação de origem da mesma forma que faria com qualquer outra instância do Cloud SQL.

Antes de começar

Antes de começar, siga estas etapas:

  1. Configure o servidor externo.

  2. Crie a instância de representação de origem.

  3. Configure a réplica do Cloud SQL.

Verificar as configurações de replicação

Após a conclusão da configuração, verifique se a réplica do Cloud SQL pode ser replicada do servidor externo.

As configurações de sincronização externa a seguir precisam estar corretas.

  • Conectividade entre a réplica do Cloud SQL e o servidor externo
  • Privilégios de usuário de replicação
  • Compatibilidade de versões
  • A réplica do Cloud SQL ainda não está replicando

Para verificar essas configurações, abra um terminal do Cloud Shell e insira estes comandos:

curl

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "SYNC_MODE",
         "syncParallelLevel": "SYNC_PARALLEL_LEVEL"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/verifyExternalSyncSettings

exemplo

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "online",
         "syncParallelLevel": "optimal"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/myproject/instances/myreplica/verifyExternalSyncSettings

Essas chamadas retornam uma lista do tipo sql#externalSyncSettingErrorList.

Se a lista estiver vazia, não há erros. Uma resposta sem erros é exibida desta forma:

  {
    "kind": "sql#externalSyncSettingErrorList"
  }
Propriedade Descrição
SYNC_MODE Garante que você possa manter a réplica do Cloud SQL e o servidor externo em sincronia após a configuração da replicação. Os modos de sincronização incluem EXTERNAL_SYNC_MODE_UNSPECIFIED, ONLINE e OFFLINE.
SYNC_PARALLEL_LEVEL

Verifique a configuração que controla a velocidade com que os dados das tabelas de um banco de dados são transferidos. Os seguintes valores estão disponíveis:

  • min: usa a menor quantidade de recursos de computação no banco de dados. Essa é a velocidade mais lenta para a transferência de dados.
  • optimal: Proporciona um desempenho equilibrado com uma carga ideal no banco de dados.
  • max: Fornece a velocidade mais alta para a transferência de dados, mas isso pode causar um aumento da carga no banco de dados.

Observação:o valor padrão desse parâmetro é optimal, porque essa configuração fornece uma boa velocidade para transferir os dados e tem um impacto razoável no banco de dados. Recomendamos que você use esse valor padrão.

PROJECT_ID o ID do seu projeto do Google Cloud;
REPLICA_INSTANCE_ID O código da sua réplica do Cloud SQL.

Iniciar replicação no servidor externo

Depois de verificar se é possível replicar usando o servidor externo, inicie a replicação. A velocidade para executar a replicação do processo de importação inicial é de até 500 GB por hora. No entanto, essa velocidade pode variar de acordo com a camada da máquina, o tamanho do disco de dados, a capacidade da rede e a natureza do banco de dados.

curl

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "SYNC_MODE",
         "skipVerification": "SKIP_VERIFICATION",
         "syncParallelLevel": "SYNC_PARALLEL_LEVEL"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/startExternalSync

exemplo

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "online",
         "syncParallelLevel": "optimal"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
Propriedade Descrição
SYNC_MODE Garante que você possa manter a réplica do Cloud SQL e o servidor externo em sincronia após a configuração da replicação.
SKIP_VERIFICATION Define se a etapa de verificação integrada deve ser ignorada antes de sincronizar seus dados. Esse parâmetro é recomendado apenas se você já tiver verificado as configurações de replicação.
SYNC_PARALLEL_LEVEL

Forneça uma configuração que controle a velocidade com que os dados das tabelas de um banco de dados são transferidos. Os seguintes valores estão disponíveis:

  • min: usa a menor quantidade de recursos de computação no banco de dados. Essa é a velocidade mais lenta para a transferência de dados.
  • optimal: Proporciona um desempenho equilibrado com uma carga ideal no banco de dados.
  • max: Fornece a velocidade mais alta para a transferência de dados, mas isso pode causar um aumento da carga no banco de dados.

Observação:o valor padrão desse parâmetro é optimal, porque essa configuração fornece uma boa velocidade para transferir os dados e tem um impacto razoável no banco de dados. Recomendamos que você use esse valor padrão.

PROJECT_ID o ID do seu projeto do Google Cloud;
REPLICA_INSTANCE_ID O código da sua réplica do Cloud SQL.

Monitorar a migração

Depois de iniciar a replicação pelo servidor externo, é necessário monitorar a replicação. Para saber mais, consulte Como monitorar a replicação. Em seguida, conclua a migração.

Resolver problemas

Considere estas opções de solução de problemas:

Problema Solução de problemas
A réplica de leitura não começou a ser replicada na criação. Provavelmente há um erro mais específico nos arquivos de registro. Inspecione os registros no Cloud Logging para encontrar o erro real.
Não foi possível criar a réplica de leitura: erro invalidFlagValue. Uma das sinalizações na solicitação é inválida. Pode ser uma sinalização fornecida explicitamente ou uma que foi definida como um valor padrão.

Primeiro, verifique se o valor da sinalização max_connections é maior ou igual ao valor na instância principal.

Se a sinalização max_connections estiver definida corretamente, inspecione os registros no Cloud Logging para encontrar o erro real.

Não foi possível criar a réplica de leitura: erro desconhecido. Provavelmente há um erro mais específico nos arquivos de registro. Inspecione os registros no Cloud Logging para encontrar o erro real.

Se o erro for: set Service Networking service account as servicenetworking.serviceAgent role on consumer project, desative e reative o Service Networking API. Essa ação cria a conta de serviço necessária para continuar com o processo.

O disco está cheio. O tamanho do disco da instância principal pode ficar cheio durante a criação da réplica. Edite a instância principal com upgrade para um tamanho de disco maior.
O espaço em disco aumenta significativamente. Um slot que não está sendo usado ativamente para rastrear dados faz com que o PostgreSQL mantenha os segmentos de WAL indefinidamente, fazendo com que o espaço em disco aumente indefinidamente. Se você usar os recursos de replicação e decodificação lógica no Cloud SQL, os slots de replicação serão criados e descartados automaticamente. Os slots de replicação não utilizados podem ser detectados consultando a visualização do sistema pg_replication_slots e filtrando a coluna active. Os slots não utilizados podem ser descartados para remover segmentos WAL usando o comando pg_drop_replication_slot.
A instância da réplica está usando memória demais. A réplica usa memória temporária para armazenar em cache as operações de leitura solicitadas com frequência, o que pode fazer com que ela use mais memória do que a instância principal.

Reinicie a instância da réplica para recuperar o espaço de memória temporário.

Replicação interrompida. O limite máximo de armazenamento foi atingido e o aumento automático de armazenamento não está ativado.

Edite a instância para ativar automatic storage increase.

O atraso da replicação é consistentemente alto. A carga de gravação é alta demais para a réplica processar. O atraso de replicação ocorre quando a linha de execução SQL em uma réplica não consegue acompanhar a linha de execução de E/S. Alguns tipos de consultas ou cargas de trabalho podem causar um atraso de replicação temporário ou permanente para um determinado esquema. Estas são algumas das causas comuns do atraso de replicação:
  • Consultas lentas na réplica. Encontre e corrija esses problemas.
  • Todas as tabelas precisam ter uma chave primária/exclusiva. Cada atualização em uma tabela sem uma chave exclusiva/principal resulta em varreduras completas na tabela da réplica.
  • Consultas como DELETE ... WHERE field < 50000000 causam atraso de replicação com base em linha, já que um grande número de atualizações é acumulado na réplica.

Algumas soluções possíveis incluem:

  • Editar a instância para aumentar o tamanho da réplica.
  • Reduza a carga no banco de dados.
  • Envia o tráfego de leitura para a réplica de leitura.
  • Inclua as tabelas em um índice.
  • Identifique e corrija consultas de gravação lentas.
  • Recrie a réplica.
Erros ao recriar índices no PostgreSQL 9.6. Você recebe um erro do PostgreSQL informando que é necessário recriar um índice específico. Isso só pode ser feito na instância principal. Se você criar uma nova instância de réplica, em breve receberá o mesmo erro novamente. Os índices de hash não são propagados para réplicas nas versões do PostgreSQL abaixo de 10.

Se você precisar usar índices de hash, faça upgrade para o PostgreSQL 10+. Caso contrário, se você também quiser usar réplicas, não use índices de hash no PostgreSQL 9.6.

A consulta na instância principal está sempre em execução. Após a criação de uma réplica, a consulta SELECT * from pg_stat_activity where state = 'active' and pid = XXXX and username = 'cloudsqlreplica' deve ser executada continuamente em sua instância principal.
A criação da réplica falha com o tempo limite. Transações não confirmadas de longa duração na instância primária podem causar falha na criação da réplica de leitura.

Recrie a réplica depois de interromper todas as consultas em execução.

Se a instância principal e a réplica tiverem tamanhos de vCPU diferentes, poderá haver problemas de desempenho de consultas porque o otimizador de consultas considera os tamanhos de vCPU.

Para resolver esse problema, siga estas etapas:

  1. Ative a flag log_duration e defina o parâmetro log_statement como ddl. Assim, você terá acesso às consultas e ao ambiente de execução no banco de dados. No entanto, dependendo da carga de trabalho, isso pode causar problemas de desempenho.
  2. Na instância principal e na réplica de leitura, execute explain analyze para as consultas.
  3. Compare o plano de consulta e verifique as diferenças.

Se for uma consulta específica, modifique a consulta. Por exemplo, é possível mudar a ordem das mesclagens para ver se o desempenho melhora.

Analisar os registros de replicação

Ao verificar as configurações de replicação, os registros são gerados.

Para visualizar esses registros, siga estas etapas:

  1. Acesse o visualizador de registros no console do Google Cloud:

    Acessar o Visualizador de registros

  2. Selecione a réplica do Cloud SQL na lista suspensa Instância.
  3. Selecione o arquivo de registro replication-setup.log.

Se a réplica do Cloud SQL não conseguir se conectar ao servidor externo, confirme o seguinte:

  • Qualquer firewall no servidor do banco de dados de origem é configurado para permitir conexões usando o endereço IP de saída da réplica do Cloud SQL.
  • Sua configuração SSL/TLS está correta.
  • Seu usuário, host e senha de replicação estão corretos.

A seguir