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

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

Você deve concluir todas as etapas desta página. Ao concluir, 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, conclua estas etapas:

  1. Configurar o servidor externo .

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

  3. Configure a réplica do Cloud SQL .

Verifique suas configurações de replicação

Após a conclusão da configuração, certifique-se de que a réplica do Cloud SQL possa ser replicada do servidor externo.

As seguintes configurações de sincronização externa devem 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á sendo replicada

Para verificar essas configurações, abra um terminal do Cloud Shell e digite os seguintes comandos:

enrolar

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",
         "selectedObjects": "SELECTED_OBJECTS"
       }' \
     -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",
         "selectedObjects":[{"database":"db1"}, {"database":"db2"}]
       }' \
     -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 aparece assim:

  {
    "kind": "sql#externalSyncSettingErrorList"
  }
Propriedade Descrição
SYNC_MODE Certifique-se de que você consiga manter a réplica do Cloud SQL e o servidor externo sincronizados 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: Ocupa a menor quantidade de recursos computacionais no banco de dados. Esta é a velocidade mais lenta para transferência de dados.
  • optimal: fornece um desempenho equilibrado com uma carga ideal no banco de dados.
  • max: Oferece a maior velocidade para transferência de dados, mas isso pode causar um aumento de carga no banco de dados.

Observação: O valor padrão para este parâmetro é optimal porque esta configuração proporciona uma boa velocidade de transferência de dados e tem um impacto razoável no banco de dados. Recomendamos que você use este valor.

SELECTED_OBJECTS Uma lista separada por vírgulas de bancos de dados que você está migrando da instância de representação de origem para a instância de destino do Cloud SQL. Se você não usar esse parâmetro ou fornecer uma lista vazia como valor para o parâmetro, todos os bancos de dados serão migrados da origem para o destino.
PROJECT_ID A identificação do seu Google Cloud projeto.
REPLICA_INSTANCE_ID O ID da sua réplica do Cloud SQL.

Atualizar uma instância de representação de origem

Para atualizar os bancos de dados que você deseja migrar da instância de representação de origem para a instância de destino do Cloud SQL, atualize a lista de nomes de bancos de dados associados ao parâmetro selectedObjects . Se você não usar esse parâmetro ou fornecer uma lista vazia como valor para o parâmetro, todos os bancos de dados serão migrados da origem para o destino.

fonte.json

    {
      "name": "SOURCE_NAME",
      "region": "REGION",
      "databaseVersion": "DATABASE_VERSION",
      "onPremisesConfiguration": {
        "selectedObjects": "SELECTED_OBJECTS",
        "username": "USERNAME",
        "password": "PASSWORD"
      }
    }

exemplo

// example of source.json for external server that
// - initiates replication from a Cloud SQL managed import
// - doesn't use SSL/TLS

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "POSTGRES_9_6",
  "onPremisesConfiguration": {
    "selectedObjects":[{"database":"db1"}, {"database":"db3"}],
    "username": "newReplicationUser",
    "password": "525#@%*@"
  }
}
Propriedade Descrição
SOURCE_NAME O nome da instância de representação de origem.
REGION A região onde reside a instância de representação de origem.
DATABASE_VERSION A versão do banco de dados em execução no seu servidor externo. As opções são POSTGRES_9_6 , POSTGRES_10 , POSTGRES_11 , POSTGRES_12 , POSTGRES_13 , POSTGRES_14 , POSTGRES_15 , POSTGRES_16 ou POSTGRES_17 .
SELECTED_OBJECTS Uma lista atualizada, separada por vírgulas, de bancos de dados que você está migrando da instância de representação de origem para a instância de destino do Cloud SQL.
USERNAME A conta de usuário de replicação no servidor externo.
PASSWORD A senha da conta.

Em seguida, para modificar a instância de representação de origem no Cloud SQL, abra um terminal do Cloud Shell e digite os seguintes comandos:

enrolar

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data @JSON_PATH \
     -X PATCH \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/SOURCE_NAME

exemplo

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data @./source.json \
     -X PATCH \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/cloudsql-source-instance
Propriedade Descrição
JSON_PATH O caminho para o arquivo JSON que contém os dados de solicitação para o servidor externo.
PROJECT_ID A identificação do seu Google Cloud projeto.
SOURCE_NAME O nome da instância de representação de origem.

Iniciar replicação no servidor externo

Após verificar se você consegue replicar a partir do servidor externo, inicie a replicação. A velocidade de execução da replicação para o 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 taxa de transferência da rede e a natureza do seu banco de dados.

enrolar

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 Verifique se você consegue manter a réplica do Cloud SQL e o servidor externo sincronizados após a replicação ser configurada.
SKIP_VERIFICATION Se você deseja pular a etapa de verificação integrada antes de sincronizar seus dados. Este parâmetro é recomendado somente se você já tiver verificado suas 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: Ocupa a menor quantidade de recursos computacionais no banco de dados. Esta é a velocidade mais lenta para transferência de dados.
  • optimal: fornece um desempenho equilibrado com uma carga ideal no banco de dados.
  • max: Oferece a maior velocidade para transferência de dados, mas isso pode causar um aumento de carga no banco de dados.

Observação: O valor padrão para este parâmetro é optimal porque esta configuração proporciona uma boa velocidade de transferência de dados e tem um impacto razoável no banco de dados. Recomendamos que você use este valor.

PROJECT_ID A identificação do seu Google Cloud projeto.
REPLICA_INSTANCE_ID O ID da sua réplica do Cloud SQL.

Monitorar a migração

Após iniciar a replicação a partir do servidor externo, você precisará monitorá-la. Para saber mais, consulte Monitoramento de replicação . Você poderá então concluir a migração.

Solução de problemas

Considere as seguintes opções de solução de problemas:

Emitir Solução de problemas
A réplica de leitura não iniciou a replicação na criação. Provavelmente há um erro mais específico nos arquivos de log. Inspecione os logs no Cloud Logging para encontrar o erro real.
Não é possível criar réplica de leitura - erro invalidFlagValue. Um dos sinalizadores na solicitação é inválido. Pode ser um sinalizador que você forneceu explicitamente ou um que foi definido com um valor padrão.

Primeiro, verifique se o valor do sinalizador max_connections é maior ou igual ao valor no primário.

Se o sinalizador max_connections estiver definido corretamente, inspecione os logs no Cloud Logging para encontrar o erro real.

Não é possível criar réplica de leitura - erro desconhecido. Provavelmente há um erro mais específico nos arquivos de log. Inspecione os logs 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 a Service Networking API . Esta ação cria a conta de serviço necessária para continuar o processo.

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

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

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

Edite a instância para habilitar automatic storage increase .

O atraso na replicação é consistentemente alto. A carga de gravação é muito alta para a réplica suportar. O atraso na replicação ocorre quando a thread SQL em uma réplica não consegue acompanhar a thread de E/S. Alguns tipos de consultas ou cargas de trabalho podem causar atrasos temporários ou permanentes na replicação de um determinado esquema. Algumas das causas típicas de atraso na replicação são:
  • Consultas lentas na réplica. Encontre e corrija-as.
  • Todas as tabelas devem ter uma chave única/primária. Cada atualização em uma tabela sem uma chave única/primária causa varreduras completas na réplica.
  • Consultas como DELETE ... WHERE field < 50000000 causam atraso na replicação com replicação baseada em linha, pois um grande número de atualizações são acumuladas na réplica.

Algumas soluções possíveis incluem:

  • Edite a instância para aumentar o tamanho da réplica.
  • Reduza a carga no banco de dados.
  • Enviar tráfego de leitura para a réplica de leitura.
  • Indexe as tabelas.
  • Identifique e corrija consultas de gravação lenta.
  • Recrie a réplica.
Erros ao reconstruir índices no PostgreSQL 9.6. Você recebe um erro do PostgreSQL informando que precisa reconstruir um índice específico. Isso só pode ser feito na instância primária. Se você criar uma nova instância de réplica, logo receberá o mesmo erro novamente. Índices de hash não são propagados para réplicas em versões do PostgreSQL anteriores à 10.

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

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

Recrie a réplica após interromper todas as consultas em execução.

Se a instância primária e a réplica tiverem tamanhos de vCPU diferentes , poderá haver problemas de desempenho da consulta porque o otimizador de consulta leva em consideração os tamanhos de vCPU.

Para resolver esse problema, siga estas etapas:

  1. Ative o sinalizador log_duration e defina o parâmetro log_statement como ddl . Isso fornece as consultas e o tempo de execução no banco de dados. No entanto, dependendo da sua carga de trabalho, isso pode causar problemas de desempenho.
  2. Tanto na instância primária quanto na réplica de leitura, execute explain analyze para as consultas.
  3. Compare o plano de consulta e verifique se há diferenças.

Se for uma consulta específica, modifique-a. Por exemplo, você pode alterar a ordem das junções para ver se obtém melhor desempenho.

Revise seus logs de replicação

Quando você verifica suas configurações de replicação , logs são produzidos.

Você pode visualizar esses logs seguindo estas etapas:

  1. Vá para o Visualizador de Logs no Google Cloud console.

    Vá para o Visualizador de Logs

  2. Selecione a réplica do Cloud SQL no menu suspenso Instância .
  3. Selecione o arquivo de log 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 externo é configurado para permitir conexões do 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.

O que vem a seguir