Páginas

sábado, 1 de março de 2014

Replicação série Mysql: Desempenho e Disponibilidade

Boa tarde pessoal,

Replicação é um método de duplicar sua informação para aumentar a disponibilidade, capacidade e performance, existem vários tipos de réplicas a (One Way) Master/Slave,  (Two Way) Master/Master, Circular (Master -> Master -> Master), para capacidade e performance também podemos abordar clusters de MySql, porém eu não tenho ambiente o suficiente para isso :(.
NOTA: Se você pretende replicar uma base, crie uma nova, replique a vazia e mude o caminho da aplicação se sua base for muito grande existe um passo no qual é necessário um DUMP do banco e isso pode realmente demorar horas.



Como funciona no ambiente real.


E mão na massa!!!

Configuração do Master

Primeiramente precisamos definir 2 (dois) parâmetros essenciais o log-bin e o server-id.

Eles deverão ser adicionados na tag [mysqld]  do arquivo my.cnf 
[mysqld]
log-bin=mysql-bin
server-id=1


Nota
Se você omitir o server-id (ou setar explicitamente para o valor 0), o Master ira recusar as conexões de todos os slaves.


Configuração do Slave

No slave a configuração inicia um pouco mais simples necessitando apenas de 1 (um) parâmetro o server-id

Eles deverá ser adicionados na tag [mysqld]  do arquivo my.cnf
[mysqld]
server-id=2


Nota
Se você omitir o server-id (ou setar explicitamente para o valor 0), o slave irá se recusar a conectar ao master.

Configuração da Conexão Slave no Master


Para criar um usuário ele não precisa ter todos os acessos de um DB Admin, basta ter o acesso de REPLICATION SLAVE e ele poderá conectar no master.

mysql> CREATE USER 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.mydomain.com';

Restart o servidor, não faça Reload que não funciona.

Obtendo o Binary Log do Master

O binary log é utilizado pelo slave para replicar as informações, para verificarmos qual o binary utilizado pelo sistema basta utilizar o seguinte comando.
mysql > SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 73       | test         | manual,mysql     |
+------------------+----------+--------------+------------------+

Agora vem a parte delicada da coisa se você usa InnoDB, se você utiliza Myisam é mais simples basta olhar na documentação da bibliografia.

Existem vários métodos para fazer isso eu particularmente gosto de utilizar o mysqldump devido a praticidade e não precisar parar o server pois há outros serviços rodando e eu não vou replicar todos de uma vez
 mysql -u root -p
 
 flush tables with read lock;
 
 mysqldump basedados -u root -p > /tmp/basedados.sql;gzip /tmp/basedados.sql
 
 unlock tables

Dependendo do tamanho da sua base de dados pode demorar de segundos a horas.

Carregando o Slave

Carregue a base de dados no slave e ligue o serviço utilizando os seguintes comandos

mysql -u root -p < basededados.sql
mysql> START SLAVE;

Carregando o Master no Slave


Essa configuração faz com que o Slave se lembre do master e esta tudo ok, é possível fazer essa configuração no my.cnf também.
mysql> CHANGE MASTER TO
    ->     MASTER_HOST='master_host_name',
    ->     MASTER_USER='replication_user_name',
    ->     MASTER_PASSWORD='replication_password',
    ->     MASTER_LOG_FILE='recorded_log_file_name',
    ->     MASTER_LOG_POS=recorded_log_position;

Para checar o status do Slave basta utilizar o comando abaixo

show slave status;

Bibliografia

http://dev.mysql.com/doc/refman/5.1/en/replication-howto.html

Nenhum comentário:

Postar um comentário