MariaDB Galera Cluster - Instalación y configuración

MariaDB Galera Cluster - Instalación y configuración


Versión para impresiónSend by email
Es este articulo veremos como instalar MariaDB Galera Cluster y configurarlo en un entorno compuesto por 3 servidores (el mínimo indispensable para que el Cluster funcione correctamente). El proyectoMariaDB nace como fork de MySQL aunque con la versión 10 (actualmente en fase Beta), partiendo de la versión 5.6 de MySQL, se han desarrollado nuevas características propias de este sistema de gestión de base de datos.


 
MariaDB Galera Cluster  es un cluster multi-maestro síncrono que se basa en MariaDB. Las ventajas:
  • replicación síncrona
  • Topología multi-maestro
  • Lectura y escritura en cada nodo del cluster
  • Controlo activo de los miembros del cluster. Los nodos que fallan son automáticamente  quitados de la configuración hasta que no vuelvan disponibles. Este proceso se realiza sin perdida de datos y problemas de sincronización.
  • Sencillez extrema a la hora de añadir un nuevo nodo
Limitaciones:
  • Funciona solamente con tablas InnoDB
  • EL comando DELETE no es soportado en tablas sin una clave primaria
  • Los comandos LOCK/UNLOCK tables no son suportados como la funciones GET_LOCK() y RELEASE_LOCK()
Las instalación se efectuará es tres servidores con CentOS 6.5 64bit 1GBRAM alquilados en DigitalOcean. Para la configuración del Cluster se utilizarán las IP privadas de cada servidor.

Server 1,2,3
IP Privada servidor 1: 10.128.23.193
IP Privada servidor 2: 10.128.238.41
IP Privada servidor 3: 10.128.237.35
yum update -y
yum install nano -y
Se configura de la zona horaria:
rm /etc/localtime
ln -s /usr/share/zoneinfo/America/Bogota /etc/localtime
El idioma (español):
nano /etc/sysconfig/i18n
se modifica esta linea:
LANG="en_US.UTF-8"
para que quede:
LANG="es_CO.iso88591"
Se guardan los cambios.
Se instala el paquete del network time protocol que se utiliza para tener actualizada la hora del servidor:
yum install ntp -y
Se configura para que arranque en automático:
chkconfig ntpd on
Se inicia:
service ntpd start
Se crea la partición de Swap ya que no viene por defecto:
dd if=/dev/zero of=/swapfile bs=1024 count=512k
mkswap /swapfile
swapon /swapfile
Se configura la partición de swap para que arranque con el sistema:
nano /etc/fstab
al final del archivo se añade la línea que sigue:
/swapfile swap swap defaults 0 0
Se guardan los cambios y secambian los permisos del archivo recién creado:
chmod 0600 /swapfile
Se configuran los repositorios de MariaDB:
nano /etc/yum.repos.d/MariaDB.repo
Se copian las siguientes líneas:
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
Se guardan los cambios. Se desinstala  las librerías de MySQL:
rpm -e --nodeps mysql-libs
Se instala MariaDB:
yum install MariaDB-Galera-server MariaDB-client -y
Se inicia el servicio en los tres servidores:
service mysql start
Se vuelve el arranque automático:
chkconfig mysql on
Se pone en seguridad:
mysql_secure_installation
A lo largo del proceso se configura la contraseña del usuario root de MariaDB (la misma en los tres servidores):
Captura
Se entra en la consola de MariaDB de cada servidor:
mysql -u root -psesamo
y se permite el acceso remoto para el usuario root:
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'sesamo' WITH GRANT OPTION;
Se sale del cliente:
MariaDB [(none)]> quit
Ahora en los tres servidores cambiamos la configuración de MariaDB:
Servidor 1:
nano /etc/my.cnf.d/server.cnf
bajo la etiqueta:
[mariadb-5.5]
ponemos:
datadir=/var/lib/mysql
query_cache_size=0
binlog_format=ROW
default_storage_engine=innodb
innodb_autoinc_lock_mode=2
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_provider_options="gcache.size=16G"
wsrep_cluster_address=gcomm://10.128.238.41,10.128.237.35
wsrep_cluster_name='voztovoice'
wsrep_node_address='10.128.23.193'
wsrep_node_name='db1'
wsrep_sst_method=mysqldump
wsrep_sst_auth=root:sesamo
log-error=/var/log/mysql.log
  • El parámetro wsrep_provider_options en este caso define es espacio del disco que será reservado al cluster una vez que se inicie. Posiblesopciones.
  • El parámetro wsrep_cluster_address contiene las IP Privada de los dos demás nodos del cluster.
  • EL parámetro wsrep_cluster_name contiene el nombre que se quiere asignar al cluster.
  • El parámetro wsrep_node_address contiene la IP privada del node que se está configurando
  • El parámetro wser_sst_method define el tipo de método que se utilizará para el intercambio de los datos. Los posibles valores son:
    • mysqldump
    • rsync
    • xtrabackup
Una tabla comparativa de los tres métodos:
Captura
  • El parámetro wsrep_sst_auth contiene los datos del usuario root de MariaDB y respectiva contraseña.
Se guardan los datos, se para el servicio MariaDB y se reinicia con la opción que le permite preparar el cluster:
service mysql stop
service mysql bootstrap
Bootstrapping the clusterStarting MySQL.... SUCCESS!
Servidor 2:
nano /etc/my.cnf.d/server.cnf
bajo la etiqueta:
[mariadb-5.5]
ponemos:
datadir=/var/lib/mysql
query_cache_size=0
binlog_format=ROW
default_storage_engine=innodb
innodb_autoinc_lock_mode=2
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_provider_options="gcache.size=16G"
wsrep_cluster_address=gcomm://10.128.23.193,10.128.237.35
wsrep_cluster_name='voztovoice'
wsrep_node_address='10.128.238.41'
wsrep_node_name='db2'
wsrep_sst_method=mysqldump
wsrep_sst_auth=root:sesamo
log-error=/var/log/mysql.log
Guardamos los datos y reiniciamos el servicio:
service mysql restart
Servidor 3:
nano /etc/my.cnf.d/server.cnf
bajo la etiqueta:
[mariadb-5.5]
ponemos:
datadir=/var/lib/mysql
query_cache_size=0
binlog_format=ROW
default_storage_engine=innodb
innodb_autoinc_lock_mode=2
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_provider_options="gcache.size=16G"
wsrep_cluster_address=gcomm://10.128.23.193,10.128.238.41
wsrep_cluster_name='voztovoice'
wsrep_node_address='10.128.237.35'
wsrep_node_name='db3'
wsrep_sst_method=mysqldump
wsrep_sst_auth=root:sesamo
log-error=/var/log/mysql.log
Guardamos los datos y reiniciamos el servicio:
service mysql restart
Ahora para saber si el cluster está funcionando bien, primero podemos revisar el archivo /var/log/mysql.log, luego podemos utilizar, desde la consola de MariaDB, el siguiente comando:
MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_%';
Una explicación del significado de cada valor.
Por ultimo creamos una base de datos en uno de los servidores (en este se ha utilizado una copia de la base de datos de A2Billing con el ENGINE modificado de MyISAM a InnoDB) :
MariaDB [(none)]> create database a2billing;
Se sale de la consola:
MariaDB [(none)]> quit
Se importan los datos:
mysql -u root -sesamo a2billing < a2billilng.sql
La base de datos será replicada en todos los servidores.
La comunicación entre los tres servidores MariaDB se realiza en los siguientes puertos:
  • 3306 TCP
  • 4567 TCP
  • 4444 TCP solamente en el caso que como método de replicación se utilice Rsync

Comentarios