🐬 MariaDB Galera Cluster
Introdução
O MariaDB é um fork do MySQL, oferecendo recursos avançados e alta compatibilidade. Este documento descreve o processo de instalação e configuração do MariaDB Galera Cluster na PMDF.
Instalação
Esta instalação segue como base o MariaDB Galera Cluster Guide.
1. Pré-requisitos
- Pelo menos três nós
- Sistema Operacional Linux
- Relógios dos servidores sincronizados
- Acesso por SSH para configuração
- Conectividade entre os nós
- rsync: Instalação do rsync em todos os nós para State Snapshot Transfers (SST)
- Utilização do template da PMDF com a personalização e parametrização de segurança
sudo apt install rsync2. Instalação em cada um dos nós
Instalar o MariaDB Server e o serviço de replicação Galera em todos os nós do seu cluster.
a. Adicionar o repositório do MariaDB
Recomendada a utilização dos repositórios oficiais para que seja instalada a versão mais atual e estável.
sudo apt update
sudo apt install dirmngr software-properties-common apt-transport-https ca-certificates curl -y
curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup | sudo bash
sudo apt updateb. Instalação do MariaDB Server e Galera
# Para MariaDB 10.4+ ou posterior, galera-4 é o provider
sudo apt install mariadb-server mariadb-client galera-4 -yc. Hardening de instalação do MariaDB
Execute o script de segurança em cada um dos nós para definir a senha de root e remover configurações padrão inseguras.
sudo mariadb-secure-installation- Defina uma senha de root forte
- Responda Y para remover usuários anônimos, permitir acesso remoto como root, para remover o test database e recarregar a tabela de privilégios.
3. Configuração de Firewall
Abra as portas necessárias em cada um dos nós para garantir a intercomunicação entre os nós do cluster:
# Exemplo para UFW (Ubuntu)
# MariaDB client connections
sudo ufw allow 3306/tcp
# Galera replication (multicast and unicast)
sudo ufw allow 4567/tcp
# Galera replication (multicast)
sudo ufw allow 4567/udp
# Incremental State Transfer (IST)
sudo ufw allow 4568/tcp
# State Snapshot Transfer (SST)
sudo ufw allow 4444/tcp
sudo ufw reload
# Se o firewall ainda não estiver habilitado
sudo ufw enable4. Configurar o Galera Cluster
Crie um arquivo de configuração (/etc/mysql/conf.d/galera.cnf) em cada um dos nós. O conteúdo será basicamente idêntico, com mudanças específicas para cada um dos nomes e endereços dos nós.
Exemplo do conteúdo do galera.cnf
[mysqld]
# Basic MariaDB settings
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
# Binds to all network interfaces. Ajuste para um IP privado específico se necessário
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
# Ajuste o caminho se for diferente (ex: /usr/lib64/galera-4/libgalera_smm.so)
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Galera Cluster Configuration
# Um nome único para seu cluster
wsrep_cluster_name="my_galera_cluster"
# Endereços IP de TODOS os nós no cluster, separados por vírgula.
# Use IPs privados se disponíveis para comunicação do cluster.
wsrep_cluster_address="gcomm://node1_ip_address,node2_ip_address,node3_ip_address"
# Configuração específica deste nó
# Deve ser único para cada nó (ex: node1, node2, node3)
wsrep_node_name="node1"
# Endereço IP deste nó específico
wsrep_node_address="node1_ip_address"Parâmetros importantes:
- wsrep_cluster_address: Lista com os endereços IP de todos os nós no cluster para cada um dos nós.
- wsrep_node_name: Deve ser único para cada nó (ex: node1, node2, node3).
- wsrep_node_address: Deve ser o endereço IP do nó que está sendo configurado.
5. Iniciando o Cluster
a. Inicialização do Primeiro nó
Inicie o primeiro nó do MariaDB com a opção --wsrep-new-cluster. Isso informa que estamos criando um novo cluster. Faça isso somente para o nó inicial do novo cluster.
# Certifique-se de que o serviço está parado
sudo systemctl stop mariadb
# Este comando frequentemente encapsula systemctl start --wsrep-new-cluster
sudo galera_new_cluster
# Alternativamente você pode usar:
# sudo systemctl start mariadb --wsrep-new-clusterb. Iniciando os nós subsequentes
Para o segundo e terceiro nós, inicie o serviço do MariaDB normalmente. Eles descobrirão e se unirão ao cluster usando o wsrep_cluster_address especificado na configuração.
sudo systemctl start mariadb6. Verificar a operação do cluster
Depois de todos os nós inicializados, verifique se estão no cluster.
a. Verificar o tamanho do cluster
Conecte-se ao MariaDB em qualquer nó e verifique o status do cluster:
sudo mariadb -u root -pDentro do shell do MariaDB:
SHOW STATUS LIKE 'wsrep_cluster_size';O valor deve corresponder à quantidade de nós do cluster (no nosso caso, 3).
b. Testar a replicação
No nó 1, crie um novo banco de dados e uma tabela:
sqlCREATE DATABASE test_db; USE test_db; CREATE TABLE messages (id INT AUTO_INCREMENT PRIMARY KEY, text VARCHAR(255)); INSERT INTO messages (text) VALUES ('Hello from node1!');Conecte-se no nó 2 ou 3 e verifique se o novo banco de dados e a nova tabela existem:
sql-- test_db deve aparecer SHOW DATABASES; USE test_db; -- 'Hello from node1!' deve aparecer SELECT * FROM messages;Insira dados no segundo nó:
sqlINSERT INTO messages (text) VALUES ('Hello from node2!');Verifique no primeiro nó se o dado está presente:
sqlUSE test_db; -- 'Hello from node2!' deve aparecer SELECT * FROM messages;
TIP
O Cluster MariaDB está funcionando corretamente após completar esses passos.
Configuração para acesso externo ao servidor
Para que os usuários e aplicações possam se conectar com o serviço, é necessário definir o bind-address no arquivo de configuração do MariaDB.
Localização do arquivo de configuração
sudo vim /etc/mysql/mariadb.conf.d/50-server.cnfConfiguração do bind-address
Altere a linha (aproximadamente linha 27) que contém o parâmetro bind-address e configure-o com 0.0.0.0 para aceitar conexões de qualquer endereço, ou defina IPs específicos separados por vírgula.
INFO
Este parâmetro não aceita máscaras de sub-redes.
bind-address = 0.0.0.0Considerações de Segurança
- Sempre configure um firewall adequadamente para limitar o acesso aos serviços MariaDB
- Use senhas fortes para todas as contas
- Considere usar SSL/TLS para comunicações entre nós do cluster em ambientes de produção
- Realize backups regulares do cluster