Depuis la version Centreon-Web 2.8.0, le partitionnement des tables logs, data_bin, log_archive_host et log_archive_service de la base centreon_storage sont automatiquement partitionnées. Cette solution offre de nombreux avantages :
• Le partitionnement des tables MySQL permet une optimisation du temps d’execution.
• La purge des données est améliorée, il suffit de supprimer les partitions trop anciennes.
• L’étendue d’un crash MySQL est limité par la reconstruction des seules partitions en erreur.
15/02/2019: petite mise à jour suite à la version majeure 18.10, le chemin du php est différent avec la distribution ISO Centreon (CentOS).
• Le partitionnement des tables MySQL permet une optimisation du temps d’execution.
• La purge des données est améliorée, il suffit de supprimer les partitions trop anciennes.
• L’étendue d’un crash MySQL est limité par la reconstruction des seules partitions en erreur.
15/02/2019: petite mise à jour suite à la version majeure 18.10, le chemin du php est différent avec la distribution ISO Centreon (CentOS).
1 Gestion du partitionnement pour Centreon
A partir de la version 2.8x, le partitionnement des bases est automatiquement activé. Vous pouvez voir l'état du partitionnement avec la vue Administration -> Server Status. Par défaut, quatre tables de la base centreon_storage sont partitionnées. Pour chaque tables, vous avez une partition par jour en fonction de la rétention indiqué par le fichier xml se trouvant dans /usr/share/centreon/config/partition.d. Par défaut vous devez avoir 365 fichiers plus 10 fichiers d'avance. Pour plus de détail, voir la documentation officielle de Centreon.
Tous les jours à 4 h de matin, le script /usr/share/centreon/cron/centreon-partitioning.php réalise les opérations de maintenance des tables partitionnées. Vous pouvez visualiser les logs dans /var/log/centreon/centreon-partitioning.log.
version 2.8x
# Cron for database partitioning 0 4 * * * centreon /usr/bin/php /usr/share/centreon/cron/centreon-partitioning.php >> /var/log/centreon/centreon-partitioning.log 2>&1CentOS < 19.10
# Cron for database partitioning 0 4 * * * centreon /opt/rh/rh-php71/root/usr/bin/php /usr/share/centreon/cron/centreon-partitioning.php >> /var/log/centreon/centreon-partitioning.log 2>&1CentOS >= 19.10
# Cron for database partitioning 0 4 * * * centreon /opt/rh/rh-php72/root/usr/bin/php /usr/share/centreon/cron/centreon-partitioning.php >> /var/log/centreon/centreon-partitioning.log 2>&1
2 Création du partitionnement
Lors d'une mise à jour d'une version 2.7x, les tables ne sont pas partitionnées. Nous allons voir la procédure ci-dessous.
2.1 A partir des sources
Version system V init, configurer le serveur MySQL avec l'option suivante. Par exemple pour Debian, éditer le fichier /etc/mysql/my.cnf.
[mysqld] open_files_limit = 32000
Relancez le serveur après les modifications éventuelles.
service mysql restart
Version systemd, configurer le serveur MySQL avec l'option suivante. Par exemple pour Debian, éditer le fichier /lib/systemd/system/mariadb.service
LimitNOFILE = 32000
Relancez le serveur après les modifications éventuelles.
systemctl daemon-reload systemctl restart mysql
Copier le fichier centreon-partitioning.php se trouvant dans les fichiers sources de centreon-web. Nous partirons du principe que vos fichiers sources se trouvent dans /usr/local/src.
cp /usr/local/src/centreon-web-2.8.3/bin/centreon-partitioning.php /usr/share/centreon/bin
Attention, vérifiez l'espace disponible de votre stockage BDD avant de réaliser la migration. Vous avez la possibilité de visualiser la taille avec la vue Administration -> Server Status.
Prévoyez deux fois la taille des tables traitées (Indexes + données) voir 2,5 fois pour être tranquille. Partitionnez les tables logs, data_bin, log_archive_host et log_archive_service avec les commandes suivantes :
version 2.8x
php /usr/share/centreon/bin/centreon-partitioning.php -m data_bin php /usr/share/centreon/bin/centreon-partitioning.php -m log_archive_service php /usr/share/centreon/bin/centreon-partitioning.php -m log_archive_host php /usr/share/centreon/bin/centreon-partitioning.php -m logsCentOS < 19.10
/opt/rh/rh-php71/root/usr/bin/php /usr/share/centreon/bin/centreon-partitioning.php -m data_bin /opt/rh/rh-php71/root/usr/bin/php /usr/share/centreon/bin/centreon-partitioning.php -m log_archive_service /opt/rh/rh-php71/root/usr/bin/php /usr/share/centreon/bin/centreon-partitioning.php -m log_archive_host /opt/rh/rh-php71/root/usr/bin/php /usr/share/centreon/bin/centreon-partitioning.php -m logsCentOS >= 19.10
/opt/rh/rh-php72/root/usr/bin/php /usr/share/centreon/bin/centreon-partitioning.php -m data_bin /opt/rh/rh-php72/root/usr/bin/php /usr/share/centreon/bin/centreon-partitioning.php -m log_archive_service /opt/rh/rh-php72/root/usr/bin/php /usr/share/centreon/bin/centreon-partitioning.php -m log_archive_host /opt/rh/rh-php72/root/usr/bin/php /usr/share/centreon/bin/centreon-partitioning.php -m logs
Le programme utilise les données se trouvant dans /usr/share/centreon/config/partition.d/. Pour chaque commande, vous devriez avoir ce type de réponse, exemple avec data_bin.
[Sun, 29 Jan 17 16:28:26 +0100] PARTITIONING STARTED [Sun, 29 Jan 17 16:28:26 +0100][migrate] Renaming table centreon_storage.data_bin TO centreon_storage.data_bin_old [Sun, 29 Jan 17 16:28:26 +0100][migrate] Creating parts for new table centreon_storage.data_bin [Sun, 29 Jan 17 16:28:29 +0100][migrate] Insert data from centreon_storage.data_bin_old to new table [Sun, 29 Jan 17 16:28:29 +0100] PARTITIONING COMPLETED
Le processus peut prendre beaucoup de temps, soyez patient (retour de Manu : 220 Go pendant une trentaine d'heures). Vous pouvez vérifier vos bases partitionnées avec la vue Administration -> Server Status. Vous noterez l'augmentation conséquente de la base centreon_storage.
Si les graphiques ne s'affichent pas correctement, pensez à régénérer vos RRD dans Administration--> Parameters --> Performance Management —> Data. Cochez toutes les métriques et appliquez la commande Rebuild RRD Database. Après avoir vérifier le bon fonctionnement, supprimez vos anciennes table data_bin_old, log_archive_service_old, log_archive_host_old, logs_old.
Merci à Aurélien pour son retour d'expérience 😉.