lunes, 9 de noviembre de 2015

Mariadb Galera Cluster y Debian Jessie con systemd

Debian Jessie a cambiado de SysV a Systemd.

Cambios en Jessie
Más información

Esto significa que el método para arrancar el cluster de galera mariadb según la documentación se debe iniciar de la siguiente forma:

# service mysql start --wsrep-new-cluster

Para sistemas systemd:

# systemctl start mysql --wsrep-new-cluster

El problema es que no arrancará con uno ni con el otro, debido a que el nuevo systemd no permite parámetros y el service no manda a cargar /etc/init.d/mysql, por lo tanto la forma rústica e incorrecta es configurar en my.cnf:

wsrep_cluster_address                           = "gcomm://"

Arrancar el servidor y luego modificar nuevamente el my.cnf:

wsrep_cluster_address                           = "gcomm://ip1,ip2,ip3"

Pero esta no es la forma correcta.

La forma correcta es indicar por parámetros la primera vez lo deseado "--wresp-new-cluster" y dejando el wsrep_cluster_address con todos los integrantes.

Lo primero que vamos a hacer es ejecutar el siguiente comando:

# systemctl cat mysql.service

Lo que nos devolverá la siguiente salida:
# /run/systemd/generator.late/mysql.service
# Automatically generated by systemd-sysv-generator

[Unit]
SourcePath=/etc/init.d/mysql
Description=LSB: Start and stop the mysql database server daemon
Before=runlevel2.target runlevel3.target runlevel4.target runlevel5.target shutdown.target
After=remote-fs.target systemd-journald-dev-log.socket network-online.target nss-lookup.target time-sync.target
Wants=network-online.target
Conflicts=shutdown.target

[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
SysVStartPriority=2
ExecStart=/etc/init.d/mysql start
ExecStop=/etc/init.d/mysql stop
ExecReload=/etc/init.d/mysql reload
Creamos el siguiente archivo que no existe "/etc/systemd/system/mysql.service" agregando el parámetro que deseamos:

[Unit]
SourcePath=/etc/init.d/mysql
Description=LSB: Start and stop the mysql database server daemon
Before=runlevel2.target runlevel3.target runlevel4.target runlevel5.target shutdown.target
After=remote-fs.target systemd-journald-dev-log.socket network-online.target nss-lookup.target time-sync.target
Wants=network-online.target
Conflicts=shutdown.target

[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
SysVStartPriority=2
ExecStart=/etc/init.d/mysql start --wsrep_new_cluster
#ExecStart=/etc/init.d/mysql start
ExecStop=/etc/init.d/mysql stop
ExecReload=/etc/init.d/mysql reload

Listo, cuando ejecutemos por primera vez pasará por parámetro que debe iniciar el primer miembro del cluster, basta entrer y solo hacer un cambio en los comentarios, si se cae este servidor solo basta hacer un "service mysql restart" y cargará con el gcomm://ip1,ip2,ip3.

Es más sólido modificar solo el parámetro de entrada que tocar el archivo de configuración.

No hay comentarios: