Faça a gestão das réplicas de leitura

Esta página descreve como gerir réplicas de leitura. Estas operações incluem desativar e ativar a replicação, promover uma réplica, configurar a replicação paralela e verificar o estado da replicação.

Para mais informações sobre o funcionamento da replicação, consulte o artigo Replicação no Cloud SQL.

Desative a replicação

Por predefinição, uma réplica começa com a replicação ativada. No entanto, pode desativar a replicação, por exemplo, para depurar ou analisar o estado de uma instância. Quando tiver tudo pronto, reativa explicitamente a replicação. Desativar ou reativar a replicação não reinicia a instância da réplica.

A desativação da replicação não para a instância da réplica. Esta torna-se uma instância só de leitura que já não está a replicar a partir da respetiva instância principal. A cobrança da instância continua a ser feita. Na réplica desativada, pode reativar a replicação, eliminar a réplica ou promover a réplica a uma instância autónoma.

Quando desativa a replicação durante um período prolongado, os requisitos de armazenamento em disco podem aumentar. Por exemplo, a sua instância pode acumular registos transacionais para lhe permitir retomar a replicação quando a reativar. Para evitar aumentar os requisitos de armazenamento em disco, em vez de desativar a replicação durante um período prolongado, pondere promover a réplica ou criar um clone da instância principal.

Para desativar a replicação:

Consola

  1. Na Trusted Cloud consola, aceda à página Instâncias do Cloud SQL.

    Aceda a Instâncias do Cloud SQL

  2. Selecione uma instância de réplica clicando no respetivo 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 v1

Para executar este comando cURL numa linha de comando, adquire um token de acesso através do comando gcloud auth print-access-token. Também pode usar o Explorador de APIs na página Instances:patch para enviar o pedido da API REST.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

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

Método HTTP e URL:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name

Corpo JSON do pedido:

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

Para enviar o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

REST v1beta4

Para executar este comando cURL numa linha de comando, adquire um token de acesso através do comando gcloud auth print-access-token. Também pode usar o Explorador de APIs na página Instances:patch para enviar o pedido da API REST.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

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

Método HTTP e URL:

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

Corpo JSON do pedido:

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

Para enviar o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

Ative a replicação

Se uma réplica não estiver a ser replicada há muito tempo, vai demorar mais tempo a ficar atualizada com a instância principal. Neste caso, elimine a réplica e crie uma nova.

Para ativar a replicação:

Consola

  1. Na Trusted Cloud consola, aceda à página Instâncias do Cloud SQL.

    Aceda a Instâncias do Cloud SQL

  2. Selecione uma instância de réplica clicando no respetivo nome.
  3. Clique em Ativar replicação.
  4. Clique em OK.

gcloud

gcloud sql instances patch REPLICA_NAME \
--enable-database-replication

REST v1

Para executar este comando cURL numa linha de comando, adquire um token de acesso através do comando gcloud auth print-access-token. Também pode usar o Explorador de APIs na página Instances:patch para enviar o pedido da API REST.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

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

Método HTTP e URL:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name

Corpo JSON do pedido:

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

Para enviar o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

REST v1beta4

Para executar este comando cURL numa linha de comando, adquire um token de acesso através do comando gcloud auth print-access-token. Também pode usar o Explorador de APIs na página Instances:patch para enviar o pedido da API REST.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

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

Método HTTP e URL:

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

Corpo JSON do pedido:

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

Para enviar o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

Promova uma réplica

A promoção de uma réplica de leitura interrompe a replicação e converte a instância numa instância principal autónoma do Cloud SQL com capacidades de leitura e escrita.

Quando são promovidas, as réplicas de leitura são configuradas automaticamente com cópias de segurança, mas não são configuradas automaticamente como instâncias de alta disponibilidade (AA). Pode ativar a alta disponibilidade depois de promover a réplica, tal como faria para qualquer instância que não seja uma réplica. A configuração de uma réplica de leitura para alta disponibilidade é feita da mesma forma que para uma instância principal. Saiba mais sobre a configuração da instância para elevada disponibilidade.

Antes de promover uma réplica de leitura, se a principal ainda estiver disponível e a servir clientes, deve fazer o seguinte:

  1. Pare todas as gravações na instância principal.
  2. Verifique o estado da replicação da réplica (siga as instruções no separador cliente psql).
  3. Verifique se a réplica está a ser replicada e, em seguida, aguarde até que o intervalo de tempo de replicação comunicado pela métrica replay_lag seja 0.

Caso contrário, uma instância promovida recentemente pode não ter algumas transações que foram confirmadas na instância principal.

Para promover uma réplica para uma instância autónoma:

Consola

  1. Na Trusted Cloud consola, aceda à página Instâncias do Cloud SQL.

    Aceda a Instâncias do Cloud SQL

  2. Selecione uma instância de réplica clicando no respetivo nome.
  3. Clique em Promover réplica.
  4. Clique em OK.

gcloud

gcloud sql instances promote-replica REPLICA_NAME
  

REST v1

Para executar este comando cURL numa linha de comando, adquire um token de acesso através do comando gcloud auth print-access-token. Também pode usar o Explorador de APIs na página Instances:promoteReplica para enviar o pedido da API REST.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

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

Método HTTP e URL:

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name/promoteReplica

Para enviar o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

REST v1beta4

Para executar este comando cURL numa linha de comando, adquire um token de acesso através do comando gcloud auth print-access-token. Também pode usar o Explorador de APIs na página Instances:promoteReplica para enviar o pedido da API REST.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

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

Método HTTP e URL:

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

Para enviar o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

Confirme que a instância promovida está configurada corretamente. Em particular, considere configurar a instância para alta disponibilidade, se necessário.

Verifique o estado da replicação

Quando vê uma instância de réplica através da consola ou inicia sessão na instância através de um cliente de administração, recebe detalhes sobre a replicação, incluindo o estado e as métricas. Trusted Cloud Quando usa a CLI gcloud, recebe um breve resumo da configuração de replicação.

Antes de verificar o estado da replicação de uma instância de réplica do Cloud SQL, use o comando
gcloud sql instances describe para apresentar o estado da instância. Como resultado, pode ver se a replicação está ativada para a instância da réplica.

As seguintes métricas estão disponíveis para instâncias de réplica. (Saiba mais acerca de métricas adicionais disponíveis para todas as instâncias, incluindo instâncias não replicadas.)

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

Indica se a replicação está a transmitir ativamente registos do primário para a réplica. Os valores possíveis são os seguintes:

  • Running
  • Stopped
  • Error

Esta métrica comunica Running se:

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

Para mais informações, consulte os artigos O coletor de estatísticas e Funções de administração do sistema no manual de referência do PostgreSQL.

Atraso na replicação
(cloudsql.googleapis.com/database/replication/replica_lag)

A quantidade de tempo que o estado da réplica está atrasado em relação ao estado da instância principal. Esta é a diferença entre (1) a hora atual e (2) a data/hora original em que o elemento principal confirmou a transação que está a ser aplicada na réplica. Em particular, as escritas podem ser contabilizadas como atrasadas, mesmo que tenham sido recebidas pela réplica, se a réplica ainda não tiver aplicado a escrita à base de dados.

Para réplicas em cascata, cada par principal-réplica é monitorizado separadamente e não existe uma única métrica que produza o atraso (do principal para a réplica) de ponta a ponta.

Para mais informações, consulte o artigo Atraso na replicação.

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

Indica o número de bytes pelos quais a réplica de leitura está atrasada em relação à principal. São produzidas quatro séries cronológicas para cada réplica, que mostram o número de bytes no registo de transações antecipadas da réplica principal que ainda não foram…

  • sent_location: …enviado para a réplica
  • write_location: …escrito no disco pela réplica
  • flush_location: …descarregado para o disco pela réplica
  • replay_location: …reproduzido pela réplica

Estas métricas servem propósitos diferentes; por exemplo, replay_location dá uma indicação do atraso de replicação (o número de transações comprometidas com o principal que ainda não foram aplicadas à réplica), enquanto flush_location dá uma indicação do número de transações que não foram registadas de forma duradoura na instância da réplica.

Estas métricas são calculadas comparando o campo pg_catalog.pg_current_wal_lsn() com um dos seguintes campos de pg_stat_replication: sent_lsn, write_lsn, flush_lsn ou replay_lsn. Para mais informações, consulte O Statistics Collector no manual de referência do PostgreSQL.

Max Lag Bytes
(cloudsql.googleapis.com/database/postgresql/external_sync/max_replica_byte_lag)

Para uma réplica de um principal externo, comunica o atraso de replicação máximo (em bytes) em todas as bases de dados que estão a ser replicadas para esta instância. Para cada base de dados, isto é definido como o número de bytes no registo de transações da base de dados principal que não foram confirmados como recebidos pela réplica.

Esta métrica é calculada através do envio de uma consulta à base de dados principal para comparar pg_catalog.pg_current_wal_lsn() com o valor de confirmed_flush_lsn para cada base de dados que está a ser replicada para esta instância de réplica. Para mais informações, consulte O Statistics Collector no manual de referência do PostgreSQL.

Para verificar o estado da replicação:

Consola

O Cloud SQL comunica a métrica Replication State no painel de controlo de monitorização do Cloud SQL predefinido.

Para ver outras métricas para réplicas na região e entre regiões, e réplicas de servidores externos, crie um painel de controlo personalizado e adicione-lhe as métricas que quer monitorizar:

  1. Na Trusted Cloud consola, aceda à página Monitorização.

    Aceder a Monitorização

  2. Selecione o separador Painéis de controlo.
  3. Clique em Criar painel de controlo.
  4. Atribua um nome ao painel de controlo e clique em OK.
  5. Clique em Adicionar gráfico.
  6. Para Tipo de recurso, selecione Base de dados do Cloud SQL.
  7. Realize uma das seguintes ações:
    1. Para monitorizar a métrica de estado de replicação: no campo Selecionar uma métrica, escreva Replication state. Em seguida, adicione um filtro para state = "Running". O gráfico mostra 1 se a replicação estiver a ser executada e 0 caso contrário.
    2. Para monitorizar o atraso de replicação, em bytes, de uma réplica de leitura: no campo Selecionar uma métrica, escreva 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 que foram confirmadas no servidor principal, mas ainda não foram repetidas na réplica.
    3. Para monitorizar o atraso de replicação, em bytes, de uma réplica de um primário externo: no campo Selecionar uma métrica, escreva Max Lag Bytes. O gráfico mostra o número de bytes associados a transações que foram confirmadas na base de dados principal, mas ainda não foram confirmadas como recebidas pela réplica.

gcloud

Para uma instância de réplica, verifique o estado da replicação com:

gcloud sql instances describe REPLICA_NAME

No resultado, procure as propriedades databaseReplicationEnabled e masterInstanceName.

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

gcloud sql instances describe PRIMARY_INSTANCE_NAME

Na saída, procure a propriedade replicaNames.

Cliente psql

Algumas métricas do estado de replicação são produzidas pela base de dados principal e outras pela réplica. Para os passos seguintes, ligue-se à réplica ou à instância principal (conforme indicado abaixo) com um cliente PostgreSQL.

Para mais informações, consulte as opções de ligação para aplicações externas.

  1. Para verificar o estado da réplica a partir da instância principal:
    select * from pg_stat_replication;
    Procure as seguintes métricas na saída do comando:
    • client_addr: O endereço IP da instância de réplica.
    • state: indica se o comando SQL para executar eventos no registo de retransmissão está em execução. O valor é streaming quando a replicação é iniciada.
    • replay_lag: o número de bytes que a thread SQL da réplica está atrás da instância principal. O valor é O ou um pequeno número de bytes.
  2. Para verificar o estado da réplica a partir da 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 o comando SQL para executar eventos no registo de retransmissão 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 estas duas indicações de tempo é o tempo de atraso.

    Para verificar se a replicação foi pausada:

    select pg_is_wal_replay_paused();

    O valor é t se a replicação estiver pausada e f, caso contrário.

    Para verificar se existem transações recebidas da conta principal, 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, significa que a réplica processou todas as transações que recebeu da base de dados principal.

  • Para mais detalhes sobre o resultado destes comandos, consulte a documentação do PostgreSQL sobre o coletor de estatísticas.
  • Resolver problemas

    Problema Resolução de problemas
    A réplica de leitura não começou a ser replicada na criação. Provavelmente, existe um erro mais específico nos ficheiros de registo. Inspeccione os registos nos Registos na nuvem para encontrar o erro real.
    Não é possível criar uma réplica de leitura: erro invalidFlagValue. Uma das flags no pedido é inválida. Pode ser uma flag que forneceu explicitamente ou uma que foi definida para um valor predefinido.

    Primeiro, verifique se o valor da flag max_connections é superior ou igual ao valor no registo principal.

    Se a flag max_connections estiver definida corretamente, inspecione os registos no Cloud Logging para encontrar o erro real.

    Não é possível criar uma réplica de leitura: erro desconhecido. Provavelmente, existe um erro mais específico nos ficheiros de registo. Inspeccione os registos nos Registos na nuvem 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. Esta 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 para a atualizar para um tamanho de disco maior.
    O espaço em disco aumenta significativamente. Um espaço que não é usado ativamente para acompanhar dados faz com que o PostgreSQL mantenha os segmentos WAL indefinidamente, o que faz com que o espaço em disco aumente indefinidamente. Se usar as funcionalidades de replicação e descodificação lógica no Cloud SQL, os slots de replicação são criados e eliminados automaticamente. Pode detetar as ranhuras de replicação não usadas consultando a vista do sistema pg_replication_slots e filtrando pela coluna active. Pode eliminar as posições não usadas para remover segmentos WAL através do comando pg_drop_replication_slot.
    A instância da réplica está a usar demasiada memória. A réplica usa memória temporária para colocar em cache operações de leitura pedidas com frequência, o que pode fazer com que 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.

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

    Edite a instância para ativar a autorização automatic storage increase.

    O atraso de replicação é consistentemente elevado. A carga de escrita é demasiado elevada para a réplica processar. O atraso de replicação ocorre quando o segmento SQL numa réplica não consegue acompanhar o segmento de E/S. Alguns tipos de consultas ou cargas de trabalho podem causar um atraso de replicação elevado temporário ou permanente para um determinado esquema. Algumas das causas típicas do atraso na replicação são:
    • Consultas lentas na réplica. Encontre-os e corrija-os.
    • Todas as tabelas têm de ter uma chave exclusiva/principal. Cada atualização numa tabela sem uma chave única/primária provoca análises completas da tabela na réplica.
    • As consultas como DELETE ... WHERE field < 50000000 causam um atraso na replicação com a replicação baseada em linhas, uma vez que um grande número de atualizações é acumulado na réplica.

    Algumas soluções possíveis incluem:

    • Edite a instância para aumentar o tamanho da réplica.
    • Reduza a carga na base de dados.
    • Envie tráfego de leitura para a réplica de leitura.
    • Indexe as tabelas.
    • Identifique e corrija consultas de escrita lentas.
    • Recrie a réplica.
    Erros ao recriar índices no PostgreSQL 9.6. Recebe um erro do PostgreSQL a informar que tem de reconstruir um índice específico. Esta ação só pode ser realizada na instância principal. Se criar uma nova instância de réplica, recebe novamente o mesmo erro em breve. Os índices de hash não são propagados para réplicas em versões do PostgreSQL inferiores a 10.

    Se tiver de usar índices de hash, atualize para o PostgreSQL 10 ou superior. 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 principal está sempre em execução. Depois de 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 principal.
    A criação de réplicas falha devido ao limite de tempo. As transações não comprometidas de longa duração na instância principal podem fazer com que a criação de réplicas de leitura falhe.

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

    Se a instância principal e a réplica tiverem tamanhos de vCPU diferentes, podem ocorrer problemas de desempenho das consultas, uma vez que o otimizador de consultas tem em conta os tamanhos de vCPU.

    Para resolver este problema, conclua os seguintes passos:

    1. Ative o sinalizador log_duration e defina o parâmetro log_statement como ddl. Isto fornece-lhe as consultas e o tempo de execução na base de dados. No entanto, dependendo da sua carga de trabalho, isto 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 se existem diferenças.

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

    O que se segue?