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 Google 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 Google 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 mysql).
- 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
-
Na Google 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.
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:
- Numa réplica de leitura, desative a replicação.
- 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. - Na réplica de leitura, ative a replicação.
- 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:
- replica_parallel_workers
- replica_parallel_type
- replica_preserve_commit_order
- replica_pending_jobs_size_max
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:
- Ativar registos binários na réplica (apenas para o MySQL 5.7, o MySQL 8.0.18 e versões anteriores)
- Definir o
replica_parallel_type
paraLOGICAL_CLOCK
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:
- binlog_transaction_dependency_history_size
- binlog_transaction_dependency_tracking
- transaction_write_set_extraction
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é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 |
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. Esta métrica comunica o valor de |
Atraso da rede ( cloudsql.googleapis.com ) |
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 ) |
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:
Esta métrica comunica o valor de |
Estado de execução do comando SQL secundário ( cloudsql.googleapis.com ) |
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:
Esta métrica comunica o valor de |
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:
-
Na Google 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 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. - 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 emstate = "Yes"
. O gráfico mostra 1 se a discussão estiver em execução e 0 caso contrário. - 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 emstate = "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
- Ligue-se à réplica com um cliente MySQL.
Para mais informações, consulte as Opções de ligação para aplicações externas.
- 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
eRead_Master_Log_Pos
) e até às quais o processo de SQL executou eventos (Relay_Master_Log_File
eExec_Master_Log_Pos
). Se forem iguais (ou seja,Master_Log_file
é igual aRelay_Master_Log_File
eRead_Master_Log_Pos
é igual aExec_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 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. |
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:
|
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:
|
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:
|
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?
- Saiba como criar uma réplica de leitura.
- Saiba mais sobre os procedimentos armazenados do Cloud SQL para índices de réplicas de leitura.
- Saiba como configurar uma configuração de réplica externa.
- Saiba como configurar uma configuração principal externa.
- Saiba mais sobre os requisitos e as práticas recomendadas para a replicação.