Con­fi­gu­rar um cluster MariaDB com Galera Cluster melhora a con­fi­a­bi­li­dade e facilita o es­ca­lo­na­mento do seu banco de dados. A seguir, mostramos como instalar um Galera Cluster no Ubuntu 20.04.

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

Para instalar um Galera Cluster no MariaDB no Ubuntu 20.04, você deve cumprir os seguintes re­qui­si­tos:

  • Vários ser­vi­do­res: precisa de pelo menos três ser­vi­do­res ou máquinas virtuais para criar um cluster. Todos os ser­vi­do­res devem estar na mesma rede.
  • Per­mis­sões de root: você precisa ter acesso root ou, pelo menos, per­mis­sões de ad­mi­nis­tra­dor nos ser­vi­do­res.

Guia passo a passo: con­fi­gu­rar um Galera Cluster MariaDB no Ubuntu 20.04

Um Galera Cluster do MariaDB é uma solução prática de base de dados que melhora a dis­po­ni­bi­li­dade, a in­te­gri­dade dos dados e a es­ca­la­bi­li­dade para apli­ca­ções exigentes. Acom­pa­nha­mos você no processo de con­fi­gu­ra­ção de um Galera Cluster do MariaDB no Ubuntu 20.04. Antes de começar, cer­ti­fi­que-se de que tem 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: atualize os pacotes

É essencial que primeiro atualize o seu sistema Ubuntu para a versão mais recente, para garantir que possui os pacotes e as atu­a­li­za­ções de segurança mais recentes.

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

sudo apt update
shell

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

sudo apt upgrade -y
shell

Também é re­co­men­dá­vel eliminar pacotes obsoletos ou não uti­li­za­dos para limpar os ser­vi­do­res:

sudo apt autoremove -y
shell

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

Agora instale o MariaDB em cada um dos seus ser­vi­do­res. A partir da versão 10.1, os pacotes Galera estão incluídos nos ser­vi­do­res MariaDB.

sudo apt install mariadb-server
shell

Após a ins­ta­la­ção, inicie o serviço MariaDB:

sudo systemctl start mariadb
shell

Execute o seguinte comando para que o MariaDB seja ativado au­to­ma­ti­ca­mente sempre que o sistema for rei­ni­ci­ado:

sudo systemctl enable mariadb
shell

Verifique se o MariaDB está a ser executado:

sudo systemctl status mariadb
shell

Faça alguns ajustes básicos de segurança e configure a base 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 através dos passos ne­ces­sá­rios, como definir uma palavra-passe root, eliminar uti­li­za­do­res anónimos ou eliminar a base 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 solicita primeiro a senha root atual. Se for a primeira vez que instala o MariaDB no Ubuntu 20.04, basta pres­si­o­nar a tecla Enter e in­tro­du­zir uma nova senha.

Passo 3: configure os nós do Galera Cluster no MariaDB

Crie um ficheiro cnf no diretório /etc/mysql/conf.d de cada nó para definir a con­fi­gu­ra­ção es­pe­cí­fica do Galera.

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

O ficheiro contém a con­fi­gu­ra­ção geral da base de dados, como o formato do protocolo binário e o motor de ar­ma­ze­na­mento pre­de­fi­nido. Também contém con­fi­gu­ra­ções para o Galera Cluster, incluindo o nome do cluster e o endereço do cluster.

Introduza as seguintes linhas no primeiro nó:

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Configuración del proveedor de Galera
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Configuración del Galera Cluster
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://node_1-ip-address,node_2-ip-address,node_3-ip-address"
# Configuración de sincronización de Galera
wsrep_sst_method=rsync
# Configuración del nodo de Galera
wsrep_node_address="node_1-ip-address"
wsrep_node_name="node_1"
shell
  • Con­fi­gu­ra­ção geral da base de dados: inclui con­fi­gu­ra­ções como binlog_format=ROW para o formato de registo binário e default-storage-engine=innodb para o motor de ar­ma­ze­na­mento pre­de­fi­nido.
  • Con­fi­gu­ra­ção do for­ne­ce­dor Galera: con­fi­gu­ra­ções como wsrep_on=ON para ativar a re­pli­ca­ção Galera e wsrep_provider=/usr/lib/galera/libgalera_smm.so para es­pe­ci­fi­car o caminho para a bi­bli­o­teca Galera.
  • Con­fi­gu­ra­ção do Galera Cluster: 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 os nomes dos hosts dos nós do cluster.
  • Con­fi­gu­ra­ção de sin­cro­ni­za­ção do Galera: configura o método para a trans­fe­rên­cia de ins­tan­tâ­neos 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 o nome do host do nó atual (wsrep_node_address) e o nome do nó (wsrep_node_name).

Depois de guardar o ficheiro, crie um para o segundo nó:

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Configuración del proveedor de Galera
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Configuración del Galera Cluster
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://node_1-ip-address,node_2-ip-address,node_3-ip-address"
# Configuración de sincronización de Galera
wsrep_sst_method=rsync
# Configuración del nodo de Galera
wsrep_node_address="node_2-ip-address"
wsrep_node_name="node_2"
shell

Agora faça o mesmo com o último nó:

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Configuración del proveedor de Galera
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Configuración del Galera Cluster
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://node_1-ip-address,node_2-ip-address,node_3-ip-address"
# Configuración de sincronización de Galera
wsrep_sst_method=rsync
# Configuración del nodo de Galera
wsrep_node_address="node_3-ip-address"
wsrep_node_name="node_3"
shell

Passo 4: modifique a firewall nos ser­vi­do­res

Como os nós comunicam entre si através de de­ter­mi­na­das portas, é ne­ces­sá­rio ajustar a con­fi­gu­ra­ção do firewall.

Abra as seguintes portas no seu firewall:

  • Porta 3306: é a porta padrão do MariaDB. É utilizada para comunicar com a base de dados e realizar pedidos.
  • Portas do Galera: além da porta padrão 3306, o Galera também utiliza outras portas para a co­mu­ni­ca­ção interna entre os nós. As portas padrão do Galera são ge­ral­mente 4567, 4568 e 4444 para a trans­fe­rên­cia de ins­tan­tâ­neos de estado (State Snapshot Transfer, SST).

Configure as regras 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: inicie o Galera Cluster no MariaDB

Pare o serviço MariaDB se já estiver em execução:

sudo systemctl stop mariadb
shell

O comando seguinte inicia o servidor MariaDB e cria um novo Galera Cluster 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

Deve obter o seguinte resultado:

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

O primeiro nó foi iniciado cor­re­ta­mente.

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

Na consola, verá o seguinte:

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

Agora começa o terceiro nó:

systemctl start mariadb
shell

Verifique se o nó está a funcionar 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: teste a re­pli­ca­ção

Cer­ti­fi­que-se de que consegue ligar-se a cada um dos nós do cluster. Utilize o cliente MariaDB para iniciar sessão como uti­li­za­dor root ou como outro uti­li­za­dor com per­mis­sões su­fi­ci­en­tes.

mysql -u root -p
shell

Crie um novo banco de dados de teste (test_db) num dos nós do cluster:

CREATE DATABASE test_db;
sql

Inicie sessão nos outros nós e verifique se a base de dados de teste existe:

SHOW DATABASES;
sql

A base de dados de teste deve aparecer na lista de bases de dados:

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

Adicione uma nova tabela de teste (test_table) à base de dados de teste (test_db):

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

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

INSERT INTO test_table (name) VALUES ('Alicia'), ('Juan'), ('Carlos');
sql

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

USE test_db;
SELECT * FROM test_table;
sql

O resultado mostra a lista de pessoas com os seus nomes e ID:

+----+-----------+
| id | name    |
+----+-----------+
| 1  | Alicia     |
| 2  | Juan       |
| 3  | Carlos |
+----+----------+
sql

Assim, pode modificar um registo de dados na tabela de teste:

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

Tente eliminar um registo de dados:

DELETE FROM test_table WHERE name = 'Juan';
sql

Verifique nos outros nós se as mo­di­fi­ca­ções e eli­mi­na­ções foram re­pli­ca­das:

SELECT * FROM test_table;
sql

As al­te­ra­ções aparecem cor­re­ta­mente em cada nó:

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