Configurar a replicação de várias fontes do Amazon RDS para MySQL - Amazon Relational Database Service

Configurar a replicação de várias fontes do Amazon RDS para MySQL

Com a replicação de várias fontes, é possível configurar uma instância de banco de dados do Amazon RDS para MySQL como uma réplica que recebe eventos de logs binários de mais de uma instância de banco de dados de origem do RDS para MySQL. A replicação de várias fontes é compatível com instâncias de banco de dados do RDS para MySQL que executam as seguintes versões de mecanismo:

  • 8.0.35 e versões secundárias posteriores

  • 5.7.44 e versões secundárias posteriores

Para ter informações sobre a replicação de várias fontes do MySQL, consulte MySQL Multi-Source Replication na documentação do MySQL. A documentação do MySQL contém informações detalhadas sobre esse recurso, enquanto este tópico descreve como configurar e gerenciar canais de replicação de várias fontes nas instâncias de banco de dados do RDS para MySQL.

Casos de uso da replicação de várias fontes

Os casos a seguir são bons candidatos para usar a replicação de várias fontes no RDS para MySQL:

  • Aplicações que precisam mesclar ou combinar vários fragmentos em instâncias de banco de dados separadas em um único fragmento.

  • Aplicações que precisam gerar relatórios a partir de dados consolidados de várias fontes.

  • Requisitos para criar backups consolidados de longo prazo de dados distribuídos entre várias instâncias de banco de dados do RDS para MySQL.

Pré-requisitos para replicação de várias fontes

Antes de configurar a replicação de várias fontes, cumpra os pré-requisitos a seguir.

  • Garanta que cada instância de banco de dados do RDS para MySQL de origem tenha backups automáticos habilitados. A ativação de backups automáticos habilita o registro em log binário. Para saber como habilitar os backups automáticos, consulte Ativar backups automáticos.

  • Para evitar erros de replicação, recomendamos bloquear as operações de gravação nas instâncias de banco de dados de origem. É possível fazer isso definindo o parâmetro read-only como ON em um grupo de parâmetros personalizado associado à instância de banco de dados de origem do RDS para MySQL. É possível usar o AWS Management Console ou a AWS CLI para criar um grupo de parâmetros personalizado ou modificar um existente. Para ter mais informações, consulte Criar um grupo de parâmetros de banco de dados no Amazon RDS e Modificar parâmetros em um grupo de parâmetros de banco de dados no Amazon RDS.

  • Para cada instância de banco de dados de origem, adicione o endereço IP da instância ao grupo de segurança da Amazon Virtual Private Cloud (VPC) para a instância de banco de dados de várias fontes de dados. Para identificar o endereço IP de uma instância de banco de dados de origem, é possível executar o comando dig RDS Endpoint. Execute o comando a partir de uma instância do Amazon EC2 na mesma VPC da instância de banco de dados de várias fontes de destino.

  • Para cada instância de banco de dados de origem, use um cliente para se conectar à instância de banco de dados e criar um usuário de banco de dados com os privilégios necessários para replicação, como no exemplo a seguir.

    CREATE USER 'repl_user' IDENTIFIED BY 'password'; GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user';

Configurar canais de replicação de várias fontes nas instâncias de banco de dados do RDS para MySQL

A configuração de canais de replicação de várias fontes é semelhante à configuração da replicação de uma única fonte. Para replicação de várias fontes, primeiro habilite o registro em log binário na instância de origem. Depois, importe os dados das fontes para a réplica de várias fontes. Então, inicie a replicação de cada fonte usando as coordenadas binárias do log binário ou usando o posicionamento automático do GTID.

Para configurar uma instância de banco de dados do RDS para MySQL como uma réplica de várias fontes de duas ou mais instâncias de banco de dados do RDS para MySQL, execute as etapas a seguir.

Etapa 1: Importar dados das instâncias de banco de dados de origem para a réplica de várias fontes

Execute as etapas a seguir em cada instância de banco de dados de origem.

Antes de importar os dados de uma fonte para a réplica de várias fontes, determine o arquivo de log binário atual e a posição executando o comando SHOW MASTER STATUS. Anote esses detalhes para uso na próxima etapa. Neste exemplo de saída, o arquivo é mysql-bin-changelog.000031 e a posição é 107.

File Position ----------------------------------- mysql-bin-changelog.000031 107 -----------------------------------

Agora, copie o banco de dados da instância de banco de dados de origem para a réplica de várias fontes usando mysqldump, como no exemplo a seguir.

mysqldump --databases database_name \ --single-transaction \ --compress \ --order-by-primary \ -u RDS_user_name \ -p RDS_password \ --host=RDS Endpoint | mysql \ --host=RDS Endpoint \ --port=3306 \ -u RDS_user_name \ -p RDS_password

Depois de copiar o banco de dados, é possível definir o parâmetro somente leitura como OFF na instância de banco de dados de origem.

Etapa 2: Iniciar a replicação das instâncias de banco de dados de origem para a réplica de várias fontes

Para cada instância de banco de dados de origem, use as credenciais de usuário principal para se conectar à instância e executar os dois procedimentos armazenados a seguir. Esses procedimentos armazenados configuram a replicação em um canal e iniciam a replicação. Este exemplo usa o nome do arquivo de log binário e a posição da saída do exemplo na etapa anterior.

CALL mysql.rds_set_external_source_for_channel('mysourcehost.example.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 0, 'channel_1'); CALL mysql.rds_start_replication_for_channel('channel_1');

Para ter mais informações sobre como usar esses procedimentos armazenados e outros para configurar e gerenciar os canais de replicação, consulte Gerenciar a replicação de várias fontes.

Usar filtros com replicação de várias fontes

É possível usar filtros de replicação para especificar quais bancos de dados e tabelas são replicados em uma réplica de várias fontes. Os filtros de replicação podem incluir bancos de dados e tabelas na replicação ou excluí-los da replicação. Para ter mais informações sobre filtros de replicação , consulte Configurar filtros de replicação com MySQL.

Com a replicação de várias fontes, é possível configurar filtros de replicação globalmente ou em nível de canal. A filtragem em nível de canal está disponível somente com instâncias de banco de dados compatíveis que executam a versão 8.0. Os exemplos a seguir mostram como gerenciar filtros globalmente ou em nível de canal.

Observe os seguintes requisitos e comportamento com a filtragem na replicação de várias fontes:

  • Aspas invertidas (``) ao redor dos nomes dos canais são obrigatórias.

  • Se você alterar os filtros de replicação no grupo de parâmetros, sql_thread das réplicas de várias fontes de todos os canais com atualizações será reiniciado para aplicar as alterações dinamicamente. Se uma atualização envolver um filtro global, todos os canais de replicação no estado de execução serão reiniciados.

  • Todos os filtros globais são aplicados antes de qualquer filtro específico do canal.

  • Se um filtro for aplicado globalmente e em nível de canal, somente o filtro em nível de canal será aplicado. Por exemplo, se os filtros forem replicate_ignore_db="db1,`channel_22`:db2", replicate_ignore_db definido como db1 será aplicado a todos os canais, exceto a channel_22 e somente channel_22 ignorará as alterações de db2.

Exemplo 1: Definir um filtro global

No exemplo a seguir, o banco de dados temp_data é excluído da replicação em todos os canais.

Para Linux, macOS ou Unix:

aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "ParameterName=replicate-ignore-db,ParameterValue='temp_data',ApplyMethod=immediate"

Exemplo 2: Definir um filtro em nível de canal

No exemplo a seguir, as alterações do banco de dados sample22 são incluídas somente no canal channel_22. Da mesma forma, as alterações do banco de dados sample99 são incluídas apenas no canal channel_99.

Para Linux, macOS ou Unix:

aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "ParameterName=replicate-do-db,ParameterValue='\`channel_22\`:sample22,\`channel_99\`:sample99',ApplyMethod=immediate"

Monitorar canais de replicação de várias fontes

É possível monitorar canais individuais em uma réplica de várias fontes usando os seguintes métodos:

  • Para monitorar o status de todos os canais ou de um canal específico, conecte-se à réplica de várias fontes e execute o comando SHOW REPLICA STATUS ou SHOW REPLICA STATUS FOR CHANNEL 'channel_name'. Para ter mais informações, consulte Checking Replication Status na documentação do MySQL.

  • Para receber uma notificação quando um canal de replicação for iniciado, interrompido ou removido, use a notificação de eventos do RDS. Para ter mais informações, consulte Trabalhar com a notificação de eventos do Amazon RDS.

  • Para monitorar o atraso de um canal específico, confira a métrica ReplicationChannelLag. Os pontos de dados dessa métrica têm um período de 60 segundos (1 minuto) e ficam disponíveis por 15 dias. Para localizar o atraso de replicação de um canal, use o identificador da instância e o nome do canal de replicação. Para receber uma notificação quando esse atraso exceder um determinado limite, configure um alarme do CloudWatch. Para ter mais informações, consulte Monitorar métricas do Amazon RDS com o Amazon CloudWatch.

Considerações e práticas recomendadas para replicação de várias fontes

Antes de usar a replicação de várias fontes no RDS para MySQL, analise as seguintes considerações e práticas recomendadas:

  • Garanta que uma instância de banco de dados configurada como uma réplica de várias fontes tenha recursos suficientes, como throughput, memória, CPU e IOPS, para lidar com a workload de instâncias de várias fontes.

  • Monitore regularmente a utilização de recursos na réplica de várias fontes e ajuste a configuração do armazenamento ou da instância para lidar com a workload sem sobrecarregar os recursos.

  • É possível configurar a replicação multithread em uma réplica de várias fontes definindo a variável do sistema replica_parallel_workers com um valor maior que 0. Nesse caso, o número de threads alocados para cada canal é o valor dessa variável, mais um thread coordenador para gerenciar os threads aplicadores.

  • Configure os filtros de replicação corretamente para evitar conflitos. Para replicar um banco de dados inteiro em outro banco de dados em uma réplica, é possível usar a opção --replicate-rewrite-db. Por exemplo, é possível replicar todas as tabelas no banco de dados A no banco de dados B em uma instância de réplica. Essa abordagem pode ser útil quando todas as instâncias de origem estão usando a mesma convenção de nomenclatura de esquema. Para ter informações sobre a opção --replicate-rewrite-db, consulte Replica Server Options and Variables na documentação do MySQL.

  • Para evitar erros de replicação, evite gravar na réplica. Recomendamos habilitar o parâmetro read_only em réplicas de várias fontes para bloquear as operações de gravação. Isso ajuda a eliminar problemas de replicação causados por operações de gravação conflitantes.

  • Para melhor a performance das operações de leitura, como classificações e junções de alta carga que são executadas na réplica de várias fontes, pense em usar leituras otimizadas pelo RDS. Esse recurso pode ajudar com consultas que dependem de grandes tabelas temporárias ou arquivos de classificação. Para ter mais informações, consulte Melhorar a performance das consultas para o RDS para MySQL com leituras otimizadas do Amazon RDS.

  • Para minimizar o atraso na replicação e melhorar a performance de uma réplica de várias fontes, pense em habilitar gravações otimizadas. Para ter mais informações, consulte Melhorar a performance das gravações com gravações otimizadas pelo RDS para MySQL.

  • Execute operações de gerenciamento (como alterar a configuração) em um canal por vez e evite realizar alterações em vários canais a partir de várias conexões. Essas práticas podem causar conflitos nas operações de replicação. Por exemplo, a execução simultânea de procedimentos rds_skip_repl_error_for_channel e rds_start_replication_for_channel de várias conexões pode causar a omissão de eventos em um canal diferente do pretendido.

  • É possível habilitar backups em uma instância de replicação de várias fontes e exportar dados dessa instância para um bucket do Amazon S3 para armazená-los para fins de longo prazo. No entanto, é importante também configurar backups com retenção adequada nas instâncias de origem individuais. Para ter informações sobre como exportar dados de snapshot para o Amazon S3, consulte Exportação de dados de snapshot de banco de dados para o Amazon S3 para Amazon RDS.

  • Para distribuir a workload de leitura em uma réplica de várias fontes, é possível criar réplicas de leitura de uma réplica de várias fontes. É possível localizar essas réplicas de leitura em Regiões da AWS diferentes com base nos requisitos da aplicação. Para ter mais informações sobre réplicas de leitura, consulte Trabalhar com réplicas de leitura MySQL.

Limitações da replicação de várias fontes do RDS para MySQL

As seguintes limitações se aplicam à replicação de várias fontes no RDS para MySQL:

  • No momento, o RDS para MySQL comporta a configuração de no máximo 15 canais para uma réplica de várias fontes.

  • Uma instância de réplica de leitura não pode ser configurada como uma réplica de várias fontes.

  • Para configurar a replicação de várias fontes no RDS para MySQL executando a versão 5.7 do mecanismo, o Performance Schema deve estar habilitado na instância de réplica. A ativação do Performance Schema é opcional no RDS para MySQL executando a versão 8.0 do mecanismo.

  • Para o RDS para MySQL que executa a versão 5.7 do mecanismo, os filtros de replicação se aplicam a todos os canais de replicação. Para o RDS para MySQL que executa a versão 8.0 do mecanismo, é possível configurar filtros que se aplicam a todos os canais de replicação ou a canais individuais.

  • Restaurar um snapshot do RDS ou realizar uma recuperação para um ponto no tempo (PITR) não restaura configurações de canais de réplica de várias fontes.

  • Ao criar uma réplica de leitura por meio de uma réplica de várias fontes, ela replica apenas os dados da instância de várias fontes. Ela não restaura a configuração de nenhum canal.

  • O MySQL não comporta a configuração de um número diferente de operadores paralelos para cada canal. Cada canal recebe o mesmo número de operadores paralelos com base no valor replica_parallel_workers.

As seguintes limitações adicionais se aplicarão se o destino de replicação de várias fontes for um cluster de banco de dados multi-AZ:

  • É necessário configurar um canal para uma instância de origem do RDS para MySQL antes de qualquer gravação nessa instância.

  • Cada instância do RDS para MySQL de origem deve ter a replicação baseada em GTID habilitada.

  • Um evento de failover no cluster de banco de dados remove a configuração de replicação de várias fontes. A restauração dessa configuração requer a repetição das etapas de configuração.