Autor: Dauro Lima Sobrinho
Este tutorial tem como objetivo auxiliar a instalação e configuração de uma solução de alta disponibilidade com replicação dos dados no SGBD Percona Server 5.6.26, utilizando Percona Xtrabackup e o keepalived.
Distribuição: CentOS 6.7
Node 1: 10.1.31.70
Node 2: 10.1.31.71
1º Passo: Instalar o repositório Percona.
yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
2º Passo: Instalar o SGBD Percona.
yum install Percona-XtraDB-Cluster-56.x86_64 percona-xtrabackup.x86_64 galera.x86_64
3º Passo: Inicializar o serviço do SGBD Percona.
4º Passo: Criar usuário para a replicação.
CREATE USER '[USER_NAME]'@'localhost' IDENTIFIED BY '[PASSWORD]';
GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO ‘[USER_NAME]’@’localhost’;
flush privileges;
5º Passo: Configurar o my.cnf dos servidores.
MASTER: 10.1.31.70
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
wsrep_provider=/usr/lib64/libgalera_smm.so
wsrep_cluster_address=gcomm://10.1.31.71
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-v2
wsrep_cluster_name=[CLUSTER_NAME]
wsrep_sst_auth=”[USER_NAME]:[PASSWORD]” —– Criados no 4º Passo
wsrep_provider_options=”gcache.size=1G;”
wsrep_slave_threads=16
wsrep_causal_reads=ON
wsrep_replicate_myisam=1
wsrep_node_name=2
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
wsrep_url=gcomm://10.1.31.70,gcomm://10.1.31.71
SLAVE: 10.1.31.71
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
wsrep_provider=/usr/lib64/libgalera_smm.so
wsrep_cluster_address=gcomm://10.1.31.70
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-v2
wsrep_cluster_name=[CLUSTER_NAME]
wsrep_sst_auth=”[USER_NAME]:[PASSWORD]” —– Criados no 4º Passo
wsrep_provider_options=”gcache.size=1G;”
wsrep_slave_threads=16
wsrep_causal_reads=ON
wsrep_replicate_myisam=1
wsrep_node_name=1
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
wsrep_url=gcomm://10.1.31.70,gcomm://10.1.31.71
6º Passo: Subir o serviço do SGBD Percona.
/etc/init.d/mysql start
7º Passo: Verificar se todos os nós estão ativos.
show status like “wsrep_cluster_size%”;
+——————–+——-+
| Variable_name | Value |
+——————–+——-+
| wsrep_cluster_size | 2 |
+——————–+——-+
8º Passo: Testar.
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.
Alguns comandos úteis: CREATE DATABASE PERCONA; USE PERCONA; CREATE TABLE tabela (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, data VARCHAR(100)); INSERT INTO tabela(data) VALUES (‘$a’);
9º Passo: Instalar o serviço do keepalived.
yum install keepalived.x86_64
10º Passo: Criar uma interface com VIP.
vi /etc/sysconfig/network-scripts/eth0\:0
DEVICE=eth0:0
TYPE=Ethernet
ONBOOT=yes
IPV6INIT=no
NM_CONTROLLED=no
BOOTPROTO=none
IPADDR=10.1.31.72
PREFIX=24
GATEWAY=10.1.31.1
11º Passo: Configurar o serviço keepalived.
vi /etc/keepalived/keepalived.conf
MASTER: 10.1.31.70
global_defs {
notification_email {
[EMAIL]@[DOMAIN]
}
notification_email_from [EMAIL]@[DOMAIN]
smtp_server [RELAY_SERVER]
smtp_connect_timeout 60
router_id [ROUTER_NAME]
}
vrrp_script chk_pxc {
script "/usr/bin/clustercheck clustercheck password 0"
interval 1
}
vrrp_instance PXC {
interface eth0
state MASTER
virtual_router_id 51
priority 100
advert_int 1
garp_master_delay 5
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.31.72 dev eth0
}
track_script {
chk_pxc
}
notify_master “/bin/echo ‘now master’ > /tmp/keepalived.state”
notify_backup “/bin/echo ‘now backup’ > /tmp/keepalived.state”
notify_fault “/bin/echo ‘now fault’ > /tmp/keepalived.state”
}
SLAVE: 10.1.31.71
global_defs {
notification_email {
[EMAIL]@[DOMAIN]
}
notification_email_from [EMAIL]@[DOMAIN]
smtp_server [RELAY_SERVER]
smtp_connect_timeout 60
router_id [ROUTER_NAME]
}
vrrp_script chk_pxc {
script "/usr/bin/clustercheck clustercheck password 0"
interval 1
}
vrrp_instance PXC {
interface eth0
state SLAVE
virtual_router_id 51
priority 99
advert_int 1
garp_master_delay 5
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.31.72 dev eth0
}
track_script {
chk_pxc
}
notify_master “/bin/echo ‘now master’ > /tmp/keepalived.state”
notify_backup “/bin/echo ‘now backup’ > /tmp/keepalived.state”
notify_fault “/bin/echo ‘now fault’ > /tmp/keepalived.state”
}
12º Passo: Reiniciar todos os serviços
SLAVE: 10.1.31.71
/etc/init.d/network restart
/etc/init.d/mysql restart
/etc/init.d/keepalived restart
MASTER: 10.1.31.70
/etc/init.d/network restart
/etc/init.d/mysql restart
/etc/init.d/keepalived restart
13º Passo: Verificar status dos servidores
cat /tmp/keepalived.state
ip add
Observação:
Em caso de indisponibilidade dos dois servidores:
Será necessário alterar o parâmetro wsrep_cluster_address do servidor 10.1.31.70 para wsrep_cluster_address=gcomm://.
Em seguida, subir o serviço dos dois servidores (10.1.31.70 e 10.1.31.71).
Por último, voltar as configurações (wsrep_cluster_address=gcomm://10.1.31.71) do servidor 10.1.31.70 e reiniciar o serviço.
Fontes:
http://www.vivaolinux.com.br/dica/Replicacao-de-Banco-de-Dados-MySQL-com-Percona-XtraDB
https://www.percona.com/doc/percona-server/5.5/installation/yum_repo.html
Atualizado: 19/07/2018 16:45