Esta página descreve como gerenciar réplicas de leitura. Essas operações incluem desabilitar e habilitar a replicação, promover uma réplica, configurar a replicação paralela e verificar o status da replicação.
Para obter mais informações sobre como a replicação funciona, consulte Replicação no Cloud SQL .
Desabilitar replicação
Por padrão, uma réplica inicia com a replicação habilitada. No entanto, você pode desabilitar a replicação, por exemplo, para depurar ou analisar o estado de uma instância. Quando estiver pronto, reabilite a replicação explicitamente. Desabilitar ou reabilitar a replicação não reinicia a instância da réplica.
Desativar a replicação não interrompe a instância da réplica; ela se torna uma instância somente leitura que não está mais replicando a partir de sua instância primária. Você continua sendo cobrado pela instância. Na réplica desativada, você pode reativar a replicação, excluí-la ou promovê-la a uma instância autônoma.
Ao desabilitar a replicação por um longo período, seus requisitos de armazenamento em disco podem aumentar. Por exemplo, sua instância pode acumular logs transacionais para permitir que você retome a replicação ao reabilitá-la. Para evitar o aumento dos requisitos de armazenamento em disco, em vez de desabilitar a replicação por um longo período, considere promover a réplica ou criar um clone da instância primária.
Para desabilitar a replicação:
Console
No Google Cloud console, acesse a página Instâncias do Cloud SQL .
- Selecione uma instância de réplica clicando em seu nome.
- Clique em Desativar replicação na barra de botões.
- Clique em OK .
gcloud
gcloud sql instances patch REPLICA_NAME \ --no-enable-database-replication
REST v1
Para executar este comando cURL em um prompt de linha de comando, você adquire um token de acesso usando o comando gcloud auth print-access-token . Você também pode usar o APIs Explorer na página Instances:patch para enviar a solicitação da API REST.
Antes de usar qualquer um dos dados solicitados, faça as seguintes substituições:
- project-id : O ID do projeto
- replica-name : O nome da instância da réplica
Método HTTP e URL:
PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name
Corpo JSON da solicitação:
{ "settings": { "databaseReplicationEnabled": "False" } }
Para enviar sua solicitação, expanda uma destas opções:
Você deve receber uma resposta JSON semelhante à seguinte:
REST v1beta4
Para executar este comando cURL em um prompt de linha de comando, você adquire um token de acesso usando o comando gcloud auth print-access-token . Você também pode usar o APIs Explorer na página Instances:patch para enviar a solicitação da API REST.
Antes de usar qualquer um dos dados solicitados, faça as seguintes substituições:
- project-id : O ID do projeto
- replica-name : O nome da instância da réplica
Método HTTP e URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name
Corpo JSON da solicitação:
{ "settings": { "databaseReplicationEnabled": "False" } }
Para enviar sua solicitação, expanda uma destas opções:
Você deve receber uma resposta JSON semelhante à seguinte:
Habilitar replicação
Se uma réplica não estiver replicando por um longo período, levará mais tempo para alcançar a instância primária. Nesse caso, exclua a réplica e crie uma nova.
Para habilitar a replicação:
Console
No Google Cloud console, acesse a página Instâncias do Cloud SQL .
- Selecione uma instância de réplica clicando em seu nome.
- Clique em Habilitar replicação .
- Clique em Ok .
gcloud
gcloud sql instances patch REPLICA_NAME \ --enable-database-replication
REST v1
Para executar este comando cURL em um prompt de linha de comando, você adquire um token de acesso usando o comando gcloud auth print-access-token . Você também pode usar o APIs Explorer na página Instances:patch para enviar a solicitação da API REST.
Antes de usar qualquer um dos dados solicitados, faça as seguintes substituições:
- project-id : O ID do projeto
- replica-name : O nome da instância da réplica
Método HTTP e URL:
PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name
Corpo JSON da solicitação:
{ "settings": { "databaseReplicationEnabled": "True" } }
Para enviar sua solicitação, expanda uma destas opções:
Você deve receber uma resposta JSON semelhante à seguinte:
REST v1beta4
Para executar este comando cURL em um prompt de linha de comando, você adquire um token de acesso usando o comando gcloud auth print-access-token . Você também pode usar o APIs Explorer na página Instances:patch para enviar a solicitação da API REST.
Antes de usar qualquer um dos dados solicitados, faça as seguintes substituições:
- project-id : O ID do projeto
- replica-name : O nome da instância da réplica
Método HTTP e URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name
Corpo JSON da solicitação:
{ "settings": { "databaseReplicationEnabled": "True" } }
Para enviar sua solicitação, expanda uma destas opções:
Você deve receber uma resposta JSON semelhante à seguinte:
Promova uma réplica
Promover uma réplica de leitura interrompe a replicação e converte a instância em uma instância primária autônoma do Cloud SQL com recursos de leitura e gravação.
Quando promovidas, as réplicas de leitura são configuradas automaticamente com backups, mas não são configuradas automaticamente como instâncias de alta disponibilidade (HA). Você pode habilitar a alta disponibilidade após promover a réplica, assim como faria para qualquer instância que não seja réplica. A configuração de uma réplica de leitura para alta disponibilidade é feita da mesma forma que para uma instância primária. Saiba mais sobre como configurar a instância para alta disponibilidade .
Antes de promover uma réplica de leitura, se a primária ainda estiver disponível e atendendo clientes, você deve fazer o seguinte:
- Interrompa todas as gravações na instância primária.
- Verifique o status de replicação da réplica (siga as instruções na aba Cliente psql ).
- Verifique se a réplica está replicando e aguarde até que o atraso de replicação relatado pela métrica
replay_lag
seja 0.
Caso contrário, uma instância recém-promovida pode não ter algumas transações que foram confirmadas na instância primária.
Para promover uma réplica para uma instância autônoma:
Console
No Google Cloud console, acesse a página Instâncias do Cloud SQL .
- Selecione uma instância de réplica clicando em seu nome.
- Clique em Promover réplica .
- Clique em Ok .
gcloud
gcloud sql instances promote-replica REPLICA_NAME
REST v1
Para executar este comando cURL em um prompt de linha de comando, você adquire um token de acesso usando o comando gcloud auth print-access-token . Você também pode usar o APIs Explorer na página Instances:promoteReplica para enviar a solicitação da API REST.
Antes de usar qualquer um dos dados solicitados, faça as seguintes substituições:
- project-id : O ID do projeto
- replica-name : O nome da instância da réplica
Método HTTP e URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name/promoteReplica
Para enviar sua solicitação, expanda uma destas opções:
Você deve receber uma resposta JSON semelhante à seguinte:
REST v1beta4
Para executar este comando cURL em um prompt de linha de comando, você adquire um token de acesso usando o comando gcloud auth print-access-token . Você também pode usar o APIs Explorer na página Instances:promoteReplica para enviar a solicitação da API REST.
Antes de usar qualquer um dos dados solicitados, faça as seguintes substituições:
- project-id : O ID do projeto
- replica-name : O nome da instância da réplica
Método HTTP e URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name/promoteReplica
Para enviar sua solicitação, expanda uma destas opções:
Você deve receber uma resposta JSON semelhante à seguinte:
Confirme se a instância promovida está configurada corretamente. Em particular, considere configurar a instância para alta disponibilidade, se necessário.
Verificar status de replicação
Quando você visualiza uma instância de réplica usando o Google Cloud Ao usar o console ou efetuar login na instância usando um cliente de administração, você obtém detalhes sobre a replicação, incluindo status e métricas. Ao usar a CLI do gcloud , você obtém um breve resumo da configuração de replicação.
Antes de verificar o status de replicação de uma instância de réplica do Cloud SQL, use o
O comando gcloud sql instances describe
exibe o status da instância. Assim, você pode verificar se a replicação está habilitada para a instância de réplica.
As seguintes métricas estão disponíveis para instâncias de réplica. ( Saiba mais sobre métricas adicionais disponíveis para todas as instâncias, incluindo instâncias não réplicas.)
Métrica | Descrição |
---|---|
Estado de replicação ( cloudsql.googleapis.com /database /replication /state ) | Indica se a replicação está transmitindo logs ativamente do primário para a réplica. Os valores possíveis são:
Esta métrica informa
Para obter mais informações, consulte The Statistics Collector e System Administration Functions no Manual de Referência do PostgreSQL. |
Atraso de replicação ( cloudsql.googleapis.com /database /replication /replica_lag ) | A quantidade de tempo em que o estado da réplica está atrasado em relação ao estado da instância primária. Esta é a diferença entre (1) o horário atual e (2) o registro de data e hora original em que a instância primária confirmou a transação que está sendo aplicada na réplica. Em particular, as gravações podem ser contadas como atrasadas mesmo que tenham sido recebidas pela réplica, se esta ainda não tiver aplicado a gravação no banco de dados. Para réplicas em cascata, cada par primário-réplica é monitorado separadamente e não há uma única métrica que produza o atraso de ponta a ponta (primário para réplica). Para obter mais informações, consulte Atraso de replicação . |
Bytes de atraso ( cloudsql.googleapis.com /database /postgresql /replication /replica_byte_lag ) | Informa o número de bytes em que a réplica de leitura está atrasada em relação à primária. Quatro séries temporais são produzidas para cada réplica, mostrando o número de bytes no log de gravação antecipada da primária que ainda não foram…
Essas métricas atendem a propósitos diferentes; por exemplo, Essas métricas são calculadas comparando |
Máximo de bytes de atraso ( cloudsql.googleapis.com /database /postgresql /external_sync /max_replica_byte_lag ) | Para uma réplica de um primário externo , informa o atraso máximo de replicação (em bytes) em todos os bancos de dados que estão sendo replicados para esta instância. Para cada banco de dados, isso é definido como o número de bytes no log de gravação antecipada do primário que não foram confirmados como recebidos pela réplica. Esta métrica é calculada enviando uma consulta ao primário para comparar |
Para verificar o status da replicação:
Console
O Cloud SQL relata a métrica Replication State
no painel de monitoramento padrão do Cloud SQL .
Para visualizar outras métricas para réplicas na região e entre regiões, e réplicas de servidores externos, crie um painel personalizado e adicione as métricas que deseja monitorar a ele:
No Google Cloud console, vá para a página Monitoramento .
- Selecione a aba Painéis .
- Clique em Criar painel .
- Dê um nome ao painel e clique em OK.
- Clique em Adicionar gráfico .
- Para Tipo de recurso, selecione Banco de dados Cloud SQL .
- Faça qualquer um dos seguintes:
- Para monitorar a métrica de estado da replicação : no campo "Selecionar uma métrica" , digite
Replication state
". Em seguida, adicione um filtro parastate = "Running"
. O gráfico mostrará 1 se a replicação estiver em execução e 0 caso contrário. - Para monitorar o atraso de replicação, em bytes, para uma réplica de leitura : no campo "Selecionar uma métrica" , digite
Lag Bytes
". Em seguida, adicione um filtro emreplica_lag_type = "replay_location"
. O gráfico mostra o número de bytes associados a transações que foram confirmadas no primário, mas ainda não foram reproduzidas na réplica. - Para monitorar o atraso de replicação, em bytes, para uma réplica de um primário externo : no campo "Selecionar uma métrica" , digite
Max Lag Bytes
. O gráfico mostra o número de bytes associados a transações que foram confirmadas no primário, mas ainda não foram confirmadas como recebidas pela réplica.
gcloud
Para uma instância de 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 primária, 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 pelo primário e outras pela réplica. Para as etapas a seguir, conecte-se à réplica ou à instância primária (conforme instruções abaixo) com um cliente PostgreSQL.
Para obter informações, consulte Opções de conexão para aplicativos externos .
- Para verificar o status da réplica da instância primária :
Procure as seguintes métricas na saída do comando:select * from pg_stat_replication;
-
client_addr
: O endereço IP da instância de réplica. -
state
: indica se o thread SQL para execução de eventos no relay log está em execução. O valor éstreaming
quando a replicação é iniciada. -
replay_lag
: O número de bytes que a thread SQL de réplica está atrás da instância primária. O valor éO
ou um pequeno número de bytes.
-
- Para verificar o status 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 primária. -
status
: indica se o thread SQL para execução de eventos no relay log está em execução. O valor éstreaming
quando a replicação é iniciada. -
last_msg_send_time
elast_msg_receipt_time
: A diferença entre esses dois registros de data e 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 ef
caso contrário.Para verificar se há transações que foram recebidas do primário, 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, a réplica processou todas as transações que recebeu do primário.
-
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 Se o sinalizador |
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: |
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 |
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:
Algumas soluções possíveis incluem:
|
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:
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. |
O que vem a seguir
- Aprenda como criar uma réplica de leitura .
- Saiba mais sobre requisitos e práticas recomendadas para replicação .