Replicação MySQL Fundamentos, Funcionamento, Monitoração e Aplicação na Prática HTI Consultoria e Tecnologia Alexandre M d...
O que é replicação? <ul><li>Replicação => Duplicação </li></ul><ul><li>Não é uma exclusividade de BD </li></ul><ul><li>Cri...
Replicar porquê? <ul><li>Aumentar/melhorar:  </li></ul><ul><ul><li>Disponibilidade </li></ul></ul><ul><ul><li>capacidade <...
Componentes  (principais) <ul><li>Master </li></ul><ul><li>Slave </li></ul><ul><li>Binary Log </li></ul><ul><li>Relay Log ...
Master <ul><li>Operações de escrita ou escrita/leitura </li></ul><ul><li>Um master pode ter vários slaves </li></ul>
Slave <ul><li>Exclusivamente para leitura </li></ul><ul><li>Um slave pode ter somente um master </li></ul><ul><li>Hardware...
Binary Log 1/2 <ul><li>Registro de toda alteração no banco </li></ul><ul><li>Somente “UPDATES” => DDL/DML </li></ul><ul><l...
Binary Log 2/2 <ul><li>… </li></ul><ul><li># at 263 </li></ul><ul><li>#111026 17:28:54 server id 100   end_log_pos 366  Qu...
Relay Log <ul><li>Cópia do Binary Log </li></ul><ul><li>Lado do Slave </li></ul>
I/O Thread <ul><li>Lado do Slave </li></ul><ul><li>Responsável por: </li></ul><ul><ul><li>“ Download” do Binary Log </li><...
SQL Thread <ul><li>Lado do Slave </li></ul><ul><li>“ Lê o Relay Log ”  e  “ aplica ”  na base </li></ul><ul><li>Gerenciame...
Topologia  1/2
Topologia  2/2 <ul><li>One way </li></ul><ul><ul><li>Master    n Slave(s) </li></ul></ul><ul><li>Two way (master/master) ...
Exemplo de Mundo Real
Montando uma Replicação 1/5 (servidor Master) <ul><li>Ligar Binary Log & Id do servidor </li></ul><ul><li>Editando o arqui...
Montando uma Replicação 2/5 (servidor Master)
Montando uma Replicação 3/5 (servidor slave) <ul><li>Ajuste o id do servidor, editando o my.cnf </li></ul><ul><ul><li>[mys...
Montando uma Replicação 4/5 (servidor slave) <ul><li>Pegue a posição e arquivo da replicação  </li></ul><ul><ul><li>shell>...
Montando uma Replicação 5/5 (servidor slave) <ul><li>E deixe a mágica começar </li></ul><ul><ul><li>mysql>  START SLAVE; <...
Monitorando Replicação  1/4 <ul><li>MySQL Monitoring Dashboard  (MES) </li></ul><ul><li>MONyog </li></ul><ul><li>OpManager...
Monitorando Replicação  2/4
Monitorando Replicação  3/4
Monitorando Replicação  4/4 <ul><li># ------------------------------ MASTER-A </li></ul><ul><li>#master_a_3306=`/usr/local...
Já imaginou como usar? <ul><li>Back up on line </li></ul><ul><li>Back up on line    off-line   </li></ul><ul><li>Escalabi...
Dicas Importantes <ul><li>Natureza Assíncrona </li></ul><ul><li>Serialização  </li></ul><ul><li>Hardware envolvido </li></...
Ufa! <ul><li>Perguntas & Respostas </li></ul><ul><li>(Atenção! Tomates não são permitidos) </li></ul>
<ul><li>Obrigado! </li></ul>
Upcoming SlideShare
Loading in …5
×

Fundamentos Replicação MySQL

3,013 views

Published on

Replicação MySQL Fundamentos, Funcionamento, Monitoração e Aplicação na Prática

1 Comment
1 Like
Statistics
Notes
  • Alexandre muito bom a alguns anos atrás fiz uma replicação e como estava começando documentar não era algo da vez, então passou batido, tive que fazer novamente este documento veio bem a calhar.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
3,013
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
119
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

Fundamentos Replicação MySQL

  1. 1. Replicação MySQL Fundamentos, Funcionamento, Monitoração e Aplicação na Prática HTI Consultoria e Tecnologia Alexandre M de Almeida www.hti.com.br [email_address]
  2. 2. O que é replicação? <ul><li>Replicação => Duplicação </li></ul><ul><li>Não é uma exclusividade de BD </li></ul><ul><li>Criar e manter uma “ réplica ” </li></ul><ul><ul><li>de uma base inteira </li></ul></ul><ul><ul><li>de bases ou tabelas específicas </li></ul></ul>
  3. 3. Replicar porquê? <ul><li>Aumentar/melhorar: </li></ul><ul><ul><li>Disponibilidade </li></ul></ul><ul><ul><li>capacidade </li></ul></ul><ul><ul><li>peformance </li></ul></ul>
  4. 4. Componentes (principais) <ul><li>Master </li></ul><ul><li>Slave </li></ul><ul><li>Binary Log </li></ul><ul><li>Relay Log </li></ul><ul><li>IO Thread </li></ul><ul><li>SQL Thread </li></ul>
  5. 5. Master <ul><li>Operações de escrita ou escrita/leitura </li></ul><ul><li>Um master pode ter vários slaves </li></ul>
  6. 6. Slave <ul><li>Exclusivamente para leitura </li></ul><ul><li>Um slave pode ter somente um master </li></ul><ul><li>Hardware depende da aplicação do slave </li></ul><ul><li>É o slave que determina o master </li></ul>
  7. 7. Binary Log 1/2 <ul><li>Registro de toda alteração no banco </li></ul><ul><li>Somente “UPDATES” => DDL/DML </li></ul><ul><li>Registro ordenado => Offset </li></ul><ul><li>Back UP incremental </li></ul><ul><li>Recuperação RTO/RPO </li></ul><ul><li>Aumento de I/O disco </li></ul><ul><li>Sensível redução de performance </li></ul><ul><li>Lado do Master* </li></ul>
  8. 8. Binary Log 2/2 <ul><li>… </li></ul><ul><li># at 263 </li></ul><ul><li>#111026 17:28:54 server id 100 end_log_pos 366 Query thread_id=7 exec_time=0 error_code=0 </li></ul><ul><li>SET TIMESTAMP=1319635734/*!*/; </li></ul><ul><li>create database vamos_replicar </li></ul><ul><li>/*!*/; </li></ul><ul><li># at 366 </li></ul><ul><li>#111026 17:29:36 server id 100 end_log_pos 526 Query thread_id=7 exec_time=0 error_code=0 </li></ul><ul><li>use vamos_replicar/*!*/; </li></ul><ul><li>SET TIMESTAMP=1319635776/*!*/; </li></ul><ul><li>create table belezinha (id int not null auto_increment primary key, texto varchar(100)) </li></ul><ul><li>/*!*/; </li></ul><ul><li># at 526 </li></ul><ul><li>#111026 17:29:54 server id 100 end_log_pos 604 Query thread_id=7 exec_time=0 error_code=0 </li></ul><ul><li>SET TIMESTAMP=1319635794/*!*/; </li></ul><ul><li>BEGIN </li></ul><ul><li>/*!*/; </li></ul><ul><li># at 604 </li></ul><ul><li>#111026 17:29:54 server id 100 end_log_pos 632 Intvar </li></ul><ul><li>SET INSERT_ID=1/*!*/; </li></ul><ul><li># at 632 </li></ul><ul><li>#111026 17:29:54 server id 100 end_log_pos 760 Query thread_id=7 exec_time=0 error_code=0 </li></ul><ul><li>SET TIMESTAMP=1319635794/*!*/; </li></ul><ul><li>insert into belezinha values (null,'primeiro registro') </li></ul><ul><li>/*!*/; </li></ul><ul><li># at 760 </li></ul><ul><li>#111026 17:29:54 server id 100 end_log_pos 787 Xid = 515 </li></ul><ul><li>COMMIT/*!*/; </li></ul>
  9. 9. Relay Log <ul><li>Cópia do Binary Log </li></ul><ul><li>Lado do Slave </li></ul>
  10. 10. I/O Thread <ul><li>Lado do Slave </li></ul><ul><li>Responsável por: </li></ul><ul><ul><li>“ Download” do Binary Log </li></ul></ul><ul><ul><li>Gravação do Relay Log </li></ul></ul><ul><li>Permissão “Replication Slave” </li></ul><ul><li>Gerenciamento de Posição </li></ul>
  11. 11. SQL Thread <ul><li>Lado do Slave </li></ul><ul><li>“ Lê o Relay Log ” e “ aplica ” na base </li></ul><ul><li>Gerenciamento de posição </li></ul>
  12. 12. Topologia 1/2
  13. 13. Topologia 2/2 <ul><li>One way </li></ul><ul><ul><li>Master  n Slave(s) </li></ul></ul><ul><li>Two way (master/master) </li></ul><ul><ul><li>Master  Master </li></ul></ul><ul><li>Circular </li></ul><ul><ul><li>Master a  Master b  Master a </li></ul></ul>
  14. 14. Exemplo de Mundo Real
  15. 15. Montando uma Replicação 1/5 (servidor Master) <ul><li>Ligar Binary Log & Id do servidor </li></ul><ul><li>Editando o arquivo de configuração (my.cnf) </li></ul><ul><ul><li>[mysqld] </li></ul></ul><ul><ul><li>… </li></ul></ul><ul><ul><li>log-bin </li></ul></ul><ul><ul><li>server-id = 100 </li></ul></ul><ul><li>Baixar & Subir o servidor (mysqld) </li></ul><ul><li>Criar usuário para o(s) slave(s) </li></ul><ul><ul><li>mysql> GRANT REPLICATION SLAVE </li></ul></ul><ul><ul><li>ON *.* TO chupacabras@’10.1.1.%’ </li></ul></ul><ul><ul><li>IDENTIFIED BY ‘senha123’; </li></ul></ul>
  16. 16. Montando uma Replicação 2/5 (servidor Master)
  17. 17. Montando uma Replicação 3/5 (servidor slave) <ul><li>Ajuste o id do servidor, editando o my.cnf </li></ul><ul><ul><li>[mysqld]  faça coisa certa mysqld e não mysql </li></ul></ul><ul><ul><li>… </li></ul></ul><ul><ul><li>server-id=200 </li></ul></ul><ul><li>Baixar & Subir servidor (mysql) </li></ul><ul><li>Restaurar a backup no slave </li></ul><ul><ul><li>shell> mysql -uuser –p < minhabkp.sql </li></ul></ul>
  18. 18. Montando uma Replicação 4/5 (servidor slave) <ul><li>Pegue a posição e arquivo da replicação </li></ul><ul><ul><li>shell> head –n25 minhabkp.sql </li></ul></ul><ul><ul><li>… </li></ul></ul><ul><ul><li>-- </li></ul></ul><ul><ul><li>-- Position to start replication or point-in-time recovery from </li></ul></ul><ul><ul><li>-- </li></ul></ul><ul><ul><li>CHANGE MASTER TO MASTER_LOG_FILE='mysqld-bin.000001', MASTER_LOG_POS=263; </li></ul></ul><ul><li>Diga ao slave quem dá as cartas </li></ul><ul><ul><li>shell> CHANGE MASTER TO </li></ul></ul><ul><ul><li>MASTER_HOST = '10.1.1.11', </li></ul></ul><ul><ul><li>MASTER_PORT = 3306, </li></ul></ul><ul><ul><li>MASTER_USER = 'chupacabras', </li></ul></ul><ul><ul><li>MASTER_PASSWORD = 'senha123', </li></ul></ul><ul><ul><li>MASTER_LOG_FILE = 'mysqld-bin.000001', </li></ul></ul><ul><ul><li>MASTER_LOG_POS = 263, </li></ul></ul><ul><ul><li>MASTER_CONNECT_RETRY=10; </li></ul></ul>
  19. 19. Montando uma Replicação 5/5 (servidor slave) <ul><li>E deixe a mágica começar </li></ul><ul><ul><li>mysql> START SLAVE; </li></ul></ul><ul><li>Verifique se está tudo funcionando </li></ul><ul><ul><li>mysql> SHOW SLAVE STATUSG </li></ul></ul><ul><ul><ul><ul><li>*************************** 1. row *************************** </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Slave_IO_State: Waiting for master to send event </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Slave_IO_Running: Yes </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Slave_SQL_Running: Yes </li></ul></ul></ul></ul><ul><ul><ul><ul><li>… </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Seconds_Behind_Master: 0 </li></ul></ul></ul></ul><ul><ul><ul><ul><li>… </li></ul></ul></ul></ul>
  20. 20. Monitorando Replicação 1/4 <ul><li>MySQL Monitoring Dashboard (MES) </li></ul><ul><li>MONyog </li></ul><ul><li>OpManager </li></ul><ul><li>MaatKit </li></ul><ul><li>Modo Escorpião </li></ul>
  21. 21. Monitorando Replicação 2/4
  22. 22. Monitorando Replicação 3/4
  23. 23. Monitorando Replicação 4/4 <ul><li># ------------------------------ MASTER-A </li></ul><ul><li>#master_a_3306=`/usr/local/mysql/bin/mysql -uhti -p'hti_monitor_123' -h192.168.1.1 -P3306 riel_producao -e &quot;select variable_value from information_schema.global_status where variable_name = 'slave_running';&quot; --batch --skip-column-names` </li></ul><ul><li># ------------------------------ SLAVE-A </li></ul><ul><li>slave_a_3306=`/usr/local/mysql/bin/mysql -uhti -p'hti_monitor_123' -h192.168.1.3 -P3306 -e &quot;select variable_value from information_schema.global_status where variable_name = 'slave_running';&quot; --batch --skip-column-names` </li></ul><ul><li># ------------------------------ SLAVE-B </li></ul><ul><li>slave_b_3306=`/usr/local/mysql/bin/mysql -uhti -p'hti_monitor_123' -h192.168.1.10 -P3306 -e &quot;select variable_value from information_schema.global_status where variable_name = 'slave_running';&quot; --batch --skip-column-names` </li></ul><ul><li># ------------------------------ VERIFICACOES </li></ul><ul><li>servers=&quot;Servidores com falha na replicacao: &quot; </li></ul><ul><li>[ &quot;$slave_a_3306&quot; != &quot;ON&quot; ] && servers=$servers&quot;[slave_a:3306] ” </li></ul><ul><li>[ &quot;$slave_b_3306&quot; != &quot;ON&quot; ] && servers=$servers&quot;[slave_b:3306] ” </li></ul><ul><li>[ ${#servers} != 36 ] && echo $servers | mail -s ’[MONITORAMENTO: FALHA REPLICACAO]’ socorro@hti.com.br </li></ul>
  24. 24. Já imaginou como usar? <ul><li>Back up on line </li></ul><ul><li>Back up on line  off-line </li></ul><ul><li>Escalabilidade </li></ul><ul><li>Alta disponibilidade </li></ul><ul><li>Distribuição Geográfica </li></ul><ul><li>Usuários malas e seus relatórios </li></ul><ul><li>Manutenção, etc </li></ul>
  25. 25. Dicas Importantes <ul><li>Natureza Assíncrona </li></ul><ul><li>Serialização </li></ul><ul><li>Hardware envolvido </li></ul><ul><li>Monitoramento </li></ul><ul><li>READ_ONLY </li></ul>
  26. 26. Ufa! <ul><li>Perguntas & Respostas </li></ul><ul><li>(Atenção! Tomates não são permitidos) </li></ul>
  27. 27. <ul><li>Obrigado! </li></ul>

×