Configuração de réplicas de leitura
Você pode configurar sua implantação IBM Cloud® Databases for MySQL para ser uma réplica de leitura de outra implantação Databases for MySQL.
Uma réplica de leitura é configurada para replicar todos os seus dados da instância de origem para a implementação da réplica usando replicação assíncrona. Como o nome indica, as réplicas de leitura oferecem suporte a transações de leitura e podem ser usadas para equilibrar bancos de dados com operações de gravação pesada e de leitura pesada. A promoção da réplica de leitura também pode ser usada para a recuperação de dados, em caso de falha da instância de banco de dados de origem. A réplica de leitura tem um único membro de dados MySQL e é cobrada com as mesmas taxas de consumo por membro que a instância do banco de dados de origem.
Leia as considerações sobre réplicas
-
Uma réplica de leitura pode existir na mesma região que a instância do banco de dados de origem ou em uma região diferente, permitindo que seus dados sejam replicados entre regiões.
-
Uma réplica de leitura deve ter a mesma versão principal que a instância do banco de dados de origem.
-
Os backups ficam desativados nas réplicas de leitura. Os backups são feitos somente nas instâncias do banco de dados de origem.
-
A replicação de leitura não é suportada dentro ou fora das regiões ativadas para a Nuvem da UE (atualmente
eu-de). Ela é suportada dentro dessas regiões. -
Há um limite de cinco réplicas de leitura por instância de origem.
-
A réplica de leitura não participa de eleições para a instância do banco de dados de origem e o failover para a réplica de leitura não é automatizado. A promoção da réplica de leitura para uma implementação completa é uma tarefa manual, iniciada pelo usuário.
-
O tamanho mínimo de uma réplica de leitura é de 2 GB de RAM e 20 GB de disco. Isso é verdade mesmo que a implementação da instância do banco de dados de origem seja menor.
-
As réplicas de leitura não são dimensionadas automaticamente para corresponder à instância do banco de dados de origem. Se a quantidade de dados armazenados ultrapassar o disco alocado para suas implantações, dimensione o disco nas réplicas de leitura e, em seguida, na instância do banco de dados de origem. Dimensionar a réplica de leitura primeiro garante que você não fique sem espaço nas réplicas de leitura. Se você dimensionou o disco da instância do banco de dados de origem para desempenho e não para espaço, não é necessário dimensionar as réplicas de leitura.
-
A replicação é assíncrona e pode estar sujeita a atraso de replicação. Por padrão, não há comunicação entre a primária e a réplica com relação à consistência. É possível que uma réplica de leitura fique atrasada o suficiente para precisar ser ressincronizada. O atraso da replicação pode ser maior quando a réplica está em uma região geograficamente distante da instância do banco de dados de origem.
-
Uma réplica de leitura é uma implementação com um único membro de dados e não tem nenhuma alta disponibilidade interna. Ela está propensa a interrupções provisórias e ao tempo de inatividade durante a manutenção. Se você tiver aplicativos que dependem de réplicas de leitura, certifique-se de ter uma lógica para tentar novamente consultas com falha ou balanceamento de carga em várias réplicas de leitura.
O líder
Na guia Read Replicas (Réplicas de leitura) de uma implementação Databases for MySQL antes que qualquer réplica de leitura seja provisionada, o painel central observa que não existem réplicas de leitura e fornece um botão Create (Criar ).
Se uma implantação for líder e tiver uma réplica de leitura já anexada a ela, o painel Replicação terá uma lista de implantações de réplicas e um link para cada uma delas.
Provisionamento de uma réplica de leitura
Você pode provisionar uma réplica de leitura na guia Read Replicas do líder, clicando em Create Read Replica. A instância de origem é preenchida automaticamente. O nome da réplica de leitura é gerado automaticamente no campo Nome do serviço, mas você pode renomeá-lo livremente. É possível escolher a região na qual implementá-la e sua alocação de memória inicial. O tamanho do disco, a versão e os pontos de extremidade públicos ou privados são configurados automaticamente para corresponder às configurações da implementação da instância do banco de dados de origem.
Se você usar o Key Protect, o Bring Your Own Key (BYOK) será suportado apenas ao provisionar por meio da CLI e da API. Caso contrário, a réplica de leitura é criptografada com uma chave gerada.
Provisionando por meio da API ou da CLI
O provisionamento de uma réplica de leitura por meio da CLI e da API funciona de forma semelhante ao provisionamento de uma implantação padrão do Databases for MySQL.
O provisionamento é tratado pelo Controlador de recursos e usa um parâmetro {"remote_leader_id": "crn:v1:..."} para especificar o líder da réplica que você está provisionando.
Por exemplo, para provisionar uma réplica de leitura por meio da CLI,
ibmcloud resource service-instance-create <replica_name> databases-for-mysql standard <region> \
-p \ '{
"remote_leader_id": "crn:v1:bluemix:public:databases-for-mysql:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71819::",
"members_memory_allocation_mb": "2048",
"members_disk_allocation_mb": "10240"
}'
O mesmo parâmetro é usado para provisionar uma réplica de leitura por meio da API do controlador de recursos.
curl -X POST \
https://resource-controller.cloud.ibm.com/v2/resource_instances \
-H 'Authorization: Bearer <>' \
-H 'Content-Type: application/json' \
-d '{
"name": "<replica_name>",
"target": "<region>",
"resource_group": "<your_resource_group_id>",
"resource_plan_id": "databases-for-mysql-standard",
"remote_leader_id": "crn:v1:bluemix:public:databases-for-mysql:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71819::",
"members_memory_allocation_mb": "2048",
"members_disk_allocation_mb": "10240"
}'
Para os comandos de CLI e de API, deve-se especificar os valores de RAM e de disco, tendo sempre em mente que o tamanho mínimo é de 2 GB RAM e 20 GB de disco. Opcionalmente, você pode especificar se a réplica de leitura usa endpoints públicos ou privados. Não é possível especificar uma versão para a réplica de leitura. A versão é automaticamente definida como a mesma versão principal da implementação da instância do banco de dados de origem.
A réplica lida
Na guia Réplicas de leitura de uma réplica de leitura, o painel Replicação contém seu nome e região, bem como o nome e a região da instância do banco de dados de origem. Ele também tem botões para ressincronizar a réplica de leitura e promovê-la.
Verificando o status da replicação
Deve-se monitorar a replicação, pois o status dela não é monitorado automaticamente.
Você pode verificar o status da replicação, bem como o atraso da replicação, de uma réplica de leitura com mysql da instância do banco de dados de origem. Conecte-se à implantação da instância do banco de dados de origem com mysql usando as credenciais de administrador. Quando conectado, execute o seguinte comando:
mysql> SHOW SLAVE STATUS \G
Um campo importante do relatório de status do comando será Seconds_Behind_Master: _. Este é o número de segundos correspondente ao atraso da replicação do encadeamento SQL no processamento do log binário de origem.
Para obter mais informações, consulte as informações do MySQL, Verificando o status de replicação.
Ler usuários e privilégios da réplica
-
Qualquer usuário na instância do banco de dados de origem, mesmo aqueles presentes antes do fornecimento da réplica de leitura, pode fazer login e executar leituras em uma réplica de leitura com os mesmos privilégios para objetos que eles têm na instância do banco de dados de origem.
-
Se você tiver mais de uma réplica de leitura anexada a uma instância do banco de dados de origem, um usuário criado na origem também será criado em todas as outras réplicas de leitura.
-
Os usuários criados na instância do banco de dados de origem persistem na réplica de leitura quando ela é promovida a uma implementação autônoma, incluindo o usuário
admin. Quando a réplica de leitura é promovida, os usuários e os privilégios de todos os usuários na instância do banco de dados de origem são transferidos para a implantação promovida. -
As operações de gravação na réplica de leitura para todos os usuários não são filtradas ou rejeitadas, mas falham no nível do banco de dados.
-
Os usuários de réplica de leitura criados em uma réplica de leitura podem se conectar à instância do banco de dados de origem com a permissão
SELECT.
Ressincronização de uma réplica de leitura
Se você precisar ressincronizar uma réplica de leitura, clique no botão Resync Read Replica (Ressincronizar réplica de leitura). A ressincronização é uma operação disruptiva e a execução de uma ressincronização destrói e reconstrói os dados na réplica de leitura. A réplica de leitura não pode realizar outras operações nem executar consultas enquanto a ressincronização estiver em andamento. As consultas não são redirecionadas para a instância do banco de dados de origem, portanto, todas as conexões com a réplica de leitura falham até que a ressincronização seja concluída.
O tempo necessário para ressincronizar uma réplica de leitura varia, mas o processo pode ser muito demorado.
Para iniciar uma ressincronização por meio da CLI, use o comando cdb read-replica-resync.
ibmcloud cdb read-replica-resync <deployment name>
Para iniciar uma ressincronização por meio da API, envie um POST para o terminal /deployments/{id}/remotes/resync.
curl -X POST \
https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/remotes/resync \
-H 'Authorization: Bearer <>'
Promovendo uma réplica de leitura
Uma réplica de leitura pode ser promovida a um cluster independente que pode aceitar operações de gravação e de leitura. Se algo acontecer com a instância do banco de dados de origem, a réplica de leitura poderá ser promovida a um cluster autônomo e começar a aceitar gravações do seu aplicativo.
Para promover uma réplica de leitura na interface do usuário, clique no botão Promote Read Replica (Promover réplica de leitura).
Após a promoção, a réplica de leitura encerra sua conexão com a instância do banco de dados de origem e se torna uma implantação autônoma do Databases for MySQL. A implementação pode começar a aceitar e executar operações de leitura e gravação; os backups são ativados e o próprio usuário administrativo dela é emitido. Um novo membro de dados é incluído, portanto, a implementação se torna um cluster com três membros de dados. Isso aumenta os custos, uma vez que a cobrança é feita com base na mesma taxa de consumo por membro, mas a implementação possui três membros, em vez de um.
Quando você promove uma réplica de leitura, pode ignorar o backup inicial que normalmente seria feito na promoção. Ignorar o backup inicial significa que sua réplica se torna disponível mais rapidamente, mas sem nenhum backup imediato disponível. Será possível iniciar um backup sob demanda após a conclusão do processo de promoção.
Depois que uma réplica de leitura é promovida a uma implementação independente, não é possível revertê-la de volta a uma réplica de leitura ou fazer com que ela se junte novamente a uma instância do banco de dados de origem.
Para promover por meio da CLI, use o comando cdb read-replica-promote.
ibmcloud cdb read-replica-promote <deployment name>
Para promover por meio da API, envie um POST para o terminal /deployments/{id}/remotes/promotion.
curl -X POST \
https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/remotes/promotion \
-H 'Authorization: Bearer <>' \
-H 'Content-Type: application/json' \
-d '{"promotion": {}}' \
Para promover e ignorar o backup inicial após a promoção, configure também skip_initial_backup no corpo JSON.
curl -X POST \
https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/remotes/promotion \
-H 'Authorization: Bearer <>' \
-H 'Content-Type: application/json' \
-d '{"promotion": {"skip_initial_backup": true}}' \
Tempo para conclusão
A receita de promoção é concluída somente quando o banco de dados está altamente disponível. Entretanto, a disponibilidade de leitura/gravação ocorre após cerca de 10 minutos com uma grande ressalva: o banco de dados não estará altamente disponível até que a receita seja concluída.
O tempo de promoção completo de uma réplica de leitura é determinado de duas maneiras possíveis pelo tamanho dos dados:
- As réplicas de leitura são membros únicos. Quando promovidos, dois membros adicionais são adicionados como réplicas. O tempo necessário para isso depende do tamanho dos dados. Conforme os bancos de dados crescem, é possível que a criação demore bem mais. A operação de promoção não está completa até que a criação de ambas as réplicas seja concluída.
- Ao optar pelo backup como parte da promoção, ele também precisará ser concluído antes da conclusão da receita. Mais uma vez, isso depende do tamanho do banco de dados.
Lembre-se de que nenhum membro de alta disponibilidade existe até que a receita da promoção seja concluída. Da mesma forma, se você tiver selecionado um backup inicial, não haverá nenhum backup até que o segundo ponto seja concluído ou um backup manual seja criado.