# Configurar Galera Cluster MariaDB no Ubuntu 20.04

O **Galera Cluster MariaDB** melhora a disponibilidade e facilita a escalabilidade do seu banco de dados. Neste tutorial, ensinamos como instalar o cluster Galera no Ubuntu 20.04.

## Galera Cluster MariaDB: Pré-requisitos

Para instalar um [cluster MariaDB Galera](https://www.ionos.com/digitalguide/hosting/technical-matters/mariadb-galera-clusters/ "MariaDB Galera Clusters") no **Ubuntu 20.04**, você deve atentar-se aos seguintes requisitos:

- **Múltiplos servidores**: São necessários pelo menos três servidores ou máquinas virtuais para configurar um cluster Galera no MariaDB. Todos os servidores devem estar na mesma rede.
- **Permissões de root**: É necessário que você tenha acesso root ou, pelo menos, permissões administrativas nos servidores.

## Instruções passo a passo: Configurar Galera Cluster MariaDB no Ubuntu 20.04

O Galera Cluster MariaDB é uma **solução prática de banco de dados** que oferece alta disponibilidade, integridade dos dados e escalabilidade para aplicações exigentes. Neste tutorial passo a passo, detalhamos o processo de configuração do Galera Cluster MariaDB no Ubuntu 20.04. Antes de começar, certifique-se de que você possui pelo menos três servidores ou máquinas virtuais disponíveis para configurar 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 atualizações de segurança** atualizados.

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

```shell
sudo apt update
```

Instale todas as atualizações disponíveis:

```shell
sudo apt upgrade -y
```

É recomendável que você também **remova pacotes obsoletos ou não utilizados** para limpar os servidores:

```shell
sudo apt autoremove -y
```

### Passo 2: Instalar o MariaDB nos servidores

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

```shell
sudo apt install mariadb-server
```

Após a instalação, você pode iniciar o serviço MariaDB:

```shell
sudo systemctl start mariadb
```

Use o seguinte comando para garantir que o MariaDB seja iniciado automaticamente a cada reinicialização do sistema:

```shell
sudo systemctl enable mariadb
```

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

```shell
sudo systemctl status mariadb
```

Você também deve fazer algumas configurações básicas de segurança e configurar o banco de dados. Para isso, inicie o **assistente de configuração**:

```shell
sudo mysql_secure_installation
```

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

```shell
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
```

O script pergunta primeiro pela **senha atual do root** (*current password for root*). Se você instalou agora o [MariaDB no Ubuntu 20.04](https://www.ionos.com/pt-br/digitalguide/hospedagem/tecnologia-de-hospedagem/instalar-mariadb-no-ubuntu-2004/), pressione a tecla \[Enter\] e, em seguida, defina uma nova senha.

### Passo 3: Configurar nós do Galera Cluster MariaDB

Crie um arquivo `cnf` no diretório `/etc/mysql/conf.d` em cada nó para definir as configurações específicas do Galera.

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

O arquivo deve incluir configurações gerais do banco de dados, como o formato de log binário e a **engine de armazenamento padrão**. Além disso, ele deve conter configurações para o cluster Galera, incluindo o nome do cluster e o endereço do cluster.

Adicione as seguintes linhas para o primeiro nó:

```shell
[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"
```

- **Configurações gerais do banco de dados**: Incluem parâmetros como `binlog_format=ROW`, que define o formato dos logs binários, e `default-storage-engine=innodb`, que define a engine de armazenamento padrão.
- **Configuração do provedor Galera**: O parâmetro `wsrep_on=ON` ativa a replicação Galera, e `wsrep_provider=/usr/lib/galera/libgalera_smm.so` define o caminho para a biblioteca Galera.
- **Configuraçã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.
- **Sincronização Galera**: Define o método de transferência de estado (*State Snapshot Transfer – SST*), por exemplo, `wsrep_sst_method=rsync`.
- **Configuraçã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ó:

```shell
[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"
```

Agora, siga com o último nó:

```shell
[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"
```

### Passo 4: Alterar configurações de firewall nos servidores

Como os nós se comunicam entre si por meio de portas específicas, você deve ajustar as **configurações do firewall**.

Abra as seguintes **portas** no seu firewall:

- **Porta 3306**: Essa é a porta padrão para o MariaDB. Ela é usada para comunicação e consultas do banco de dados.
- **Portas do Galera**: Além da porta padrão 3306, o Galera usa outras portas para comunicação interna entre os nós. O intervalo padrão para portas do Galera geralmente é 4567, 4568 e 4444 para o State Snapshot Transfer (SST).

Você pode definir as configurações do firewall no seu servidor Ubuntu com o seguinte comando:

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

### Passo 5: Iniciar o Galera Cluster MariaDB

Interrompa o serviço MariaDB, se ele já estiver em execução:

```shell
sudo systemctl stop mariadb
```

Este comando inicia o **servidor MariaDB** e inicializa um novo cluster Galera no primeiro nó:

```shell
sudo galera_new_cluster
```

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

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

Você deve ver a seguinte saída:

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

O primeiro nó foi iniciado com sucesso.

Ative o segundo nó:

```shell
systemctl start mariadb
```

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

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

No console, você verá:

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

Agora, inicie o terceiro nó:

```shell
systemctl start mariadb
```

Verifique se o nó está funcionando corretamente:

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

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

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

### Passo 6: Testar replicação

Certifique-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 permissões adequadas.

```shell
mysql -u root -p
```

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

```sql
CREATE DATABASE test_db;
```

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

```sql
SHOW DATABASES;
```

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

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

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

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

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

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

Verifique nos outros nós se a tabela de teste e os dados inseridos foram replicados:

```sql
USE test_db;
SELECT * FROM test_table;
```

A saída deve mostrar a lista de pessoas com os respectivos nomes e IDs:

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

Modifique um registro na tabela de teste:

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

Tente excluir um registro:

```sql
DELETE FROM test_table WHERE name = 'Bob';
```

Verifique nos outros nós se as atualizações e exclusões foram replicadas:

```sql
SELECT * FROM test_table;
```

As alterações devem ser realizadas com sucesso em cada nó:

```sql
+----+-----------+
| id | name      |
+----+-----------+
| 1  | David     |
| 3  | Charlie   |
+----+-----------+
```


This is a markdown version of: [https://www.ionos.com/pt-br/digitalguide/hospedagem/tecnologia-de-hospedagem/galera-cluster-mariadb-no-ubuntu-2004/](https://www.ionos.com/pt-br/digitalguide/hospedagem/tecnologia-de-hospedagem/galera-cluster-mariadb-no-ubuntu-2004/) for AI/LLM consumption.