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 Google 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 Google 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 mysql).
  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 Seconds_Behind_Master 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 Google 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.

Configure a replicação paralela

A redução do atraso na replicação é importante para gerir o desempenho da replicação. O atraso na replicação ocorre quando as atualizações de uma réplica de leitura ficam atrás das atualizações da instância principal. Esta secção descreve como os utilizadores podem ativar a replicação paralela, o que pode reduzir o intervalo de tempo da replicação.

Na replicação do MySQL, é usado um thread SQL de replicação para executar as transações recolhidas no registo de retransmissão na réplica de leitura. A replicação paralela reduz o atraso de replicação ao aumentar o número de threads SQL que funcionam para executar estas transações. As réplicas de leitura com a replicação paralela ativada são, por vezes, denominadas réplicas com várias linhas de execução.

A replicação paralela está disponível nestes três cenários no Cloud SQL para MySQL:

Para simplificar, esta página usa os termos "instância principal" e "réplica de leitura".

Passos básicos para alterar as flags de replicação paralela

Os passos para ativar a replicação paralela são os seguintes:

  1. Numa réplica de leitura, desative a replicação.
  2. Na réplica de leitura, defina as flags para a replicação paralela. Use o comando gcloud para definir as flags. A opção de consola Google Cloud está desativada quando a replicação está desativada.
  3. Na réplica de leitura, ative a replicação.
  4. Opcionalmente, na instância principal, defina as flags para otimizar o desempenho da replicação paralela.

Réplicas de leitura: flags para replicação paralela

O Cloud SQL para MySQL suporta várias flags para replicação paralela em réplicas de leitura. Para ver informações sobre as flags, clique nestes links para aceder à documentação do MySQL 8.0:

A alteração destas flags não reinicia a réplica de leitura.

A tabela seguinte contém os intervalos permitidos e os valores predefinidos para estas flags:

Sinalização de réplica de leitura Valores permitidos Valor predefinido do MySQL 5.7 Valor predefinido do MySQL 8.0 e posterior
replica_parallel_workers 0-1024 0 0 (MySQL 8.0.26 e anterior)
4 (MySQL 8.0.27 e posterior)
replica_parallel_type DATABASE, LOGICAL_CLOCK DATABASE DATABASE (MySQL 8.0.26 e versões anteriores)
LOGICAL_CLOCK (MySQL 8.0.27 e versões posteriores)
replica_preserve_commit_order ON, OFF OFF OFF (MySQL 8.0.26 e anterior)
ON (MySQL 8.0.27 e posterior)
replica_pending_jobs_size_max 1024-1GB 16MB 128MB

A flag replica_preserve_commit_order evita lacunas na sequência de transações executadas a partir do registo de retransmissão da réplica.

A definição replica_preserve_commit_order=1 requer o seguinte:

A flag replica_pending_jobs_size_max define a memória máxima, em bytes, disponível para as filas do aplicador que contêm eventos ainda não aplicados.

Instância principal: flags para replicação paralela

O Cloud SQL para MySQL suporta várias flags para utilização numa instância principal. Pode usar estas flags para ajustar o desempenho da replicação para réplicas de leitura associadas com a replicação paralela ativada. Para ver informações sobre as flags, clique nestes links para aceder à documentação do MySQL 8.0:

A alteração destas flags não reinicia a instância principal.

A tabela seguinte contém os intervalos permitidos e os valores predefinidos para estas flags:

Denúncia da instância principal Valores permitidos Valor predefinido do MySQL 5.7 Valor predefinido do MySQL 8.0 Valor predefinido do MySQL 8.4
binlog_transaction_dependency_history_size 1-1000000 25000 25000 25000
binlog_transaction_dependency_tracking COMMIT_ORDER, WRITESET, WRITESET_SESSION COMMIT_ORDER WRITESET n/a (descontinuado no MySQL 8.4)
transaction_write_set_extraction OFF, MURMUR32, XXHASH64 OFF XXHASH64 n/a (descontinuado no MySQL 8.4)

No MySQL 5.7, se binlog_transaction_dependency_tracking estiver definido como WRITESET ou WRITESET_SESSION, transaction_write_set_extraction deve ser definido como um valor não OFF (XXHASH64 ou MURMUR32).

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. Google 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 os threads de E/S e SQL da réplica comunicarem que estão em execução. Consulte as métricas Slave I/O thread running state e Slave SQL thread running state abaixo para mais informações ou consulte Checking Replication Status no manual de referência do MySQL.

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.

Esta métrica comunica o valor de Seconds_Behind_Master quando SHOW REPLICA STATUS é executado na réplica. Para mais informações, consulte Verificar o estado de replicação no manual de referência do MySQL.

Atraso da rede
(cloudsql.googleapis.com/database/replication/network_lag)

A quantidade de tempo, em segundos, que demora desde a gravação do binlog na base de dados principal até chegar ao IO thread na réplica.

Se o network_lag for zero ou insignificante, mas o `replica_lag` for elevado, indica que o comando SQL não consegue aplicar as alterações de replicação com rapidez suficiente.

Slave I/O thread running state
(cloudsql.googleapis.com/database/mysql/replication/slave_io_running_state)

Indica se a thread de I/O para ler o registo binário da instância principal está a ser executada na réplica. Os valores possíveis são os seguintes:

  • Yes
  • No
  • Connecting

Esta métrica comunica o valor de Slave_IO_Running quando SHOW REPLICA STATUS é executado na réplica. Para mais informações, consulte Verificar o estado de replicação no manual de referência do MySQL.

Estado de execução do comando SQL secundário
(cloudsql.googleapis.com/database/mysql/replication/slave_sql_running_state)

Indica se o comando SQL para executar eventos no registo de retransmissão está a ser executado na réplica. Os valores possíveis são os seguintes:

  • Yes
  • No
  • Connecting

Esta métrica comunica o valor de Slave_SQL_Running quando SHOW REPLICA STATUS é executado na réplica. Para mais informações, consulte Verificar o estado de replicação no manual de referência do MySQL.

Para verificar o estado da replicação:

Consola

O Cloud SQL comunica as métricas Replication State e Replication Lag 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 Google 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 a métrica de atraso de replicação: no campo Selecionar uma métrica, escreva replica_lag. O gráfico mostra a quantidade de tempo que o estado da réplica fica atrás do estado do respetivo primário.
    3. Para monitorizar o estado da thread de E/S da réplica: no campo Selecionar uma métrica, escreva Slave I/O thread running state. Em seguida, adicione um filtro em state = "Yes". O gráfico mostra 1 se a discussão estiver em execução e 0 caso contrário.
    4. Para monitorizar o estado da thread SQL da réplica: no campo Selecionar uma métrica, escreva Slave SQL thread running state. Em seguida, adicione um filtro em state = "Yes". O gráfico mostra 1 se a discussão estiver em execução e 0 caso contrário.

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 mysql

  1. Ligue-se à réplica com um cliente MySQL.

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

  2. Verifique o estado da réplica:
    SHOW REPLICA STATUS \G

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

    • Master_Host: o nome da instância principal.
    • Slave_IO_Running, Slave_SQL_Running: Indica se os threads de E/S e SQL, respetivamente, estão em execução. Estes threads são responsáveis pela transferência de eventos do principal para o registo de retransmissão da réplica e pela execução desses eventos a partir do registo de retransmissão. O valor da métrica é Yes se a thread estiver a ser executada. Ambas as threads têm de estar em execução para que a replicação esteja ativa.
    • Seconds_Behind_Master: A quantidade de tempo, em segundos, pela qual a réplica fica atrasada no processamento das transações da principal, ou seja, a diferença entre (1) a hora atual e (2) a data/hora original em que a principal confirmou a transação que está atualmente a ser aplicada na réplica. O valor é NULL se a replicação estiver danificada.
    • Master_Log_file, Read_Master_Log_Pos, Relay_Master_Log_File, Exec_Master_Log_Pos: Estas métricas mostram as coordenadas (nome do ficheiro e desvio) até às quais o processo de E/S leu eventos (Master_Log_file e Read_Master_Log_Pos) e até às quais o processo de SQL executou eventos (Relay_Master_Log_File e Exec_Master_Log_Pos). Se forem iguais (ou seja, Master_Log_file é igual a Relay_Master_Log_File e Read_Master_Log_Pos é igual a Exec_Master_Log_Pos), significa que a réplica processou todos os eventos que recebeu da base de dados primária.

Para mais detalhes sobre o resultado deste comando, consulte a documentação do MySQL sobre a verificação do estado de replicação.

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.
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:

O atraso de replicação aumenta subitamente. Isto deve-se a transações de longa duração. Quando uma transação (declaração única ou várias declarações) é confirmada na instância de origem, a hora de início da transação é registada no registo binário. Quando a réplica recebe este evento binlog, compara essa data/hora com a data/hora atual para calcular o atraso da replicação. Assim, uma transação de longa duração na origem resultaria num grande atraso de replicação imediato na réplica. Se a quantidade de alterações de linhas na transação for grande, a réplica também demoraria muito tempo a executá-la. Durante este período, o atraso na replicação está a aumentar. Quando a réplica concluir esta transação, o período de sincronização depende da carga de trabalho de gravação na origem e da velocidade de processamento da réplica.

Para evitar uma transação longa, algumas soluções possíveis incluem:

  • Dividir a transação em várias transações pequenas
  • Divida uma única consulta de escrita grande em lotes mais pequenos
  • Tente separar as consultas SELECT longas de uma transação misturada com DMLs
A alteração das flags de replicação paralela resulta num erro. Foi definido um valor incorreto para uma ou mais destas flags.

Na instância principal que está a apresentar a mensagem de erro, defina as flags de replicação paralela:

  1. Modifique as flags binlog_transaction_dependency_tracking e transaction_write_set_extraction:
    • binlog_transaction_dependency_tracking=COMMIT_ORDER
    • transaction_write_set_extraction=OFF
  2. Adicione a flag slave_pending_jobs_size_max:

    slave_pending_jobs_size_max=33554432

  3. Modifique a flag transaction_write_set_extraction:

    transaction_write_set_extraction=XXHASH64

  4. Modifique a flag binlog_transaction_dependency_tracking:

    binlog_transaction_dependency_tracking=WRITESET

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.

O que se segue?