Introdução ao Percona XtraDB Cluster (PXC)
O Percona XtraDB Cluster (PXC) fornece uma abordagem para alta disponibilidade em ambientes MySQL, baseada em replicação síncrona. Um cluster é composto por múltiplos nós, recomendando-se no mínimo três para garantir redundância, embora possa funcionar com dois.
Princípios Fundamentais do PXC
O PXC alinha-se à teoria CAP de sistemas distribuídos, priorizando consistência (todos os nós mantêm dados idênticos) e disponibilidade (o serviço permanece acessível mesmo com falhas em alguns nós), com tolerância a partições limitada. Benefícios incluem alta disponibilidade, replicação quase sem latência, suporte a escritas em múltiplos nós (idealmente com dados particionados previamente), implantação automática de novos nós, consistência estrita de dados e compatibilidade total com MySQL.
Conceitos Chave
- Write Set (WS): Conjunto de dados gerados por transações de escrita.
- Incremental State Transfer (IST): Sincronização incremental de estados entre nós.
- State Sanpshot Transfer (SST): Sincronização completa de estados. Métodos suportados incluem mysqldump, rsync e xtrabackup. O xtrabackup-v2 é preferido, pois não requer READ LOCK durante o processo.
- UUID e GTID: Identificadores únicos para mudanças de estado no cluster, compostos por UUID e número de sequência.
- WSREP API: Inetrface entre o sistema de banco de dados e o provedor wsrep.
Portas Necessárias
O PXC utiliza portas específicas: 3306 para instâncias MySQL, 4567 para comunicação entre nós do cluster, 4444 para transferência completa (SST) e 4568 para transferência incremental (IST).
Passo a Passo para Implantação
1. Definição dos Nós
Configure três nós com IPs exclusivos, por exemplo:
pxc_nó_0: 192.0.0.197
pxc_nó_1: 192.0.0.198
pxc_nó_2: 192.0.0.199
2. Configuração do Firewall
Desative o firewall ou abra as portas necessárias. Para desatviar permanentemente:
systemctl stop firewalld.service
systemctl disable firewalld.service
Ou, para liberar portas individualmente (exemplo para 3306):
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
Repita o comando para as portas 4444, 4567 e 4568.
3. Desativando SELinux
Para desativar permanentemente, edite /etc/selinux/config e defina SELINUX=disabled. Para desativar temporariamente:
setenforce 0
4. Instalação dos Pacotes
Em cada nó, instale dependências e o software PXC:
yum -y groupinstall "Base" "Compatibility libraries" "Development tools"
yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm -y
yum install Percona-XtraDB-Cluster-55 -y
5. Configuração do Arquivo my.cnf
Pare o serviço MySQL e configure /etc/my.cnf em cada nó. Exemplo para o primeiro nó:
[mysqld]
server-id=101
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=cluster_pxc
wsrep_cluster_address=gcomm://192.0.0.197,192.0.0.198,192.0.0.199
wsrep_node_name=nó_primário
wsrep_node_address=192.0.0.197
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=admin:SenhaSegura_789
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
Ajuste server-id e wsrep_node_name/endereço para cada nó.
6. Iniciando o Primeiro Nó
Inicie o nó primário em modo bootstrap para inicializar o cluster:
systemctl start mysql@bootstrap.service
Em caso de reinicialização, mate o processo e remova o arquivo PID antes de executar o comando.
7. Configuração de Acesso e Usuários
Defina a senha root e crie um usuário para SST:
UPDATE mysql.user SET password=PASSWORD("Nova_Root_123") WHERE user='root';
CREATE USER 'sst_user'@'localhost' IDENTIFIED BY 's3nh4_forte';
GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sst_user'@'localhost';
FLUSH PRIVILEGES;
8. Iniciando os Demais Nós
Nos outros nós, inicie o MySQL normalmente:
systemctl start mysql
As credenciais de acesso são sincronizadas automaticamente a partir do nó primário.
9. Comandos Úteis para Monitoramento
Verifique o número de nós no cluster:
SHOW GLOBAL STATUS LIKE 'wsrep_cluster_size';
Consulte o estado do cluster e do nó atual:
SHOW GLOBAL STATUS LIKE 'wsrep_cluster_status';
SHOW GLOBAL STATUS LIKE 'wsrep_ready';
Confirme a operação das portas via netstat:
netstat -plantu | grep mysqld
10. Gerenciamento e Notas Importantes
Para desligar o cluster, pare todos os nós com systemctl stop mysql. Ao reiniciar, o último nó a ser desligado de forma segura deve ser iniciado primeiro como primário (bootstrap). Se a desligamento não foi seguro, edite /var/lib/mysql/grastate.dat e defina safe_to_bootstrap=1 antes de iniciar como primário. Permissões de banco de dados configuradas no nó primário são replicadas automaticamente para os outros nós.