O Galera Cluster MariaDB melhora a dis­po­ni­bi­li­dade e facilita a es­ca­la­bi­li­dade do seu banco de dados. Neste tutorial, ensinamos como instalar o cluster Galera no Ubuntu 20.04.

Galera Cluster MariaDB: Pré-re­qui­si­tos

Para instalar um cluster MariaDB Galera no Ubuntu 20.04, você deve atentar-se aos seguintes re­qui­si­tos:

  • Múltiplos ser­vi­do­res: São ne­ces­sá­rios pelo menos três ser­vi­do­res ou máquinas virtuais para con­fi­gu­rar um cluster Galera no MariaDB. Todos os ser­vi­do­res devem estar na mesma rede.
  • Per­mis­sões de root: É ne­ces­sá­rio que você tenha acesso root ou, pelo menos, per­mis­sões ad­mi­nis­tra­ti­vas nos ser­vi­do­res.

Ins­tru­ções passo a passo: Con­fi­gu­rar Galera Cluster MariaDB no Ubuntu 20.04

O Galera Cluster MariaDB é uma solução prática de banco de dados que oferece alta dis­po­ni­bi­li­dade, in­te­gri­dade dos dados e es­ca­la­bi­li­dade para apli­ca­ções exigentes. Neste tutorial passo a passo, de­ta­lha­mos o processo de con­fi­gu­ra­ção do Galera Cluster MariaDB no Ubuntu 20.04. Antes de começar, cer­ti­fi­que-se de que você possui pelo menos três ser­vi­do­res ou máquinas virtuais dis­po­ní­veis para con­fi­gu­rar o cluster.

Passo 1: Atualizar pacotes

Primeiro, você deve atualizar seu sistema Ubuntu para a versão mais recente. Isso é essencial para garantir que você tenha pacotes e atu­a­li­za­ções de segurança atu­a­li­za­dos.

Abra um terminal e execute o seguinte comando para atualizar as fontes de pacotes:

sudo apt update
shell

Instale todas as atu­a­li­za­ções dis­po­ní­veis:

sudo apt upgrade -y
shell

É re­co­men­dá­vel que você também remova pacotes obsoletos ou não uti­li­za­dos para limpar os ser­vi­do­res:

sudo apt autoremove -y
shell

Passo 2: Instalar o MariaDB nos ser­vi­do­res

Agora, instale o MariaDB em cada um de seus ser­vi­do­res. Desde a versão 10.1, os pacotes do Galera também estão incluídos junto com o servidor MariaDB.

sudo apt install mariadb-server
shell

Após a ins­ta­la­ção, você pode iniciar o serviço MariaDB:

sudo systemctl start mariadb
shell

Use o seguinte comando para garantir que o MariaDB seja iniciado au­to­ma­ti­ca­mente a cada rei­ni­ci­a­li­za­ção do sistema:

sudo systemctl enable mariadb
shell

Verifique se o MariaDB está em execução:

sudo systemctl status mariadb
shell

Você também deve fazer algumas con­fi­gu­ra­ções básicas de segurança e con­fi­gu­rar o banco de dados. Para isso, inicie o as­sis­tente de con­fi­gu­ra­ção:

sudo mysql_secure_installation
shell

O as­sis­tente irá guiá-lo pelos passos, como definir uma senha de root, remover usuários anônimos e remover o banco de dados de teste.

Enter current password for root (enter for none):
 Switch to unix_socket authentication [Y/n] n
Change the root password? [Y/n] Y
New password:
Re-enter new password:
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
shell

O script pergunta primeiro pela senha atual do root (current password for root). Se você instalou agora o MariaDB no Ubuntu 20.04, pressione a tecla [Enter] e, em seguida, defina uma nova senha.

Passo 3: Con­fi­gu­rar nós do Galera Cluster MariaDB

Crie um arquivo cnf no diretório /etc/mysql/conf.d em cada nó para definir as con­fi­gu­ra­ções es­pe­cí­fi­cas do Galera.

nano /etc/mysql/conf.d/galera.cnf
shell

O arquivo deve incluir con­fi­gu­ra­ções gerais do banco de dados, como o formato de log binário e a engine de ar­ma­ze­na­mento padrão. Além disso, ele deve conter con­fi­gu­ra­ções para o cluster Galera, incluindo o nome do cluster e o endereço do cluster.

Adicione as seguintes linhas para o primeiro nó:

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
 
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
 
# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://node_1-ip-address,node_2-ip-address,node_3-ip-address"
 
# Galera Synchronization Configuration
wsrep_sst_method=rsync
 
# Galera Node Configuration
wsrep_node_address="node_1-ip-address"
wsrep_node_name="node_1"
shell
  • Con­fi­gu­ra­ções gerais do banco de dados: Incluem pa­râ­me­tros como binlog_format=ROW, que define o formato dos logs binários, e default-storage-engine=innodb, que define a engine de ar­ma­ze­na­mento padrão.
  • Con­fi­gu­ra­ção do provedor Galera: O parâmetro wsrep_on=ON ativa a re­pli­ca­ção Galera, e wsrep_provider=/usr/lib/galera/libgalera_smm.so define o caminho para a bi­bli­o­teca Galera.
  • Con­fi­gu­ra­ção do cluster Galera: Inclui o nome do cluster (wsrep_cluster_name) e o endereço do cluster (wsrep_cluster_address), que contêm os endereços IP ou nomes dos nós no cluster.
  • Sin­cro­ni­za­ção Galera: Define o método de trans­fe­rên­cia de estado (State Snapshot Transfer – SST), por exemplo, wsrep_sst_method=rsync.
  • Con­fi­gu­ra­ção do nó Galera: Define o endereço IP ou nome do host do nó atual (wsrep_node_address) e o nome do nó (wsrep_node_name).

Após salvar este arquivo, crie outro para o segundo nó:

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
 
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
 
# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://node_1-ip-address,node_2-ip-address,node_3-ip-address"
 
# Galera Synchronization Configuration
wsrep_sst_method=rsync
 
# Galera Node Configuration
wsrep_node_address="node_2-ip-address"
wsrep_node_name="node_2"
shell

Agora, siga com o último nó:

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
 
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
 
# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://node_1-ip-address,node_2-ip-address,node_3-ip-address"
 
# Galera Synchronization Configuration
wsrep_sst_method=rsync
 
# Galera Node Configuration
wsrep_node_address="node_3-ip-address"
wsrep_node_name="node_3"
shell

Passo 4: Alterar con­fi­gu­ra­ções de firewall nos ser­vi­do­res

Como os nós se comunicam entre si por meio de portas es­pe­cí­fi­cas, você deve ajustar as con­fi­gu­ra­ções do firewall.

Abra as seguintes portas no seu firewall:

  • Porta 3306: Essa é a porta padrão para o MariaDB. Ela é usada para co­mu­ni­ca­ção e consultas do banco de dados.
  • Portas do Galera: Além da porta padrão 3306, o Galera usa outras portas para co­mu­ni­ca­ção interna entre os nós. O intervalo padrão para portas do Galera ge­ral­mente é 4567, 4568 e 4444 para o State Snapshot Transfer (SST).

Você pode definir as con­fi­gu­ra­ções do firewall no seu servidor Ubuntu com o seguinte comando:

sudo ufw allow 3306,4567,4568,4444/tcp
sudo ufw allow 4567/udp
shell

Passo 5: Iniciar o Galera Cluster MariaDB

In­ter­rompa o serviço MariaDB, se ele já estiver em execução:

sudo systemctl stop mariadb
shell

Este comando inicia o servidor MariaDB e ini­ci­a­liza um novo cluster Galera no primeiro nó:

sudo galera_new_cluster
shell

Verifique o número de nós no cluster:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shell

Você deve ver a seguinte saída:

+---------------------------+-------------+
| Variable_name        | Value       |
+--------------------------+--------------+
| wsrep_cluster_size | 1              |
+--------------------------+--------------+
shell

O primeiro nó foi iniciado com sucesso.

Ative o segundo nó:

systemctl start mariadb
shell

Verifique se o número de nós aumentou:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shell

No console, você verá:

+---------------------------+-------------+
| Variable_name        | Value       |
+--------------------------+--------------+
| wsrep_cluster_size | 2              |
+--------------------------+--------------+
shell

Agora, inicie o terceiro nó:

systemctl start mariadb
shell

Verifique se o nó está fun­ci­o­nando cor­re­ta­mente:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shell

Agora, deve haver três nós no cluster:

+---------------------------+-------------+
| Variable_name        | Value       |
+--------------------------+--------------+
| wsrep_cluster_size | 3              |
+--------------------------+--------------+
shell

Passo 6: Testar re­pli­ca­ção

Cer­ti­fi­que-se de que você pode se conectar a cada nó no cluster. Use o cliente MariaDB para fazer login como usuário root ou como outro usuário com per­mis­sões adequadas.

mysql -u root -p
shell

Crie um novo banco de dados de teste em um dos nós do cluster:

CREATE DATABASE test_db;
sql

Faça login nos demais nós e verifique se o banco de dados de teste está presente nestes:

SHOW DATABASES;
sql

O banco de dados de teste deve aparecer na lista de bancos de dados:

+-------------------------------+
| Database                      |
+-------------------------------+
| information_schema            |
| mysql                         |
| performance_schema            |
| test_db                       |
| sys                           |
+-------------------------------+
sql

Adicione uma nova tabela de teste no banco de dados de teste:

USE test_db;
CREATE TABLE test_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50)
);
sql

Insira alguns dados de teste na coluna name da tabela de teste:

INSERT INTO test_table (name) VALUES ('Alice'), ('Bob'), ('Charlie');
sql

Verifique nos outros nós se a tabela de teste e os dados inseridos foram re­pli­ca­dos:

USE test_db;
SELECT * FROM test_table;
sql

A saída deve mostrar a lista de pessoas com os res­pec­ti­vos nomes e IDs:

+----+-----------+
| id | name      |
+----+-----------+
| 1  | Alice     |
| 2  | Bob       |
| 3  | Charlie   |
+----+-----------+
sql

Modifique um registro na tabela de teste:

UPDATE test_table SET name = 'David' WHERE name = 'Alice';
sql

Tente excluir um registro:

DELETE FROM test_table WHERE name = 'Bob';
sql

Verifique nos outros nós se as atu­a­li­za­ções e exclusões foram re­pli­ca­das:

SELECT * FROM test_table;
sql

As al­te­ra­ções devem ser re­a­li­za­das com sucesso em cada nó:

+----+-----------+
| id | name      |
+----+-----------+
| 1  | David     |
| 3  | Charlie   |
+----+-----------+
sql
Ir para o menu principal