Skip to content

🐬 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
bash
sudo apt install rsync

2. 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.

bash
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 update

b. Instalação do MariaDB Server e Galera

bash
# Para MariaDB 10.4+ ou posterior, galera-4 é o provider
sudo apt install mariadb-server mariadb-client galera-4 -y

c. 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.

bash
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:

bash
# 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 enable

4. 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

ini
[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.

bash
# 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-cluster

b. 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.

bash
sudo systemctl start mariadb

6. 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:

bash
sudo mariadb -u root -p

Dentro do shell do MariaDB:

sql
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

  1. No nó 1, crie um novo banco de dados e uma tabela:

    sql
    CREATE 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!');
  2. 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;
  3. Insira dados no segundo nó:

    sql
    INSERT INTO messages (text) VALUES ('Hello from node2!');
  4. Verifique no primeiro nó se o dado está presente:

    sql
    USE 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

bash
sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf

Configuraçã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.

ini
bind-address = 0.0.0.0

Consideraçõ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