CES 3.3 + MariaDB Galera : problème lors de l’installation

Récemment j’ai tenté l’installation de CES3.3 (Centreon Enterprise Server) sur un cluster MariaDB de 3 nodes avec Galera pour la rapidité de mise en place et la réplication de données relativement sympa à gérer.

Cependant, lors de l’installation une fois les différents écrans de configurations via l’interface Web passés, on arrive sur la page de login de Centreon avec le CSS qui flanche et impossible de se connecter.
Ceci dans le cas où les nodes du cluster Galera sont déjà tous configurés.

La raison de ce blocage est qu’à chaque fois qu’un node est ajouté au cluster galera, l’auto-increment du moteur augmente de 1 donc pour 3 nodes on a :

auto-increment-galera

Lors de l’installation de la CES, à l’étape 7, dans le fichier step7.php on appelle :

'baseconf'   : './steps/process/insertBaseConf.php',

dans le fichier insertBaseConf.php, on a

splitQueries('../../insertCmd-Tps.sql', ';', null, '../../tmp/insertCmd-Tps.sql');

et dans le script SQL insertCmd-Tps.sql, on a les INSERT de timeperiod avec l’auto-increment géré par le moteur, voici le premier INSERT :

INSERT INTO `timeperiod` VALUES (NULL, '24x7', '24_Hours_A_Day,_7_Days_A_Week', '00:00-24:00', '00:00-24:00', '00:00-24:00', '00:00-24:00', '00:00-24:00', '00:00-24:00', '00:00-24:00');

Résultat:

timeperiod-bug

Ensuite, lorsque le script insertBaseConf.sql est appelé toujours dans l’étape 7 :

insertBaseConf.php

splitQueries('../../insertBaseConf.sql', ';', null, '../../tmp/insertBaseConf');

les contacts sont mappés sur les IDs en dur des timeperiod qui ne correspondent plus à cause de l’offset mais qui seraient OK sinon :

INSERT INTO `contact` (`contact_id`, `timeperiod_tp_id`, `timeperiod_tp_id2`, `contact_name`, `contact_alias`, `contact_passwd`, `contact_lang`, `contact_host_notification_options`, `contact_service_notification_options`, `contact_email`, `contact_pager`, `contact_comment`, `contact_oreon`, `contact_admin`, `contact_type_msg`, `contact_activate`, `contact_auth_type`, `contact_ldap_dn`, `contact_enable_notifications`) VALUES(1, 1, 1, '@firstname@ @lastname@', 'admin', MD5('@ADMIN_PASSWORD@'), 'en_US', 'n', 'n', '@email@', NULL, NULL, '1', '1', 'txt', '1', 'local', NULL, '1');

Dans le premier INSERT ci-dessus le champ timeperiod_tp_id est setté à 1 mais dans le screen au-dessus on a 3 pour le 24×7.

Il y a donc une violation de la clé étrangère timeperiod_tp_id :

insert-request-contact

Donc pour éviter ça, il faut ajouter les autres nodes galera une fois centreon installé (bien sûr les autres nodes ne feront que de la réplication et ne seront pas utilisés directement par Centreon, sauf si un load balancer est placé en frontal des DB server) et voilà le résultat :

timeperiod-ok

Enjoy !