Galera Cluster: configurar um cluster MariaDB no Ubuntu 20.04
Configurar um cluster MariaDB com Galera Cluster melhora a confiabilidade e facilita o escalonamento do seu banco de dados. A seguir, mostramos como instalar um Galera Cluster no Ubuntu 20.04.
Galera Cluster MariaDB: pré-requisitos
Para instalar um Galera Cluster no MariaDB no Ubuntu 20.04, você deve cumprir os seguintes requisitos:
- Vários servidores: precisa de pelo menos três servidores ou máquinas virtuais para criar um cluster. Todos os servidores devem estar na mesma rede.
- Permissões de root: você precisa ter acesso root ou, pelo menos, permissões de administrador nos servidores.
Guia passo a passo: configurar 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 disponibilidade, a integridade dos dados e a escalabilidade para aplicações exigentes. Acompanhamos você no processo de configuração de um Galera Cluster do MariaDB no Ubuntu 20.04. Antes de começar, certifique-se de que tem pelo menos três servidores ou máquinas virtuais disponíveis para configurar 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 atualizações de segurança mais recentes.
Abra um terminal e execute o seguinte comando para atualizar as fontes dos pacotes:
sudo apt updateshellInstale todas as atualizações disponíveis:
sudo apt upgrade -yshellTambém é recomendável eliminar pacotes obsoletos ou não utilizados para limpar os servidores:
sudo apt autoremove -yshellPasso 2: instale o MariaDB nos servidores
Agora instale o MariaDB em cada um dos seus servidores. A partir da versão 10.1, os pacotes Galera estão incluídos nos servidores MariaDB.
sudo apt install mariadb-servershellApós a instalação, inicie o serviço MariaDB:
sudo systemctl start mariadbshellExecute o seguinte comando para que o MariaDB seja ativado automaticamente sempre que o sistema for reiniciado:
sudo systemctl enable mariadbshellVerifique se o MariaDB está a ser executado:
sudo systemctl status mariadbshellFaça alguns ajustes básicos de segurança e configure a base de dados. Para isso, inicie o assistente de configuração:
sudo mysql_secure_installationshellO assistente irá guiá-lo através dos passos necessários, como definir uma palavra-passe root, eliminar utilizadores 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] YshellO script solicita primeiro a senha root atual. Se for a primeira vez que instala o MariaDB no Ubuntu 20.04, basta pressionar a tecla Enter e introduzir 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 configuração específica do Galera.
nano /etc/mysql/conf.d/galera.cnfshellO ficheiro contém a configuração geral da base de dados, como o formato do protocolo binário e o motor de armazenamento predefinido. Também contém configuraçõ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- Configuração geral da base de dados: inclui configurações como
binlog_format=ROWpara o formato de registo binário edefault-storage-engine=innodbpara o motor de armazenamento predefinido. - Configuração do fornecedor Galera: configurações como
wsrep_on=ONpara ativar a replicação Galera ewsrep_provider=/usr/lib/galera/libgalera_smm.sopara especificar o caminho para a biblioteca Galera. - Configuraçã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. - Configuração de sincronização do Galera: configura o método para a transferência de instantâneos de estado (State Snapshot Transfer, SST), por exemplo,
wsrep_sst_method=rsync. - Configuraçã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"shellAgora 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"shellPasso 4: modifique a firewall nos servidores
Como os nós comunicam entre si através de determinadas portas, é necessário ajustar a configuraçã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 comunicação interna entre os nós. As portas padrão do Galera são geralmente 4567, 4568 e 4444 para a transferência de instantâ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/udpshellPasso 5: inicie o Galera Cluster no MariaDB
Pare o serviço MariaDB se já estiver em execução:
sudo systemctl stop mariadbshellO comando seguinte inicia o servidor MariaDB e cria um novo Galera Cluster no primeiro nó:
sudo galera_new_clustershellVerifique o número de nós no cluster:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"shellDeve obter o seguinte resultado:
+---------------------------+-------------+
| Variable_name | Value |
+--------------------------+--------------+
| wsrep_cluster_size | 1 |
+--------------------------+------------ -+shellO primeiro nó foi iniciado corretamente.
Ative o segundo nó:
systemctl start mariadbshellVerifique se o número de nós aumentou:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"shellNa consola, verá o seguinte:
+---------------------------+-------------+
| Variable_name | Value |
+--------------------------+--------------+
| wsrep_cluster_size | 2 |
+--------------------------+--------------+shellAgora começa o terceiro nó:
systemctl start mariadbshellVerifique se o nó está a funcionar corretamente:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"shellAgora deve haver três nós no cluster:
+---------------------------+-------------+
| Variable_name | Value |
+--------------------------+--------------+
| wsrep_cluster_size | 3 |
+--------------------------+------------ -+shellPasso 6: teste a replicação
Certifique-se de que consegue ligar-se a cada um dos nós do cluster. Utilize o cliente MariaDB para iniciar sessão como utilizador root ou como outro utilizador com permissões suficientes.
mysql -u root -pshellCrie um novo banco de dados de teste (test_db) num dos nós do cluster:
CREATE DATABASE test_db;sqlInicie sessão nos outros nós e verifique se a base de dados de teste existe:
SHOW DATABASES;sqlA base de dados de teste deve aparecer na lista de bases de dados:
+-------------------------------+
| Database |
+-------------------------------+
| information_schema |
| mysql |
| performance_schema |
| test_db |
| sys |
+------------------------------+sqlAdicione 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)
);sqlIntroduza alguns dados de teste na coluna name da tabela de teste:
INSERT INTO test_table (name) VALUES ('Alicia'), ('Juan'), ('Carlos');sqlVerifique nos outros nós se a tabela de teste e os dados introduzidos foram replicados:
USE test_db;
SELECT * FROM test_table;sqlO resultado mostra a lista de pessoas com os seus nomes e ID:
+----+-----------+
| id | name |
+----+-----------+
| 1 | Alicia |
| 2 | Juan |
| 3 | Carlos |
+----+----------+sqlAssim, pode modificar um registo de dados na tabela de teste:
UPDATE test_table SET name = 'David' WHERE name = 'Alicia';sqlTente eliminar um registo de dados:
DELETE FROM test_table WHERE name = 'Juan';sqlVerifique nos outros nós se as modificações e eliminações foram replicadas:
SELECT * FROM test_table;sqlAs alterações aparecem corretamente em cada nó:
+----+------------+
| id | name |
+----+-----------+
| 1 | David |
| 3 | Carlos |
+----+-----------+sql