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');