Mariadb-galera cluster para Debian 7.X (wheezy)

Instalación y configuración de un cluster con MariaDB y Galera, una buena alternativa del MySQL que todos conocemos.

Instalación en cada uno de los nodos que tengamos de los paquetes siguientes:

rsync
galera
mariadb-galera-server

# apt-get install python-software-properties
# apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
# add-apt-repository 'deb http://mirror3.layerjet.com/mariadb/repo/5.5/debian wheezy main'
# apt-get update
# apt-get install -y rsync galera mariadb-galera-server

La password del usuario de bbdd tiene que ser la misma en todas las instalaciones.

Configuración en cada uno de los nodos que tengamos:

Crear el fichero galera.cnf (o el nombre que queramos darle).

vim /etc/mysql/conf.d/galera.cnf

Rellenamos con los siguientes datos en todos los nodos:

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

# Galera Provider Configuration
wsrep_provider=/usr/lib/galera/libgalera_smm.so
#wsrep_provider_options=”gcache.size=32G”

# Galera Cluster Configuration
wsrep_cluster_name=”mariadb_cluster” ## nombre asignado para el cluster
wsrep_cluster_address=”gcomm://192.168.6.6,192.168.6.7,192.168.6.8″ ## tantas IP’s como nodos tengamos

# Galera Synchronization Congifuration
wsrep_sst_method=rsync
#wsrep_sst_auth=user:pass

# Galera Node Configuration
wsrep_node_address=”192.168.6.6″ ## Dirección IP del nodo en el que estamos trabajando, cambiar en cada uno
wsrep_node_name=”mariadb1″ ## Nombre del nodo en el que estamos trabajando, cambiar en cada uno

Copiamos la configuración de mantenimiento de Debian  /etc/mysql/debian.cnf al resto de los nodos puesto que todos tienen que tener la misma información.

# vim /etc/mysql/debian.cnf

# Automatically generated for Debian scripts. DO NOT TOUCH! ### OJO ESTO ES SOLO UN EJEMPLO ###
[client]
host = localhost
user = debian-sys-maint
password = ZOvgMBJudX8GVE9T
socket = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host = localhost
user = debian-sys-maint
password = ZOvgMBJudX8GVE9T
socket = /var/run/mysqld/mysqld.sock
basedir = /usr

Iniciamos los nodos.

Una vez terminadas las configuraciones en todos los nodos, paramos el servicio en cada uno de ellos.

# /etc/init.d/mysql stop

Una vez todos parados levantamos UNO DE ELLOS SOLO UNA VEZ de la siguiente manera, esto lo levantara como Master, de no ser así, al intentar levantar el servicio en el resto de nodos fallara.

# /etc/init.d/mysql start --wsrep-new-cluster

Levantamos el servicio en el resto del os nodos.

# /etc/init.d/mysql start

Ya tenemos todo terminado, para probar el correcto funcionamiento podemos probar el siguiente test de replicación Master-Master:

# mysql -u root -pPASSWORD_BBDD -e 'CREATE DATABASE nombre_bbdd;'
# mysql -u root -pPASSWORD_BBDD -e 'CREATE TABLE nombre_bbdd.nombre_tabla ( id INT NOT NULL AUTO_INCREMENT, tipo VARCHAR(50), cantidad INT, color VARCHAR(25), PRIMARY KEY(id));'
# mysql -u root -pPASSWORD_BBDD -e 'INSERT INTO nombre_bbdd.nombre_tabla (tipo, cantidad, color) VALUES ("dato1", 2, "dato3");'

En cualquiera de los otros nodos.

# mysql -u root -pPASSWORD_BBDD -e 'SELECT * FROM nombre_bbdd.nombre_tabla;'

+—-+——-+———-+——-+
| id | tipo | cantidad | color |
+—-+——-+———-+——-+
| 1 | dato1 | dato2 | dato3 |
+—-+——-+———-+——-+
Tengo activados y cambiados varios logs.

# vim /etc/mysql/conf.d/mysqld_safe_syslog.cnf

[mysqld_safe]
#syslog ## se comenta esta linea para que los los no los saque por syslog
log_error=/var/log/mysql/mariadb_error.log ## se crear esta linea para mejor acceso

# vim /etc/mysql/my.cnf

# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
general_log_file = /var/log/mysql/mysql.log # activo esta linea
general_log = 1 # activo esta linea
#
..
#