Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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,102 views

Published on

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

  • 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

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>

×