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

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

[ Hits: 5.903 ]

 


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

Treinamento shell script com Júlio Neves em Brasília

Fedora Directory Server

Como ler notícias com paywall

Servidor de domínios Samba com troca de senha obrigatória

Instalando o PostgreSQL no GNU/Linux

  

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