Replicação de Banco de Dados MySQL com Percona XtraDB

Publicado por Cássio Fonseca em 11/11/2013

[ Hits: 7.058 ]

 


Replicação de Banco de Dados MySQL com Percona XtraDB



Nesta dica, irei passar um tutorial slbre como instalar e configurar a replicação de MySQL utilizando o Percona XtraDB.

Distribuição: CentOS
  • Node 1: 10.1.31.70
  • Node 2: 10.1.31.71
  • Node 3: 10.1.31.72

Passo 1: baixe e instale os repositórios EPEL disponibilizados pelo site do Percona:

# rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm

Passo 2: faça a instalação do Percona:

# yum install Percona-XtraDB-Cluster-server Percona-XtraDB-Cluster-client

Passo 3: agora, devemos criar a configuração responsável pela replicação dos nodes:

# vi /etc/my.cnf

Dentro desta configuração, insira o seguinte conteúdo:

1º Nó:

[mysqld]

datadir=/var/lib/mysql
user=mysql
wsrep_provider=/usr/lib64/libgalera_smm.so
wsrep_cluster_address=gcomm://
binlog_format=ROW
default_storage_engine=InnoDB
innodb_locks_unsafe_for_binlog=1
innodb_autoinc_lock_mode=2
wsrep_node_address= 10.1.31.70
wsrep_sst_method=xtrabackup
wsrep_cluster_name=NOME_DO_CLUSTER
wsrep_sst_auth="USERREPLICACAO:PASSWD"
wsrep_provider_options="gcache.size=1G;"
wsrep_slave_threads=16
wsrep_causal_reads=ON
wsrep_replicate_myisam=1
wsrep_url=gcomm://10.1.31.70,gcmm://10.1.31.71,gcomm://10.1.31.72,gcomm://

2º Nó:

[mysqld]

datadir=/var/lib/mysql
user=mysql
wsrep_provider=/usr/lib64/libgalera_smm.so
wsrep_cluster_address=gcomm://10.1.31.70  # Aqui você deve colocar o IP do servidor do qual o 2º nó irá copiar os dados;
binlog_format=ROW
default_storage_engine=InnoDB
innodb_locks_unsafe_for_binlog=1
innodb_autoinc_lock_mode=2
wsrep_node_address= 10.1.31.71
wsrep_sst_method=xtrabackup
wsrep_cluster_name=NOME_DO_CLUSTER
wsrep_sst_auth="USERREPLICACAO:PASSWD"
wsrep_provider_options="gcache.size=1G;"
wsrep_slave_threads=16
wsrep_causal_reads=ON
wsrep_replicate_myisam=1
wsrep_url=gcomm://10.1.31.70,gcmm://10.1.31.71,gcomm://10.1.31.72,gcomm://

3º Nó:

[mysqld]

datadir=/var/lib/mysql
user=mysql
wsrep_provider=/usr/lib64/libgalera_smm.so
wsrep_cluster_address=gcomm://10.1.31.71  # Aqui você deve colocar o IP do servidor do qual o 3º nó irá copiar os dados;
binlog_format=ROW
default_storage_engine=InnoDB
innodb_locks_unsafe_for_binlog=1
innodb_autoinc_lock_mode=2
wsrep_node_address= 10.1.31.72
wsrep_sst_method=xtrabackup
wsrep_cluster_name=NOME_DO_CLUSTER
wsrep_sst_auth="USERREPLICACAO:PASSWD"
wsrep_provider_options="gcache.size=1G;"
wsrep_slave_threads=16
wsrep_causal_reads=ON
wsrep_replicate_myisam=1
wsrep_url=gcomm://10.1.31.70,gcmm://10.1.31.71,gcomm://10.1.31.72,gcomm://

Passo 4: no 1º Nó, deve executar o seguinte comando para startar o serviço do MySQL:

# /etc/init.d/mysql start --wsrep-cluster-address="gcomm://"

Obs.: para acompanhar o start dos outros nós, configure o usuário root para o 1º nó e acesse o MySQL; assim que logar, execute o comando...

# show status like "wsrep_cluster_size%";

Ele irá retornar a quantidade de nós que estão conectados ao Cluster:
  
 +--------------------+-------+
 | Variable_name      | Value |
 +--------------------+-------+
 | wsrep_cluster_size | 3     |
 +--------------------+-------+
  
  
Nos demais, você terá que startar com o comando simples:

# /etc/init.d/mysql start

Passo 5: configurando os usuários:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'PASSWD' with grant option;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'PASSWD' with grant option;

Após vamos criar o usuário para replicação:

mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 's3cret';
mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';

Obs.: este usuário sstuser, crie apenas no master. Teoricamente, ele irá replicar estas informações.

Passo 6: vamos aos testes:

Crie databases em ambos os nodes e veja se ambos compartilham os DBs criados.

Pare o serviço do MySQL de um dos nodes. No node com serviço ativo, crie algumas databases e insira conteúdo, logo em seguida, ative o serviço do node parado e veja se o conteúdo criado será compartilhado (faça o procedimento com ambos os nodes para um teste mais completo).

Faça um reboot em um dos nodes, insira conteúdo no node ativo, logo em seguida, acesse novamente o node parado e veja se o conteúdo foi compartilhado.

Force um kernel Panic em um dos nodes, e insira os dados em outro. Quando o node problemático restaurar, verifique se o mesmo está com a aplicação correta.

Observação: segue alguns comandos úteis:

mysql> CREATE DATABASE PERCONA;
mysql> USE PERCONA;
mysql> CREATE TABLE tabela (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, data VARCHAR(100));
mysql> INSERT INTO tabela(data) VALUES ('$a');

Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

O que pensar sobre Linus Torvalds

Postando scripts no Wordpress

League of Legends no Ubuntu - Instalação

Ubuntu: instalando programa local com gdebi

Livro: Como implementar IA na sua empresa (Gratuito)

  

Comentários
[1] Comentário enviado por inforalex em 17/01/2014 - 15:20h

A INSTALAÇÃO DO PERCONA TEM QUE SER REALIZADA EM TODOS OS SERVIDORES OU APENAS NO MASTER??

[2] Comentário enviado por fonsecacassio em 17/01/2014 - 15:41h

Olá inforalex,

O Percona deve ser instalado em todos os servidores, o que vai diferenciar um do outro é a configuração do MY.CNF e o start do nó principal.

Qualquer duvida estou á disposição.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts