27
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 protected]

Fundamentos Replicação MySQL

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Fundamentos Replicação MySQL

Replicação MySQLFundamentos, Funcionamento,

Monitoração e Aplicação na Prática

HTI Consultoria e TecnologiaAlexandre M de Almeida

[email protected]

Page 2: Fundamentos Replicação MySQL

O que é replicação?

• Replicação => Duplicação

• Não é uma exclusividade de BD

• Criar e manter uma “réplica”– de uma base inteira– de bases ou tabelas específicas

Page 3: Fundamentos Replicação MySQL

Replicar porquê?

• Aumentar/melhorar: – Disponibilidade– capacidade– peformance

Page 4: Fundamentos Replicação MySQL

Componentes (principais)

• Master

• Slave

• Binary Log

• Relay Log

• IO Thread

• SQL Thread

Page 5: Fundamentos Replicação MySQL

Master

• Operações de escrita ou escrita/leitura

• Um master pode ter vários slaves

Page 6: Fundamentos Replicação MySQL

Slave

• Exclusivamente para leitura

• Um slave pode ter somente um master

• Hardware depende da aplicação do slave

• É o slave que determina o master

Page 7: Fundamentos Replicação MySQL

Binary Log 1/2

• Registro de toda alteração no banco• Somente “UPDATES” => DDL/DML• Registro ordenado => Offset• Back UP incremental• Recuperação RTO/RPO• Aumento de I/O disco• Sensível redução de performance• Lado do Master*

Page 8: Fundamentos Replicação MySQL

Binary Log 2/2…# at 263#111026 17:28:54 server id 100 end_log_pos 366 Query thread_id=7 exec_time=0 error_code=0SET TIMESTAMP=1319635734/*!*/;create database vamos_replicar/*!*/;# at 366#111026 17:29:36 server id 100 end_log_pos 526 Query thread_id=7 exec_time=0 error_code=0use vamos_replicar/*!*/;SET TIMESTAMP=1319635776/*!*/;create table belezinha (id int not null auto_increment primary key, texto varchar(100))/*!*/;# at 526#111026 17:29:54 server id 100 end_log_pos 604 Query thread_id=7 exec_time=0 error_code=0SET TIMESTAMP=1319635794/*!*/;BEGIN/*!*/;# at 604#111026 17:29:54 server id 100 end_log_pos 632 IntvarSET INSERT_ID=1/*!*/;# at 632#111026 17:29:54 server id 100 end_log_pos 760 Query thread_id=7 exec_time=0 error_code=0SET TIMESTAMP=1319635794/*!*/;insert into belezinha values (null,'primeiro registro')/*!*/;# at 760#111026 17:29:54 server id 100 end_log_pos 787 Xid = 515COMMIT/*!*/;

Page 9: Fundamentos Replicação MySQL

Relay Log

• Cópia do Binary Log

• Lado do Slave

Page 10: Fundamentos Replicação MySQL

I/O Thread

• Lado do Slave

• Responsável por:– “Download” do Binary Log– Gravação do Relay Log

• Permissão “Replication Slave”

• Gerenciamento de Posição

Page 11: Fundamentos Replicação MySQL

SQL Thread

• Lado do Slave

• “Lê o Relay Log” e “aplica” na base

• Gerenciamento de posição

Page 12: Fundamentos Replicação MySQL

Topologia 1/2

Page 13: Fundamentos Replicação MySQL

Topologia 2/2

• One wayMaster n Slave(s)

• Two way (master/master)Master Master

• CircularMaster a Master b Master a

Page 14: Fundamentos Replicação MySQL

Exemplo de Mundo Real

Page 15: Fundamentos Replicação MySQL

Montando uma Replicação 1/5(servidor Master)

• Ligar Binary Log & Id do servidor• Editando o arquivo de configuração (my.cnf)

[mysqld] … log-bin server-id = 100

• Baixar & Subir o servidor (mysqld)• Criar usuário para o(s) slave(s)

mysql> GRANT REPLICATION SLAVEON *.* TO chupacabras@’10.1.1.%’ IDENTIFIED BY ‘senha123’;

Page 16: Fundamentos Replicação MySQL

Montando uma Replicação 2/5(servidor Master)

Page 17: Fundamentos Replicação MySQL

Montando uma Replicação 3/5(servidor slave)

• Ajuste o id do servidor, editando o my.cnf[mysqld] faça coisa certa mysqld e não mysql

server-id=200

• Baixar & Subir servidor (mysql)

• Restaurar a backup no slaveshell> mysql -uuser –p < minhabkp.sql

Page 18: Fundamentos Replicação MySQL

Montando uma Replicação 4/5(servidor slave)

• Pegue a posição e arquivo da replicação shell> head –n25 minhabkp.sql …---- Position to start replication or point-in-time recovery from--CHANGE MASTER TO MASTER_LOG_FILE='mysqld-bin.000001', MASTER_LOG_POS=263;

• Diga ao slave quem dá as cartas shell> CHANGE MASTER TO MASTER_HOST = '10.1.1.11', MASTER_PORT = 3306, MASTER_USER = 'chupacabras', MASTER_PASSWORD = 'senha123', MASTER_LOG_FILE = 'mysqld-bin.000001', MASTER_LOG_POS = 263,

MASTER_CONNECT_RETRY=10;

Page 19: Fundamentos Replicação MySQL

Montando uma Replicação 5/5(servidor slave)

• E deixe a mágica começarmysql> START SLAVE;

• Verifique se está tudo funcionandomysql> SHOW SLAVE STATUS\G

*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventSlave_IO_Running: YesSlave_SQL_Running: Yes… Seconds_Behind_Master: 0…

Page 20: Fundamentos Replicação MySQL

Monitorando Replicação 1/4

• MySQL Monitoring Dashboard (MES)

• MONyog

• OpManager

• MaatKit

• Modo Escorpião

Page 21: Fundamentos Replicação MySQL

Monitorando Replicação 2/4

Page 22: Fundamentos Replicação MySQL

Monitorando Replicação 3/4

Page 23: Fundamentos Replicação MySQL

Monitorando Replicação 4/4

# ------------------------------ MASTER-A#master_a_3306=`/usr/local/mysql/bin/mysql -uhti -p'hti_monitor_123' -h192.168.1.1 -P3306 riel_producao -e "select variable_value from information_schema.global_status where variable_name = 'slave_running';" --batch --skip-column-names`

# ------------------------------ SLAVE-Aslave_a_3306=`/usr/local/mysql/bin/mysql -uhti -p'hti_monitor_123' -h192.168.1.3 -P3306 -e "select variable_value from information_schema.global_status where variable_name = 'slave_running';" --batch --skip-column-names`

# ------------------------------ SLAVE-Bslave_b_3306=`/usr/local/mysql/bin/mysql -uhti -p'hti_monitor_123' -h192.168.1.10 -P3306 -e "select variable_value from information_schema.global_status where variable_name = 'slave_running';" --batch --skip-column-names`

# ------------------------------ VERIFICACOES

servers="Servidores com falha na replicacao: "

[ "$slave_a_3306" != "ON" ] && servers=$servers"[slave_a:3306] ”

[ "$slave_b_3306" != "ON" ] && servers=$servers"[slave_b:3306] ”

[ ${#servers} != 36 ] && echo $servers | mail -s ’[MONITORAMENTO: FALHA REPLICACAO]’ [email protected]

Page 24: Fundamentos Replicação MySQL

Já imaginou como usar?

• Back up on line

• Back up on line off-line

• Escalabilidade

• Alta disponibilidade

• Distribuição Geográfica

• Usuários malas e seus relatórios

• Manutenção, etc

Page 25: Fundamentos Replicação MySQL

Dicas Importantes

• Natureza Assíncrona

• Serialização

• Hardware envolvido

• Monitoramento

• READ_ONLY

Page 26: Fundamentos Replicação MySQL

Ufa!

Perguntas & Respostas(Atenção! Tomates não são permitidos)

Page 27: Fundamentos Replicação MySQL

Obrigado!