MariaDB : Galera Cluster

Neste post será abordado como configurar um cluster MariaDB com o Galera cluster .

MariaDB Galera Cluster é um cluster multi-master síncrono para MariaDB e só suporta as engines XtraDB / InnoDB.

galera-cluster

O link abaixo apresenta todos os benefícios desta solução :

https://mariadb.com/kb/en/mariadb/what-is-mariadb-galera-cluster/

Caso haja interesse em configurar o MariaDB de forma simples , existe o post abaixo explicando sobre :

http://fajlinux.com.br/db/rhce-instalando-o-mariadb-no-rhel-7-centos-7/

1) Ambiente :

10.0.0.10 – mariadb-01 – RHEL7
10.0.0.11 – mariadb-02 – RHEL7
10.0.0.12 – mariadb-03 – RHEL7

OBS : O SELinux e o FirewallD foram desabilitados para este lab .

2) Instalação do MariaDB e Galera nos servidores

Este procedimento será rodado em cada servidor.

Habilitando o repositorio criando o arquivo /etc/yum.repos.d/mariadb.repo

# MariaDB 10.0 CentOS repository list
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
enabled=0

Rode o comando abaixo para instalar os pacotes necessários

 yum --enablerepo=mariadb -y install MariaDB-Galera-server MariaDB-client rsync socat

Inicie o serviço e rode o MySQL Secure Installation

systemctl start mysql.service 
mysql_secure_installation

Crie o usuário sst_user (State Snapshot Transfer) dentro dos bancos,este será o usuário que faz a autenticação nos bancos e a replicação entre eles .

Detalhes sobre o SST :
http://galeracluster.com/documentation-webpages/statetransfer.html#sst

DELETE FROM mysql.user WHERE user='';
GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'dbpass';
GRANT USAGE ON *.* to sst_user@'%' IDENTIFIED BY 'dbpass';
GRANT ALL PRIVILEGES on *.* to sst_user@'%';
FLUSH PRIVILEGES;

Captura de Tela 2016-06-18 às 10.24.57

3) Configuração do Galera Cluster

Pare o database

systemctl stop mysql.service

Edite o arquivo /etc/my.cnf.d/server.cnf dentro da Galera replicando a configuação alterando as tags wsrep_node_address=’SERVER IP’ colocando os respectivos ips dos servidores.

[galera]
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://10.0.0.10,10.0.0.11,10.0.0.12"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_cluster_name="MariaDB_Cluster"
wsrep_node_address="SERVER IP"
wsrep_sst_method=rsync 

Inicie o Cluster no mariadb-01 com o comando abaixo

/etc/rc.d/init.d/mysql bootstrap 

Inicie os o mariadb-02 e mariadb-03 com o comando abaixo

systemctl start mysql.service 

Para ver o status de todas as configurações do cluster no mariadb-02 e mariadb-03 executamos o comando abaixo

mysql -u root -pmariadb -e"show status like 'wsrep%'"

Status da Sincronização

Captura de Tela 2016-06-18 às 11.50.17

Reconhecimento de todos os servidores do cluster

Captura de Tela 2016-06-18 às 11.51.53

Status da conexão

Captura de Tela 2016-06-18 às 11.52.59

4) Testes finais

Seguiremos os passos :

No mariadb-03 será criado o banco test

mysql -u root -p -e 'CREATE DATABASE test ;'
mysql -u root -p -e 'CREATE TABLE test.cluster ( id INT NOT NULL AUTO_INCREMENT, value VARCHAR(20), server VARCHAR(20), PRIMARY KEY(id));'

No mariadb-01 será executado um INSERT

mysql -u root -p -e 'INSERT INTO test.cluster (value, server) VALUES ("value1", "mariadb-01");'

No mariadb-02 será executado o INSERT

mysql -u root -pmariadb -e 'INSERT INTO test.cluster (value, server) VALUES ("value2", "mariadb-02");'

No mariadb-03 será executado um SELECT

mysql -u root -p -e 'SELECT * FROM test.cluster;'

Resultado do SELECT

Captura de Tela 2016-06-18 às 12.04.20