Implementação de Cluster de Alta Disponibilidade para MySQL com PXC

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.

Tags: MySQL PXC Percona_XtraDB_Cluster Galera cluster_de_alta_disponibilidade

Publicado em 6-10 23:52 por Thomas