domingo, 19 de janeiro de 2014

MySQL Replication pode pegar

Original post: http://anothermysqldba.blogspot.com/2014/01/can-mysql-replication-catch-up.html

Assim, a replicação foi recentemente melhorado no MySQL 5.6. No entanto, as pessoas ainda estão usando 5.1 e 5.5 para algumas dessas melhorias vão ter que esperar para atingir o mundo real.

Recentemente, ajudou a mover nessa direção com uma solução de replicação localizado geo-. Uma parte do país tinha um servidor MySQL 5.1 ea outra parte do país, teve um novo servidor MySQL 5.6 instalado.

Depois de lidar com as questões de conseguir o apoio de dados inicial do primário para o servidor secundário (levou várias horas para dizer o mínimo), eu tinha que decidir poderia replicação apanhar e manter-se. O servidor primário teve algumas grandes consultas e otimização é sempre um bom lugar para começar. Eu tinha que se o servidor secundário puxar e aplicar o mais rápido que pude em primeiro lugar.

Então, aqui estão algumas coisas para verificar e manter em mente quando se trata de replicação. Eu adicionei alguns links abaixo que ajudam a apoiar os meus pensamentos como eu trabalhei nisto.

A replicação pode ser muito I / O pesado. Dependendo da sua aplicação. Um blog não tem que várias escritas de modo a replicação I / O é leve, mas um servidor primário fortemente escrito e atualizado vai levar a um servidor de replicação escrevendo um monte de relay_logs e binary_logs se eles estão habilitados. Logs binários podem ser habilitados no secundário para permitir que você executar backups ou você pode querer esse servidor seja um primário para os outros.

Eu dividir os logs em uma partição de dados diferente do diretório de dados.
Isso é definido no arquivo my.cnf - relay-log

O buffer pool do InnoDB já foi definido para um valor mais de 10GB. Isso foi muito para este servidor.
O servidor foi mais de 90.000 segundos atrás ainda.

Então eu comecei a fazer alguns ajustes para o servidor e acabou com essas configurações no final. Concedido a cada servidor é diferente.

mysql> select @ @ sync_relay_log_info \ G
*************************** 1. linha ***************************
@ @ Sync_relay_log_info: 0
1 row in set (0.08 sec)

mysql> select @ @ innodb_flush_log_at_trx_commit \ G
*************************** 1. linha ***************************
@ @ Innodb_flush_log_at_trx_commit: 2
1 row in set (0.00 sec)

mysql> select @ @ log_slave_updates \ G
*************************** 1. linha ***************************
@ @ Log_slave_updates: 0

mysql> select @ @ sync_binlog \ G
*************************** 1. linha ***************************
@ @ Sync_binlog: 0
1 row in set (0.00 sec)

mysql> select @ @ max_relay_log_size \ G
*************************** 1. linha ***************************
@ @ Max_relay_log_size: 268435456

Virei o log binário fora como eu monitorados diferentes configurações e opções para ajudar a replicação catch up. Demorou um pouco. Algumas das configurações que você vê acima pode ou não ter sido aplicada como eu trabalhei dentro deste prazo. No entanto, se pegar para 0 segundos atrás. Agora você pode notar que muitas dessas configurações acima referem e em torno do log binário. Então eu corri um pequeno teste. Então, eu reiniciado e permitiu que os registros de lixo. Eu verifiquei com o servidor mais tarde e descobriu que mais de 10.000 segundos atrás. Então eu, mais uma vez reiniciado e desativados os logs de lixo. Ele pego (0 segundos atrás) com o servidor principal em menos de 15 minutos. Eu costumava Aurimas ' ferramenta como eu assisti-lo apanhar também. Se você não usá-lo antes, é uma ferramenta muito agradável e acessível.

O que tudo isto significa é o servidor primário deve ser compatível com ACID. Com esta configuração você também está dependendo do sistema operacional para o cache e limpar. Este é o servidor vai ser utilizado como um servidor de ler principalmente para alimentar informação aos outros. Isso também significa que, sim, a replicação localizado geo-pode manter-se atualizado com um servidor primário.

E se você precisa parar o escravo, isso ainda será pegar rapidamente?

Como e por que você parar o escravo é a minha primeira resposta. Você deve adquirir o hábito de usar STOP SLAVE SQL_THREAD , em vez de STOP SLAVE ; Isso permite que os relay logs para continuar a recolher dados e simplesmente não aplicá-lo ao seu servidor primário. Então, se você pode tirar vantagem de que ele vai ajudar a reduzir o tempo que leva para que você possa preencher os relay logs mais tarde.

Algumas leituras adicionais para você: