Utiliser une base de données externe

Cette page décrit comment configurer Cyberwatch pour utiliser une base de données externe à la place de la base de données déployée en tant que conteneur de l’instance Cyberwatch.

Prérequis

Cyberwatch supporte les bases de données suivantes :

  • MariaDB 10.11
  • MySQL 8.X

Prérequis matériels

Cyberwatch recommande la configuration matérielle suivante pour assurer le bon fonctionnement de l’application :

  • 2 vCPU
  • 12 Go de RAM
  • 100 Go d’espace disque

Cas d’usage d’une base de données externe

Cyberwatch utilise par défaut une base de données MariaDB conteneurisée.

L’utilisation d’une base de données externalisée plutôt que conteneurisée peut s’avérer nécessaire dans certains cas de figure.

Cyberwatch requiert l’utilisation d’une base de données externalisée pour toute instance visant à superviser 5000 ou plus actifs. L’utilisation d’une base externalisée est également possible pour les instances plus petites, en considérant les avantages et limitations ci-dessous.

Avantages de l’utilisation d’une base externalisée

  • possibilité de configurer et personnaliser les configurations de la base ;
  • utilisation d’un serveur dédié, permettant d’allouer plus finement les ressources ;
  • meilleures performances ;
  • mécanismes de réplications et de sauvegardes plus finement paramétrables.

Limitations liées à l’utilisation d’une base externalisée

  • l’utilisation d’un serveur dédié entraîne des besoins d’infrastructures supplémentaires ;
  • la maintenance de la base de données et du serveur dédié ne relève pas de Cyberwatch, bien que nos équipes soient disponibles pour vous conseiller en cas de besoin.

Configuration de la base de données externalisée

Création d’un utilisateur et d’une base dédiée

Dans le cas d’une utilisation d’un serveur de base de données dédié, il est nécessaire de créer une base en y accordant tous les privilèges à un utilisateur dédié. Par défaut, Cyberwatch utilise une base de données et un utilisateur nommés olympe.

Ces opérations peuvent être réalisées par l’exécution des commandes suivantes depuis le serveur de base de données :

CREATE DATABASE olympe;
CREATE USER 'olympe'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
GRANT ALL PRIVILEGES ON olympe.* TO 'olympe'@'%';
FLUSH PRIVILEGES;

Lors de l’attribution des privilèges, il est nécessaire de remplacer % par l’adresse IP du serveur Cyberwatch, ou son nom de domaine, au format %.example.com, à condition que sa résolution inverse soit fonctionnelle. Dans le cas d’une architecture à plusieurs nœuds, cette opération est à répéter pour chaque satellite, si l’attribution des privilèges se fait par une adresse IP.

Mise en place de la configuration par défaut

Afin de pouvoir profiter des améliorations de performance visées par l’utilisation d’une base de données externalisée, il est nécessaire de la configurer en fonction de du dimensionnement de l’instance Cyberwatch. La configuration par défaut n’est pas satisfaisante.

Le fichier de configuration à éditer peut dépendre de la base de données ainsi que du système sur laquelle elle est installée. Dans cette documentation, nous choisissons de modifier le fichier /etc/my.cnf en considérant la configuration détaillée par la suite.

En amont de cette modification, il convient de déplacer sur le serveur de base de données, le fichier cbw-root-ca-cert.pem disponible dans le dossier /etc/cyberwatch/certs. Il est ensuite nécessaire de générer un nouveau certificat via la commande sudo cyberwatch generate-certificate, afin d’étendre le périmètre de validité du certificat cyberwatch. Lors de l’exécution de cette commande, il est important de veiller à saisir tous les noms qui seront utilisés pour joindre la base de données depuis chaque nœud. Ce certificat, ainsi que sa clé seront ensuite à copier sur le serveur de base de données.

[mysqld]
character-set-server       = utf8mb4
collation-server           = utf8mb4_general_ci
innodb_buffer_pool_size    = 2048M
innodb_log_file_size       = 512M
innodb_fast_shutdown       = 0
ssl-ca=/path/to/cbw-root-ca-cert.pem
ssl-cert=/path/to/generated-db-cert.pem
ssl-key=/path/to/generated-db-key.pem

Les deux premières lignes permettent de définir le charset à utiliser afin d’éviter tout problème d’encodage.

Les deux lignes suivantes sont les configurations InnoDB minimales à utiliser à la date de rédaction de cette documentation.

Pour en savoir plus, se référer à la documentation de MariaDB concernant les fichiers de configuration : https://mariadb.com/kb/en/configuring-mariadb-with-option-files/#default-option-file-locations-on-linux-unix-mac

Adapter la configuration à la taille de la base de données

Cette configuration par défaut doit être adaptée selon le dimensionnement de la base de données Cyberwatch.

La taille de la base de données dépendra principalement du nombre d’actifs supervisés.

Deux règles d’or sont à suivre en toutes circonstances pour disposer de performances raisonnables :

  • la variable innodb_buffer_pool_size doit toujours être supérieure à la taille de la base de données ;
  • la variable innodb_log_file_size doit être environ égale ou légèrement supérieure à la valeur de innodb_buffer_pool_size/8.

D’autres paramètres sont fréquemment définis pour améliorer les performances de la base de données. L’idéal étant de suivre les recommandations de l’outil MySQLTuner qui permet de faire un diagnostic de l’état de santé et des performances de la base de données.

Utilisation de MySQLTuner

MySQLTuner est un outil open source permettant d’auditer la configuration d’une base de données MySQL et qui émet des recommandations de configuration permettant d’améliorer les performances et la stabilité de l’installation : https://github.com/major/MySQLTuner-perl

L’outil MySQLTuner est intégré dans le conteneur sidekiq de l’application Cyberwatch et peut donc être utilisé avec la commande suivante :

sudo cyberwatch exec sidekiq mysqltuner

En fonction des recommandations émises par le script, des modifications de configuration pourront être apportées à la base de données. En cas de question, n’hésitez pas à vous rapprocher de notre support technique.

Configuration du socle Cyberwatch

Adapter la configuration de Cyberwatch à la base externe

Tout d’abord, la création d’une sauvegarde de la base de données de l’application doit être effectuée via la commande sudo cyberwatch backup save. Cette archive est disponible sous le répertoire /var/lib/cyberwatch/backups/, et permet de finaliser la restauration de la base de données de Cyberwatch.

Ensuite, il convient de remplacer les mots de passe MYSQL_PASSWORD et MYSQL_ROOT_PASSWORD par celui de l’utilisateur dédié depuis le fichier /etc/cyberwatch/secrets.env.

Par ailleurs, l’ensemble des informations de connexion à la base de données externe sont éditables depuis le fichier /etc/cyberwatch/containers.env, où il est nécessaire de modifier :

  • la valeur du champ MYSQL_HOSTNAME par le l’adresse du serveur de base de données à contacter ;
  • la valeur du champ MYSQL_DATABASE par le nom de la base de données dédiée ;
  • la valeur du champ MYSQL_USER par le nom de l’utilisateur dédié, créé précédemment.

Reconfigurer l’instance pour ne plus utiliser de base de données locale

sudo cyberwatch configure --no-db

Si votre instance est composée de plusieurs nœuds, il est nécessaire de spécifier à nouveau les options à utiliser.

Par exemple, pour utiliser une base de données externe sur un nœud maître :

sudo cyberwatch configure --no-db --master

La communication avec la nouvelle base est considérée opérationnelle, lorsque le retour de la commande sudo cyberwatch logs sidekiq nous retourne :

Start healthcheck server...
Watch Redis
Testing redis uri redis:6379
Trying to connect to redis://redis:6379/0
Redis is up !
Watch Migration
All migration are done
Healthcheck completed reporting a successful start
Redis is on the same node, TLS is not required.
Checking if MariaDB supports TLS
TLS is available for MariaDB
Root CA found and valid, MariaDB certificate will be verified
2023-12-04T16:22:58.483Z pid=1 tid=53x INFO: Booted Rails 7.0.8 application in production environment

Il est alors possible de restaurer la base de données de l’application en exécutant :

sudo cyberwatch backup restore