Cluster MariaDB Galera no Debian ou Ubuntu

Introdução
Neste tutorial vamos aprender a criar um cluster de banco de dados MariaDB 10.1 usando o Galera Cluster nativo do MariaDB no Linux Debian 9 ou qualquer outra versão Debian/Ubuntu desde que seja instalado o MariaDB 10.1. Rodar o banco de dados em cluster é importante pois trás integridade nos dados e redundância, aumentando a disponibilidade do serviço.

Para isso, será necessário o mínimo de 3 servidores linux.

Se estiver logado como root, você pode remover o sudo dos comandos abaixo.

Primeiro vamos atualizar o repositório (Execute nos 3 servidores)

$ sudo apt update

Obs: É necessário que cada servidor esteja com hostname diferente um do outro.
Se precisa alterar o hostname e não sabe como fazer isso, pode seguir este tutorial: https://blog.absam.io/como-alterar-o-hostname-no-debian/

Agora vamos instalar os pacotes necessários (Execute nos 3 servidores)
Neste passo, vamos instalar o MariaDB nos 3 servidores junto com o client e o rsync que faz a sincronização dos dados entre os nodes.

$ sudo apt install mariadb-server mariadb-client rsync -y

Desligando o MariaDB (Execute nos 3 servidores)
Concluídos os passos anteriores, vamos desligar o MariaDB nos 3 nodes.

$ sudo service mysql stop

Configurando o Galera
Agora sim vamos partir para a configuração do galera e integração/replicação dos dados entre os 3 nodes MariaDB.

Vamos criar um arquivo nesse diretório: /etc/mysql/conf.d/galera.cnf

Com o seguinte conteúdo (Execute nos 3 servidores):

[mysqld]
#mysql settings
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
query_cache_size=0
query_cache_type=0
bind-address=0.0.0.0

#galera settings
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="my_wsrep_cluster"
wsrep_cluster_address="gcomm://IP_01,IP_02,IP_03"
wsrep_node_address="IP_01"
wsrep_node_name="HOSTNAME_01"
wsrep_sst_method=rsync

Troque os ips pelo IP de cada servidor e o nome pelo nome do servidor em questão.
Vai ficar mais ou menos assim:

# Servidor 01
wsrep_cluster_address="gcomm://10.0.0.15,10.0.0.30,10.0.0.45"
wsrep_node_address="10.0.0.15"
wsrep_node_name="mariadb01.cloud.server"
# Servidor 02
wsrep_cluster_address="gcomm://10.0.0.15,10.0.0.30,10.0.0.45"
wsrep_node_address="10.0.0.30"
wsrep_node_name="mariadb02.cloud.server"
# Servidor 03
wsrep_cluster_address="gcomm://10.0.0.15,10.0.0.30,10.0.0.45"
wsrep_node_address="10.0.0.45"
wsrep_node_name="mariadb03.cloud.server"

Liberando acesso externo no MariaDB (Execute nos 3 servidores)
Se o cluster precisa estar acessível por outros computadores e servidores, então você vai precisar executar o passo abaixo.

$ sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

# Procure a linha bind-address 127.0.0.1
# Troque para bind-address 0.0.0.0
# Salve e feche o arquivo

Agora vamos inicializar o servidor com cluster ativado.
Obs: As portas TCP 3306, 4567, 4568, 4444 e a porta UDP 4567 precisam estar liberadas.

# Servidor 01
$ sudo galera_new_cluster
# Servidor 02
$ sudo service mysql start
# Servidor 03
$ sudo service mysql start

Executados os passos acima, o cluster já deve estar devidamente sincronizado.
Você pode checar quantos nodes tem no cluster, executando este comando:

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

O retorno deve ser algo assim:

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

O resultado da variável wsrep_cluster_size deve ser igual ao número de nodes que você está usando, em nosso caso 3.

Se você quer criar um novo usuário com acesso externo no MariaDB, pode seguir esse tutorial: https://blog.absam.io/criando-usuario-no-mysql-ou-mariadb-via-shell/

Se você precisa instalar o phpMyAdmin pode seguir este tutorial: https://blog.absam.io/instalando-phpmyadmin-no-ubuntu-18-04-ou-debian-9/

Junior Mascarenhas é CEO na Absam.io, Co-Founder na Hostoo.io e Co-Founder no Club4Work. Especialista em tecnologia, desenvolvimento de negócios digitais, gestão e operação de startups e marketing estratégico.