Gerenciar réplicas de leitura

Nesta página, descrevemos as operações de réplica de leitura. Essas operações incluem desativar e ativar a replicação. Além disso, esta página descreve como:

  • Promover uma réplica a uma instância autônoma
  • Configurar a replicação paralela

Para mais informações sobre como trabalhar com réplicas de leitura, consulte Replicação no Cloud SQL.

Desativar a replicação

Por padrão, uma réplica começa com a replicação ativada. No entanto, é possível desativar a replicação, por exemplo, para depurar ou analisar o estado de uma instância. Ao terminar, reative a replicação explicitamente. Ao desativar ou reativar a replicação, a réplica é reiniciada.

Quando a replicação é desativada, isso não interrompe a instância da réplica: ela se torna uma instância somente leitura que não é mais replicada da instância principal. Você continuará sendo cobrado pela instância. É possível reativar a replicação na réplica desativada, excluí-la ou promovê-la a uma instância autônoma. Não é possível interromper a réplica.

Para desativar a replicação:

Console

  1. Acesse a página "Instâncias" do Cloud SQL no Console do Google Cloud.

    Acesse a página "Instâncias" do Cloud SQL

  2. Abra a instância de uma réplica clicando em seu nome.
  3. Clique em Desativar replicação na barra de botões.
  4. Clique em OK.

gcloud

gcloud sql instances patch [REPLICA_NAME] --no-enable-database-replication

REST v1beta4

Para executar esse comando cURL em um prompt de linha de comando, adquira um token de acesso. Basta usar o comando gcloud auth print-access-token. Use também o APIs Explorer na página "Instâncias: patch" para enviar a solicitação da API REST.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • project-id: o ID do projeto
  • replica-name: o nome da instância da réplica

Método HTTP e URL:

PATCH https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name

Corpo JSON da solicitação:

{
  "settings":
  {
    "databaseReplicationEnabled": "False"
  }
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

Como ativar a replicação

Se uma réplica não for replicada por muito tempo, ela demorará mais para alcançar a instância principal. Nesse caso, exclua a réplica e crie uma nova.

Para ativar a replicação:

Console

  1. Acesse a página "Instâncias" do Cloud SQL no Console do Google Cloud.

    Acesse a página "Instâncias" do Cloud SQL

  2. Selecione uma instância de réplica clicando no nome dela.
  3. Clique em Ativar replicação na barra de botões.
  4. Clique em OK.

gcloud

gcloud sql instances patch [REPLICA_NAME] --enable-database-replication

REST v1beta4

Para executar esse comando cURL em um prompt de linha de comando, adquira um token de acesso. Basta usar o comando gcloud auth print-access-token. Use também o APIs Explorer na página "Instâncias: patch" para enviar a solicitação da API REST.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • project-id: o ID do projeto
  • replica-name: o nome da instância da réplica

Método HTTP e URL:

PATCH https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name

Corpo JSON da solicitação:

{
  "settings":
  {
    "databaseReplicationEnabled": "True"
  }
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

Como promover uma réplica

Promover uma réplica de leitura interrompe a replicação e converte a instância em uma instância primária independente do Cloud SQL com recursos de leitura e gravação. Não é possível desfazer essa ação.

Antes de promover uma réplica de leitura, se a primária ainda estiver disponível e atendendo aos clientes, interrompa todas as gravações na instância principal e verifique o status da replicação da réplica. (Siga as instruções na guia Cliente psql). Verifique se a réplica está replicando e aguarde até que o atraso da replicação relatado pela métrica replay_lag seja 0. Caso contrário, a instância recém-promovida pode não ter algumas das transações confirmadas na instância principal.

Para promover uma réplica a uma instância autônoma:

Console

  1. Acesse a página "Instâncias" do Cloud SQL no Console do Google Cloud.

    Acesse a página "Instâncias" do Cloud SQL

  2. Selecione uma instância de réplica clicando no nome dela.
  3. Clique em Promover réplica na barra de botões.
  4. Clique em OK.

gcloud

gcloud sql instances promote-replica [REPLICA_NAME]
  

REST v1beta4

Para executar esse comando cURL em um prompt de linha de comando, adquira um token de acesso. Basta usar o comando gcloud auth print-access-token. Use também o APIs Explorer na página "Instâncias: promoteReplica" para enviar a solicitação da API REST.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • project-id: o ID do projeto
  • replica-name: o nome da instância da réplica

Método HTTP e URL:

POST https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name/promoteReplica

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

Confirme se a instância promovida está configurada corretamente. Especificamente, ative backups automatizados e considere configurar a instância para alta disponibilidade, se necessário.

Verificar o status da replicação

Ao visualizar uma instância de réplica usando o Console do Google Cloud ou fazer login na instância usando um cliente de administração, você recebe detalhes sobre a replicação, incluindo o status e as métricas. Ao usar a ferramenta de linha de comando gcloud, você recebe um breve resumo da configuração da replicação.

As métricas a seguir estão disponíveis para instâncias de réplica. Saiba mais sobre outras métricas disponíveis para todas as instâncias, incluindo instâncias que não são de réplica.

MétricaDescrição
Estado de replicação
(cloudsql.googleapis.com/database/replication/state)

Indica se a replicação está transmitindo registros ativamente da primária para a réplica. Valores possíveis:

  • Running
  • Stopped
  • Error

Essa métrica mostrará Running se:

  1. pg_catalog.pg_stat_wal_receiver informar um status de "streaming", e
  2. se pg_catalog.pg_is_wal_replay_paused() mostrar "f" (falso).

Para mais informações, consulte o Coletor de estatísticas e as Funções de administração do sistema (ambos em inglês) no Manual de referência do PostgreSQL.

Bytes de atraso
(cloudsql.googleapis.com/database/postgresql/replication/replica_byte_lag)

Informa o número de bytes pelo qual a réplica de leitura atrasa a primária. Quatro séries temporais são produzidas para cada réplica, mostrando o número de bytes no registro de gravação antecipada da primária que ainda não foi...

  • sent_location: ...enviado para a réplica
  • write_location: ...gravado no disco pela réplica
  • flush_location: ...liberado para o disco pela réplica
  • replay_location: ...reproduzido pela réplica

Essas métricas têm finalidades diferentes. por exemplo: replay_location fornece uma indicação do atraso da replicação, ou seja, o número de transações confirmadas na primária que ainda não foram aplicadas à réplica, enquantoflush_location fornece uma indicação do número de transações que não foram gravadas de maneira durável na instância de réplica.

Essas métricas são calculadas comparando pg_catalog.pg_current_wal_lsn() para um dos seguintes campos de pg_stat_replication: sent_lsn, write_lsn, flush_lsn ou replay_lsn. Para mais informações, consulte o coletor de estatísticas no Manual de referência do PostgreSQL.

Máx. de bytes de atraso
(cloudsql.googleapis.com/database/postgresql/external_sync/max_replica_byte_lag)

Para uma réplica de uma instância primária externa, informa o atraso máximo de replicação (em bytes) em todos os bancos de dados que estão sendo replicados para essa instância. Para cada banco de dados, isso é definido como o número de bytes no registro de gravação antecipada da primária que não foram confirmados para serem recebidos pela réplica.

Essa métrica é calculada por meio do envio de uma consulta à primária para comparar o pg_catalog.pg_current_wal_lsn() ao valor de confirmed_flush_lsn de cada banco de dados replicado para esta instância de réplica. Para mais informações, consulte o coletor de estatísticas no Manual de referência do PostgreSQL.

Para verificar o status da replicação:

Console

O Cloud SQL informa a métrica Replication State no painel padrão de monitoramento do Cloud SQL.

Para visualizar outras métricas de réplicas regionais e entre regiões, além de réplicas de servidores externos, crie um painel personalizado e adicione as métricas que você quer monitorar a ele:

  1. Acesse a página "Monitoramento".
  2. Selecione a guia Painéis.
  3. Clique em + CRIAR PAINEL na barra de botões na parte superior da página.
  4. Dê um nome ao painel e clique em OK.
  5. Clique em ADICIONAR GRÁFICO no canto superior direito da página.
  6. Para Tipo de recurso, selecione Cloud SQL Database.
  7. Execute um dos seguintes procedimentos:
    1. Para monitorar a métrica do estado de replicação: no campo Selecione uma métrica, digite Replication state. Em seguida, adicione um filtro para state = "Running". O gráfico mostrará 1 se a replicação estiver em execução e 0 se não estiver.
    2. Para monitorar o atraso da replicação, em bytes, de uma réplica de leitura: no campo Selecione uma métrica, digite Lag Bytes. Em seguida, adicione um filtro em replica_lag_type = "replay_location". O gráfico mostra o número de bytes associados a transações relacionadas à primária, mas que ainda não foram repetidas na réplica.
    3. Para monitorar o atraso da replicação, em bytes, de uma réplica de uma instância primária externa: no campo Selecione uma métrica, digite Max Lag Bytes. O gráfico mostra o número de bytes associados a transações relacionadas à primária, mas que ainda não foram confirmados pela réplica.

gcloud

Na instância da réplica, verifique o status da replicação com:

gcloud sql instances describe [REPLICA_NAME]

Na saída, procure as propriedades databaseReplicationEnabled e masterInstanceName.

Para uma instância principal, verifique se há réplicas com:

gcloud sql instances describe [PRIMARY_INSTANCE_NAME]

Na saída, procure a propriedade replicaNames.

Cliente psql

Algumas métricas de status de replicação são produzidas pela primária, e outras são produzidas pela réplica. Para as etapas a seguir, conecte-se à réplica ou à instância principal (conforme indicado abaixo) com um cliente PostgreSQL.

Para informações, consulte Opções de conexão para aplicativos externos.

  1. Para verificar o status da réplica na instância principal:
    select * from pg_stat_replication;
    Procure as métricas a seguir na saída do comando:
    • client_addr: o endereço IP da instância da réplica.
    • state: indica se a linha de execução SQL de eventos no registro de redirecionamento está em execução. O valor é streaming quando a replicação é iniciada.
    • replay_lag: o número de bytes que a linha de execução de réplica SQL tem a menos em comparação com a instância principal. O valor é O ou um pequeno número de bytes.
  2. Para verificar o status da réplica na instância da réplica:
    select * from pg_stat_wal_receiver;

    Procure as seguintes métricas na saída do comando:

    • sender_host: o endereço IP da instância principal.
    • status: indica se a linha de execução SQL de eventos no registro de redirecionamento está em execução. O valor é streaming quando a replicação é iniciada.
    • last_msg_send_time e last_msg_receipt_time: a diferença entre esses dois carimbos de data/hora é o tempo de atraso

    Para verificar se a replicação foi pausada:

    select pg_is_wal_replay_paused();

    O valor será t se a replicação estiver pausada. Caso contrário, o valor será f.

    Para verificar se há transações que foram recebidas da primária, mas ainda não aplicadas:

    # for PostgreSQL 9.6
    select pg_catalog.pg_last_xlog_receive_location(), pg_catalog.pg_last_xlog_replay_location();
    # for PostgreSQL 10 and above
    select pg_catalog.pg_last_wal_receive_lsn(), pg_catalog.pg_last_wal_replay_lsn();

    Se os dois valores forem iguais, significará que a réplica processou todas as transações recebidas da primária.

Para mais detalhes sobre a saída desses comandos, consulte a documentação do PostgreSQL sobre o coletor de estatísticas.

Solução de problemas

Clique nos links da tabela para ver detalhes:

Para este problema... O problema pode ser... Tente o seguinte...
A réplica de leitura não começou a ser replicada na criação. Há muitas causas possíveis. Verifique os registros para encontrar mais informações.
Não foi possível criar a réplica de leitura: erro invalidFlagValue Uma das sinalizações fornecidas explicitamente ou por padrão é inválida. Verifique os valores e registros da sinalização para encontrar mais informações.
Não foi possível criar a réplica de leitura: erro desconhecido. Há muitas causas possíveis. Verifique os registros para encontrar mais informações.
O disco está cheio. O tamanho do disco da instância principal pode ficar cheio durante a criação da réplica. Faça upgrade da instância principal para um tamanho de disco maior.
A instância da réplica está usando memória demais. As réplicas podem armazenar em cache as operações de leitura solicitadas com frequência. Reinicie a instância da réplica para recuperar o espaço de memória temporário.
Replicação interrompida. O espaço de armazenamento máximo foi atingido e o aumento automático de armazenamento não está ativado. Ative o aumento automático de armazenamento.
O atraso da replicação é consistentemente alto. muitas causas diferentes possíveis. Veja algumas dicas neste link.

A réplica de leitura não começou a ser replicada na criação

A réplica de leitura não começou a ser replicada na criação.

Possível problema

Provavelmente há um erro mais específico nos arquivos de registro.

O que você pode tentar

Inspecione os registros no Cloud Logging para encontrar o erro real.


Não foi possível criar a réplica de leitura: erro invalidFlagValue

Não foi possível criar a réplica de leitura: invalidFlagValue.

Possível problema

Uma das sinalizações na solicitação é inválida. Pode ser uma sinalização fornecida explicitamente ou uma que tenha sido definida como um valor padrão.

O que você pode tentar

Primeiro, verifique se o valor da sinalização max_connections é maior ou igual ao valor no 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

Não foi possível criar a réplica de leitura: unknown error.

O problema pode ser

Provavelmente há um erro mais específico nos arquivos de registro.

O que você pode tentar

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.


Disco cheio

error: disk is full

O problema pode ser

O tamanho do disco da instância principal pode ficar cheio durante a criação da réplica.

O que você pode tentar

Edite a instância principal com upgrade para um tamanho de disco maior.


A instância da réplica está usando memória demais

A instância da réplica está usando memória demais.

O problema pode ser

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.

O que você deve tentar

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


Replicação interrompida

Replicação interrompida.

O problema pode ser

O limite máximo de armazenamento foi atingido e >automatic storage increase is disabled.

O que você pode tentar

Edite a instância para ativar automatic storage increase.


O atraso da replicação é consistentemente alto

O atraso da replicação é consistentemente alto.

O problema pode ser

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 longo ou temporário 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.

O que você deve tentar

Algumas soluções possíveis:

  • Edite a instância para aumentar o tamanho da réplica.
  • Reduza a carga no banco de dados.
  • Inclua as tabelas em um índice.
  • Identifique e corrija consultas lentas.
  • Recrie a réplica.

A seguir