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
-
Na Trusted Cloud consola, aceda à página Instâncias do Cloud SQL.
- Selecione uma instância de réplica clicando no respetivo 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 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
-
Na Trusted Cloud consola, aceda à página Instâncias do Cloud SQL.
- Selecione uma instância de réplica clicando no respetivo nome.
- Clique em Ativar replicação.
- 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:
- Pare todas as gravações na instância principal.
- Verifique o estado da replicação da réplica (siga as instruções no separador cliente psql).
- 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
-
Na Trusted Cloud consola, aceda à página Instâncias do Cloud SQL.
- Selecione uma instância de réplica clicando no respetivo nome.
- Clique em Promover réplica.
- 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étrica | Descrição |
---|---|
Estado da replicação ( cloudsql.googleapis.com ) |
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:
Esta métrica comunica
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 ) |
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 ) |
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…
Estas métricas servem propósitos diferentes; por exemplo,
Estas métricas são calculadas comparando o campo
|
Max Lag Bytes ( cloudsql.googleapis.com ) |
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
|
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:
-
Na Trusted Cloud consola, aceda à página Monitorização.
- Selecione o separador Painéis de controlo.
- Clique em Criar painel de controlo.
- Atribua um nome ao painel de controlo e clique em OK.
- Clique em Adicionar gráfico.
- Para Tipo de recurso, selecione Base de dados do Cloud SQL.
- Realize uma das seguintes ações:
- Para monitorizar a métrica de estado de replicação: no campo Selecionar uma métrica, escreva
Replication state
. Em seguida, adicione um filtro parastate = "Running"
. O gráfico mostra 1 se a replicação estiver a ser executada e 0 caso contrário. - 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 emreplica_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. - 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.
- Para verificar o estado da réplica a partir da instância principal:
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 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.
- 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
elast_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 ef
, 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.
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 Se a flag |
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: |
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 |
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:
Algumas soluções possíveis incluem:
|
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:
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?
- Saiba como criar uma réplica de leitura.
- Saiba mais sobre os requisitos e as práticas recomendadas para a replicação.