Milestone XProtect : le cluster de haute disponibilité le plus simple avec réplication temps réel et tolérance aux pannes entre deux serveurs redondants

Evidian SafeKit

Comment le logiciel Evidian SafeKit met en œuvre simplement la haute disponibilité de Milestone XProtect avec réplication temps réel et tolérance aux pannes entre deux serveurs redondants sans disque partagé

Evidian SafeKit apporte la haute disponibilité à Milestone XProtect, le système de vidéosurveillance (CCTV) avec deux serveurs redondants. Cet article explique comment mettre en œuvre rapidement un cluster Milestone avec réplication temps réel et reprise automatique sur panne des services de management et de la base de données SQL sans la complexité de Microsoft failover clustering (sans disque partagé et sans configuration d'un contrôleur de domaine). Le module de haute disponibilité milestone.safe et un essai gratuit sont offerts dans le tab Installation ci-dessous.

Cette solution de clustering est reconnue comme la plus simple à mettre en œuvre par nos partenaires Milestone. C'est également une solution complète qui résout les défaillances matérielles (20% des problèmes) incluant la panne d'une salle machine complète, les défaillances logicielles (40% des problèmes) incluant un update logiciel serveur par serveur et les erreurs humaines (40% des problèmes) grâce à sa simplicité d'administration.

Dans l'architecture du système Milestone, des clusters SafeKit peuvent être installés pour la haute disponibilité de Milestone XProtect (n'importe quelle édition) avec:

  • Microsoft SQL Server (y compris l'édition Express),
  • Management server,
  • Log server,
  • Event server.

L'ensemble des services (SQL Server, Management, Log, Event) peuvent être installés sur un seul cluster et nous considérons ce cas d'utilisation dans cet article. Mais la configuration peut être également facilement éclatée sur plusieurs clusters.

La solution SafeKit a été vérifiée par Milestone. Notez que la haute disponibilité des serveurs de Recording (ou enregisteurs) est déjà gérée par la solution intégrée à Milestone.

Notez que SafeKit est un produit générique. Vous pouvez mettre en œuvre avec le même produit la réplication en temps réel et le basculement de nouveaux répertoires de fichiers et services, de bases de données, de conteneurs docker, de machines virtuelles Hyper-V ou KVM complètes, d'applications Cloud. Voir d'autres exemples de modules miroirs ici.


Comment Evidian SafeKit met en œuvre la haute disponibilité de Milestone XProtect avec réplication temps réel et tolérance aux pannes

Sur la figure avec deux serveurs redondants, le serveur 1 / PRIM exécute les services Milestone XProtect et SQL. Les utilisateurs sont connectés à l'adresse IP virtuelle du cluster miroir. SafeKit réplique les fichiers ouverts par les services Milestone XProtect et SQL en temps réel. Seules les modifications apportées aux fichiers sont répliquées sur le réseau, limitant ainsi le trafic (réplication de fichiers au niveau octet). Les noms des répertoires de fichiers contenant les données de Milestone XProtect et SQL sont simplement configurés dans SafeKit. Il n'existe pas de pré-requis sur l'organisation des disques entre les deux serveurs. Les répertoires à répliquer peuvent se trouver dans le disque système. SafeKit met en œuvre une réplication synchrone sans perte de données en cas de panne, contrairement à une réplication asynchrone.

En cas de défaillance du serveur 1, il y a un basculement automatique sur le serveur 2 avec redémarrage des services Milestone XProtect et SQL. Ensuite, lorsque le serveur 1 est redémarré, SafeKit met en œuvre son retour automatique dans le cluster avec la réintégration des données sans arrêter les services Milestone XProtect et SQL sur le serveur 2. Enfin, le système retourne à la réplication synchrone entre le serveur 2 et le serveur 1. L'administrateur peut décider d'échanger le rôle du primaire et du secondaire pour revenir à un serveur 1 qui exécute les services Milestone XProtect et SQL. Ce changement de rôle peut également être fait automatiquement par configuration.

Notez qu'il existe une autre architecture SafeKit très simple à déployer basée sur Hyper-V pour répliquer le serveur Milestone XProtect. L'architecture SafeKit/Hyper-V réplique la machine virtuelle Hyper-V complète contenant Milestone XProtect et la redémarre en cas de panne. Le gestionnaire Hyper-V est inclus gratuitement dans toutes les versions de Windows, y compris Windows 10 Pro. La haute disponibilité au niveau applicatif avec le module milestone.safe est meilleure que la haute disponibilité au niveau machine virtuelle, comme expliqué ici.

Version d'essai gratuit + module milestone.safe et procédure d'installation étape par étape de SafeKit sur deux serveurs Milestone XProtect redondants

Démonstration d'un cluster Milestone XProtect avec Evidian SafeKit entre deux serveurs redondants

Cette vidéo montre la configuration d'un module miroir Milestone XProtect avec réplication temps réel synchrone d'une base de données SQL et reprise automatique sur panne de Milestone Management Server et SQL Server.
Après un basculement, la reconnexion d'un serveur d'enregistrement est également démontrée.

Continuez avec le tab Installation

Installation de SafeKit pour la haute disponibilité de Milestone XProtect et SQL avec réplication temps réel synchrone et tolérance aux pannes entre deux serveurs redondants

Prérequis

  • vous avez besoin de Milestone XProtect et SQL installé sur 2 nœuds (machines virtuelles ou serveurs physiques)
  • sur Windows, avec le gestionnaire de services Windows, mettez les services Milestone XProtect et SQL avec type de démarrage au boot = manuel sur les deux nœuds. SafeKit contrôle le démarrage des services Milestone XProtect et SQL dans start_prim . Editez start_prim lors de la configuration pour vérifier si vous avez mis tous les services en démarrage manuel, y compris les nouveaux que vous pouvez ajouter.
  • si ça n'est pas déjà fait, activer l'exécution des scripts PowerShell sur les 2 nœuds

Installation du package sur Windows

Sur les deux nœuds Windows

  • Installez la version gratuite de SafeKit sur 2 nœuds Windows avec les services Milestone XProtect et SQL installés sur les deux nœuds
  • Téléchargez le module Windows

    Le module contient les fichiers userconfig.xml, start_prim et stop_prim décrits dans le tab Internes
  • Mettez milestone.safe sous C:\safekit\Application_Modules\demo\ (créez le répertoire demo s'il n'existe pas)
  • Pour ouvrir le pare-feu Windows, sur les deux nœuds démarrez une ligne de commande en tant qu'administrateur, allez sous C:\safekit\private\bin et tapez .\firewallcfg.cmd add
  • Pour synchroniser SafeKit au boot et au shutdown, sur les deux nœuds démarrez une ligne de commande en tant qu'administrateur, allez sous C:\safekit\private\bin et tapez .\addStartupShutdown.cmd une seule fois

Note   Guide de l'utilisateur disponible ici

Continuez avec l'onglet Configuration

Warning  Important. Un nouveau module milestone.safe est livré depuis Milestone 2019 R2 avec son serveur d'identité : suivez les instructions de configuration spéciales dans l'onglet Configuration.

Configuration de SafeKit pour la haute disponibilité de Milestone XProtect et SQL avec réplication temps réel synchrone et tolérance aux pannes entre deux serveurs redondants

Warning  Suivez attentivement les instructions de configuration ci-dessous, notamment sur l'adresse IP virtuelle pour une exécution correcte avec le serveur d'authentification IDP de Milestone.

Instructions de configuration

Warning  Important : toute la configuration SafeKit est réalisée à partir d'un seul navigateur.

Lancez la console Web dans un navigateur sur un nœud en vous connectant à http://localhost:9010 (image suivante). Vous pouvez aussi exécuter la console dans un navigateur sur un poste de travail externe en vous connectant à l'adresse IP physique d'un nœud.

Démarrer la console Web SafeKit pour configurer Milestone XProtect et SQL

Note   Pour sécuriser la console web, voir 11. Sécurisation de la console web de SafeKit dans le guide de l'utilisateur.

Entrez l'adresse IP du premier nœud et cliquez sur Confirm (image suivante)

Console Web SafeKit - premier nœud dans le cluster Milestone XProtect et SQL

Cliquez sur New node et entrez l'adresse IP du deuxième nœud (image suivante)
Puis, cliquez sur la disquette rouge pour sauvegarder la configuration (image suivante)

Console Web SafeKit - second nœud dans le cluster Milestone XProtect et SQL

Note   Dans l'image précédente, l'opération de sauvegarde a placé les adresses IP dans le fichier c:\safekit\var\cluster\cluster.xml et a appliqué la commande distribuée c:\safekit\safekit –H "*" -G qui configure le nœud 1 et le nœud 2. Ne refaites donc pas cette opération sur l'autre nœud. Vérifiez la connectivité et le pare-feu entre les deux nœuds pour résoudre des problèmes.

Dans l'onglet Configuration (image suivante), cliquez sur milestone.safe (xxx.safe dans l'image suivante) puis entrez milestone comme nom du module et cliquez sur Confirm (la console trouve milestone.safe dans le répertoire 'demo/' que vous avez précédemment rempli lors de l'installation)

Console Web SafeKit - démarrer la configuration des services Milestone XProtect et SQL  console Web SafeKit - entrez le nom du module Milestone XProtect et SQL

Cliquez sur Validate (image suivante)

Console Web SafeKit - entrez les nœuds du module Milestone XProtect et SQL

Après le clic sur Validate, cette nouvelle fenêtre apparaît (image suivante)

Console Web SafeKit - entrer les paramètres du module Milestone XProtect et SQL

Dans l'image précédente:

  • Vérifiez que les répertoires répliqués sont installés sur les 2 nœuds et contiennent les données applicatives.
    La réplication des données et aussi des logs est requise pour une base de données.
    Vous pouvez ajouter des nouveaux répertoires répliqués si nécessaire.
  • Enter une adresse IP virtuelle. Une adresse IP virtuelle est une adresse IP standard dans le même réseau IP (même subnet) que les adresses IP des 2 nœuds.
    Les clients de l'application doivent être configurés avec l'adresse IP virtuelle (ou le nom DNS associé à l'adresse IP virtuelle).
    L'adresse IP virtuelle est automatiquement basculée en cas de panne.
  • start_prim et stop_prim doivent contenir le démarrage et l'arrêt de l'application Milestone XProtect et SQL.
    Modifiez les scripts et vérifiez que les noms des services dans ces scripts sont ceux installés sur vos deux machines (sinon modifiez-les dans les scripts).
    Vous pouvez ajouter de nouveaux services dans les scripts si nécessaire.
  • Arrêtez les services configurés dans start_prim sur les 2 nœuds.
  • Sur Windows et sur les 2 nœuds, avec le gestionnaire de services Windows, mettez les services Milestone XProtect et SQL inscrits dans start_prim avec type de démarrage au boot = Manuel sur les 2 nœuds (SafeKit contrôle le démarrage des services Milestone XProtect et SQL dans start_prim).
  • Notez que, si un nom de processus est affiché dans Process checker, il sera surveillé avec l'action restart en cas de panne. Les services seront arrêtés et redémarrés localement sur le serveur principal si ce processus disparaît de la liste des processus en cours d'exécution. Après 3 redémarrages locaux infructueux, le module est arrêté sur le serveur principal et les services sont redémarrés sur le serveur secondaire.

Cliquez sur Validate (image précédente)

Console Web SafeKit - arrêtez le module Milestone XProtect et SQL avant la configuration

Cliquez sur Configure (image précédente)

Console Web SafeKit - vérifier le message succès vert de la configuration du module Milestone XProtect et SQL

Vérifiez le message succès vert sur les deux serveurs et cliquez sur Next (image précédente).

Warning  Dans l'image suivante, pour Milestone 2019 R2 et supérieur, ne démarrez rien et cliquez sur le bouton Close.

Console Web SafeKit - sélectionnez le nœud Milestone XProtect et SQL avec les données à jour

Sur le nœud 1, définissez l'adresse IP virtuelle dans des fichiers Milestone internes pour Milestone 2019 R2 et supérieur

Il faut exécuter un script spécial (UpdateAuthServerUri.ps1) pour configurer l'adresse IP virtuelle dans 2 fichiers Milestone internes. Ce script modifie les fichiers suivants :

  • C:\ProgramData\Milestone\XProtect Management Server\ServerConfig.xml:    <AuthorizationServerUri>http://Virtual-IP-Address/IDP</AuthorizationServerUri>
  • C:\Program Files\Milestone\XProtect Management Server\IIS\IDP\appsettings.json:    "Authority": "http://Virtual-IP-Address/IDP"

Exécutez le point suivant. Nous supposons à cette étape que l'adresse IP virtuelle a été correctement configurée dans les étapes précédentes (le script ci-dessous utilise l'adresse IP virtuelle entrée dans la console SafeKit et stockée dans userconfig.xml).

  • Dans une ligne de commande Powershell en tant qu'administrateur, exécutez le script c:/safekit/modules/milestone/bin/UpdateAuthServerUri.ps1 sur le nœud 1.
    Ce script positionne l'adresse IP virtuelle dans les 2 fichiers Milestone précédents.

Notez que la même procédure est requise lorsque Milestone s'exécute avec Microsoft Cluster : https://developer.milestonesys.com/s/article/RS-goes-offline-mode-after-switching-the-Management-Server-cluster-node.

Pour toutes les versions de Milestone, forcez le démarrage en tant que primaire du nœud 1 dans SafeKit

On suppose que le nœud 1 contient les répertoires répliqués les plus récents.
On suppose que les services démarrés automatiquement par SafeKit dans le script start_prim sont bien arrêtés sur le nœud 1.
Démarrez le modude milestone sur le nœud 1 en forçant son démarrage en primaire (Expert/Force start/as prim dans l'image suivante).
Lorsque vous démarrerez le nœud 2, la première resynchronisation se fera du nœud1 vers le nœud 2.
En cas de doute, avant cette opération, nous vous suggérons de faire une copie des répertoires répliqués avant de démarrer le cluster pour éviter toute erreur.

SafeKit web console - le premier nœud Milestone XProtect et SQL est démarré en primaire et ALONE

Le nœud 1 doit atteindre l'état ALONE (vert) (image suivante), ce qui signifie que le script start_prim a été exécuté sur le nœud 1.
Lorsque le nœud 1 atteint l'état ALONE (vert), vous pouvez vérifier que l'application Milestone XProtect et SQL est démarrée sur le nœud 1.
Si l'état est ALONE (vert) et si l'application n'est pas démarrée, vérifiez le script start_prim: vous pouvez trouver les messages de sortie du script dans l'Application Log disponible dans l'onglet Contrôle.
Si le nœud 1 n’atteint pas l’état ALONE (vert), analysez pourquoi avec le Module Log disponible dans l'onglet Contrôle.

SafeKit web console - the first Milestone XProtect et SQL node starts as primary and is alone

Sur le nœud 1, enregistrez le management server sur l'adresse IP vituelle pour Milestone 2019 R2 et supérieur

L'enregistrement du management server sur le nœud 1 est nécessaire pour une connexion correcte des recording servers sur l'adresse IP virtuelle sans problèmes d'autorisation.

La procédure enregistre le management server sur le nœud 1 dans la base de données SQL exécutée sur le nœud 1 via une connexion à l'adresse virtuelle. On suppose à cette étape que la base de données SQL s'exécute sur le nœud 1 à l'adresse IP virtuelle, ce qui est normalement le cas lorsque le module est ALONE vert.

Exécutez les points suivants sur le nœud 1 :

  • Cliquez avec le bouton droit de la souris sur l'icône du management server (image suivante)
  • Stop Management Server Service (image suivante)
  • Pour enregistrer avec la version Milestone 2020 R2 et supérieure, choisissez Server Configurator (image suivante), puis saisissez l'adresse IP virtuelle.

    Milestone 2020 - enregistrer le management server

  • Pour enregistrer sur les versions [Milestone 2019 R2 - Milestone 2020 R1], choisissez "Change encryption settings..." (image suivante), puis cliquez sur "OK".

    Milestone - enregistrer le management server

  • Start Management Server Service (voir l'image précédente)
  • Dans une ligne de commande Powershell sur le nœud 1 en tant qu’administrateur, exécutez à nouveau le script c:/safekit/modules/milestone/bin/UpdateAuthServerUri.ps1.

    Selon la version de Milestone, l'enregistrement peut avoir supprimé la configuration de l'adresse IP virtuelle dans les fichiers Milestone internes - le script précédent restaure l'adresse IP virtuelle. Si vous êtes dans le mauvais cas et si vous enregistrez à nouveau le management server après cette procédure, vous devez exécuter UpdateAuthServerUri.ps1 avant de redémarrer le management server pour restaurer l'adresse IP virtuelle dans les fichiers Milestone internes.

Dans le Milestone Management Client sur le nœud 1, définissez l'adresse IP virtuelle dans les URLs des Registered Services et du Network

1- Démarrez Milestone Management Client sur le nœud 1.

2- Dans le menu Tools, sélectionnez Registered Services.

  • Dans la fenêtre Add/Remove Registered Services, sélectionnez un service dans la liste et cliquez sur Edit.
  • Dans la fenêtre Edit Registered Service, modifiez l'adresse URL du service avec la même adresse URL mais contenant l'adresse IP virtuelle.
  • Répétez ces étapes pour tous les services répertoriés dans la fenêtre Add/Remove Registered Services.

Milestone Magement Client - Virtual IP address in the URLs

3- Dans la même fenêtre, cliquez sur Network.

  • Dans la fenêtre Network Configuration, modifiez l'adresse URL du serveur avec la même adresse URL mais contenant l'adresse IP virtuelle.

Dans le Milestone Management Client sur le nœud 1, affectez les rôles administrateurs pour assurer un basculement correct

Quand vous démarrez le Milestone Management Client sur le nœud 1, le login suivant apparaît :

Milestone Magement Client - Login

Vous avez le choix entre "Windows authentication" / "Basic authentication".

  • Pour une Windows authentication et un utilisateur local, le mot de passe utilisateur sera retrouvé localement sur chaque serveur.
    Warning  Il est important que le groupe Windows BUILTIN\Administrators soit positionné dans Management Client / Security / Roles (voir image suivante). Ce groupe a le même SID sur les 2 nœuds et permet une authentification avec un utilisateur local sur le nœud secondaire après un basculement.
  • Pour une Windows authentication et un utilisateur dans l'Active Directory, le mot de passe de l'utilisateur sera retrouvé dans l'AD externe après un basculement sur le nœud secondaire, donc pas de configuration spéciale.
  • Pour une Basic authentication, l'utilisateur/mot de passe est stocké dans la base SQL et sera retrouvé sur le nœud secondaire en cas de basculement.
    Warning  Nous suggérons de créer un utilisateur avec une Basic authentication (Admin dans l'image suivante) pour être sûr de se ré-authentifier sur le nœud secondaire après un basculement.

Milestone Magement Client - Roles

Sur le nœud 2, enregistrez le management server sur l'adresse IP virtuelle pour Milestone 2019 R2 et supérieur

La procédure enregistre désormais le management server sur le nœud 2 dans la base de données SQL exécutée sur le nœud 1 via une connexion à l'adresse virtuelle. Nous supposons à cette étape que le module SafeKit milestone a été démarré sur le nœud 1 (base de données SQL disponible à l'adresse IP virtuelle).

Exécutez les points suivants

  • Dans une ligne de commande Powershell en tant qu'administrateur, exécutez le script c:/safekit/modules/milestone/bin/UpdateAuthServerUri.ps1 sur le nœud 2.
    Ce script positionne l'adresse IP virtuelle dans des fichiers Milestone internes.
  • Enregistrez le management server sur le nœud 2 (cette étape est obligatoire pour un redémarrage correct après basculement).
    L'option ci dessous est disponible si le Management Server est arrêté sur le nœud 2.
  • Warning  Le compte de l'utilisateur exécutant l'enregistrement sur le nœud 2 doit avoir le rôle d'administrateur dans Milestone sur le nœud 1. Pour un utilisateur local et une authentification Windows, vérifiez que le groupe Windows "BUILTIN\Administrators" est configuré dans Management Client / Security / Roles.
  • Pour l'enregistrement sur les versions Milestone 2020 R2 et au dessus, cliquez avec le bouton droit sur l'icône du management server sur le nœud 2
    et choisissez "Server Configurator" (image suivante), puis entrez l'adresse IP virtuelle .

    Milestone - enregistrez management server

  • Pour l'enregistrement sur les versions [Milestone 2019 R2 - Milestone 2020 R1], cliquez avec le bouton droit sur l'icône du management server sur le nœud 2
    et choisissez "Change encryption settings..." (image suivante), puis cliquez sur "OK" .

    Milestone - enregistrez management server

  • Dans une ligne de commande Powershell sur le nœud 2 en tant qu'administrateur, exécutez à nouveau le script c:/safekit/modules/milestone/bin/UpdateAuthServerUri.ps1.
    Suivant la version de Milestone, l'enregistrement a pu supprimer la configuration de l'adresse IP virtuelle dans les fichiers Milestone internes - ce script restaure l'adresse IP virtuelle.

Pour toutes les versions de Milestone

Console Web SafeKit - le premier nœud Milestone XProtect et SQL démarre en tant que primaire et est seul

On suppose que les services démarrés automatiquement par SafeKit dans le script start_prim sont bien arrêtés sur le nœud 2.
Démarrez le nœud 2 (image précédente) qui devient SECOND vert (image suivante) après la resynchronisation de tous les répertoires répliqués (copie binaire du nœud 1 vers le nœud 2).

console Web SafeKit - le second nœud Milestone XProtect et SQL démmarre en tant que SECOND

Le cluster est opérationnel avec les services Milestone XProtect et SQL s'exécutant sur le nœud PRIM et ne s'exécutant pas sur le nœud SECOND (image précédente). Seules les modifications à l'intérieur des fichiers sont répliquées en temps réel dans cet état.

Attention, les composants qui sont clients des services Milestone XProtect et SQL doivent être configurés avec l'adresse IP virtuelle. La configuration peut être effectuée avec un nom DNS (si un nom DNS a été créé et associé à l'adresse IP virtuelle).

Configurez l'adresse IP virtuelle comme adresse de connexion des recording servers et du management client

Soit installez les recording servers, en spécifiant l'adresse IP virtuelle dans l'URL d'installation.
Ou, sur les recording servers, postionnez l'adresse IP virtuelle dans C:\ProgramData\Milestone\XProtect Recording Server\RecorderConfig.xml pour :

  • <server><address>
  • et <server><authorizationserveraddress>

Pour que le Milestone Management Client se reconnecte après basculement, vous devez utiliser l'adresse IP virtuelle pour la connexion.

Tests

Vérifiez avec la console Microsoft Management Console (MMC) que les services Milestone XProtect et SQL ont été démarrés sur le serveur primaire par le script start_prim et arrêtés sur le serveur secondaire par le script stop_prim.

Arrêtez le nœud PRIM en faisant défiler le menu du nœud primaire et en cliquant sur Stop. Vérifiez qu'il y a un basculement sur le nœud SECOND. Et avec la console Microsoft Management Console (MMC), vérifiez le basculement des services Milestone XProtect et SQL (arrêtés et démarrés dans les scripts stop_prim et start_prim) .

Plus d'information sur les tests dans le guide de l'utilisateur

Démarrage automatique du module au boot

Configure boot start (image suivante sur le côté droit) configure le démarrage automatique du module au boot du serveur. Effectuez cette configuration sur node1 and node2 une fois que la solution de haute disponibilité fonctionne correctement.

Console Web SafeKit - Démarrage automatique au boot du module Milestone XProtect et SQL

Sur Windows, avec le gestionnaire de services Windows, on suppose que les services Milestone XProtect et SQL sont avec type de démarrage au boot = manuel sur les deux nœuds. SafeKit contrôle le démarrage des services Milestone XProtect et SQL au démarrage du module dans start_prim .

Notez que pour synchroniser SafeKit au boot et au shutdown, sur les deux nœuds, on suppose qu'une commande a été exécutée à l'installation en tant qu'administrateur .\addStartupShutdown.cmd dans C:\safekit\private\bin (sinon faites le maintenant une seule fois).

Pour lire les logs SafeKit, allez au tab Dépannage

Pour éditer userconfig.xml, start_prim et stop_prim, allez au tab Configuration avancée

Résolution de problèmes avec SafeKit pour la haute disponibilité de Milestone XProtect et SQL avec réplication temps réel synchrone et tolérance aux pannes entre deux serveurs redondants

Journal du module

Consultez le journal d'un module pour comprendre les raisons d'une reprise sur panne, d'un état d'attente sur la disponibilité d'une ressource etc...
Pour voir le journal du module sur le serveur primaire (image suivante):

  • cliquez sur l'onglet Control
  • cliquez sur node 1/PRIM (il devient bleu) à gauche pour sélectionner le serveur
  • cliquez sur Module Log
  • cliquez sur l'icône Refresh (flêches vertes) pour mettre à jour la console
  • cliquez sur la disquette pour sauver le log du module dans un fichier .txt et pour l'analyser dans un éditeur de texte

Répétez la même opération pour voir le journal du module du serveur secondaire.

Console Web SafeKit - Journal du module du serveur Milestone XProtect et SQL PRIM

Journal applicatif

Consultez le journal applicatif pour voir les messages de sortie des scripts de redémarrage stat_prim et stop_prim.
Pour voir le journal applicatif du serveur primaire (image suivante) :

  • cliquez sur l'onglet Control
  • cliquez sur node 1/PRIM (il devient bleu) à gauche pour sélectionner le serveur
  • cliquez sur Appication Log pour voir les messages de démarrage et d'arrêt des services Milestone XProtect et SQL
  • cliquez sur l'icône Refresh (flêches vertes) pour mettre à jour la console
  • cliquez sur la disquette pour sauver le log applicatif dans un fichier .txt et pour l'analyser dans un éditeur de texte

Répétez la même opération pour voir le journal applicatif du serveur secondaire.

Console Web SafeKit - Application log du serveur Milestone XProtect et SQL PRIM

Plus d'information sur la résolution de problèmes dans le guide de l'utilisateur

Pour un support, allez au tab Support

Configuration avancée de SafeKit pour la haute disponibilité de Milestone XProtect et SQL avec réplication temps réel synchrone et tolérance aux pannes entre deux serveurs redondants

Configuration avancée

Dans l'onglet Advanced Configuration (image suivante), vous pouvez modifier les fichiers internes au module : bin/start_prim et bin/stop_prim et conf/userconfig.xml (image suivante sur le côté gauche). Si vous faites des changements dans les fichiers internes ici, vous devez appliquer la nouvelle configuration par un clic droit sur l'icône/xxx sur le côté gauche (image suivante) : l'interface vous permettra de redéployer les fichiers modifiés sur les deux serveurs.

Console Web SafeKit - Configuration avancée du module Milestone XProtect et SQL

Plus d'information sur userconfig.xml dans le guide de l'utilisateur

Pour un exemple de userconfig.xml, start_prim et stop_prim, allez au tab Internes

Support de SafeKit pour la haute disponibilité de Milestone XProtect et SQL avec réplication temps réel synchrone et tolérance aux pannes entre deux serveurs redondants

Support

Pour obtenir de l'aide sur le centre d'appel de https://support.evidian.com, prenez 2 Snaphots (2 fichiers .zip), un pour chaque serveur et téléchargez-les dans l'outil du centre d'appel (image suivante).

Console Web SafeKit - Snaphots du module Milestone XProtect et SQL pour le support

Plus d'information sur le support dans le guide de l'utilisateur

Fichiers internes à SafeKit pour la haute disponibilité de Milestone XProtect avec réplication temps réel synchrone et tolérance aux pannes

Allez dans le tab Configuration avancée pour modifier les fichiers ci-dessous.

Internal files of the Windows milestone.safe module

userconfig.xml (description dans le guide de l'utilisateur)
<!DOCTYPE safe>
<safe>
   <service mode="mirror" failover="on" defaultprim="alone" loop_interval="24" maxloop="3">
      <!-- Heartbeat Configuration -->
      <!-- Names or IP addresses on the default network are set during initialization in the console -->
      <heart timeout="30000" pulse="700">
         <heartbeat name="default" ident="flow">
         </heartbeat>
      </heart>
      <!-- Virtual IP Configuration -->
      <!-- Define the name or IP address of your virtual server 
      -->
      <vip>
         <interface_list>
            <interface check="on" arpreroute="on"> 
               <real_interface>
                  <virtual_addr addr="VIRTUAL-IP-ADDRESS" where="one_side_alias" />
               </real_interface>
            </interface>
         </interface_list>
      </vip>
      <!-- Software Error Detection Configuration -->
      <errd polltimer="10">
         <!-- SQL Server process -->
         <proc name="sqlservr.exe" atleast="1" class="prim" action="restart" />
      </errd>
      <!-- File Replication Configuration -->
      <!-- Adapt with the directory of your SQL Server database and logs
      -->
      <rfs async="second" acl="off" nbrei="3">
         <replicated dir="C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA" mode="read_only" />
         <replicated dir="C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Log" mode="read_only" />
      </rfs>
      <!-- User scripts activation -->
      <user logging="userlog" forcestoptimeout="300" nicestoptimeout="300" />
   </service>
</safe>
start_prim.cmd
@echo off

rem Script called on the primary server for starting application services 

rem For logging into SafeKit log use:
rem "%SAFE%\safekit" printi | printe "message"

rem stdout goes into Application log
echo "Running start_prim %*" 

set res=0

rem TODO: set to manual the start of services when the system boots

net start "W3SVC"

net start "MSSQLServer"
if not %errorlevel% == 0 (
  %SAFE%\safekit printi "SQL Server (MSSQLServer) start failed"
) else (
  %SAFE%\safekit printi "SQL Server (MSSQLServer) started"
)

"%SAFEBIN%\sleep" 10

net start "Milestone XProtect Management Server"
if not %errorlevel% == 0 (
  %SAFE%\safekit printi "Milestone XProtect Management Server start failed"
) else (
  %SAFE%\safekit printi "Milestone XProtect Management Server started"
)

"%SAFEBIN%\sleep" 10

net start "Milestone XProtect Log Server"
if not %errorlevel% == 0 (
  %SAFE%\safekit printi "Milestone XProtect Log Server start failed"
) else (
  %SAFE%\safekit printi "Milestone XProtect Log Server started"
)

net start "MilestoneEventServerService"
if not %errorlevel% == 0 (
  %SAFE%\safekit printi "MilestoneEventServerService start failed"
) else (
  %SAFE%\safekit printi "MilestoneEventServerService started"
)

net start "Milestone XProtect Data Collector Server"
if not %errorlevel% == 0 (
  %SAFE%\safekit printi "Milestone XProtect Data Collector Server start failed"
) else (
  %SAFE%\safekit printi "Milestone XProtect Data Collector Server started"
)

set res=%errorlevel%

if %res% == 0 goto end

:stop
"%SAFE%\safekit" printe "start_prim failed"

rem uncomment to stop SafeKit when critical
rem "%SAFE%\safekit" stop -i "start_prim"

:end
stop_prim.cmd
@echo off

rem Script called on the primary server for stopping application services 

rem For logging into SafeKit log use:
rem "%SAFE%\safekit" printi | printe "message"

rem ----------------------------------------------------------
rem
rem 2 stop modes:
rem
rem - graceful stop
rem   call standard application stop with net stop
rem
rem - force stop (%1=force)
rem   kill application's processes
rem
rem ----------------------------------------------------------

rem stdout goes into Application log
echo "Running stop_prim %*" 

set res=0

rem default: check mssql stopped on forcestop
if "%1" == "force" goto check

%SAFE%\safekit printi "Stopping Milestone XProtect Corporate Data Collector Server"
net stop "Milestone XProtect Data Collector Server" /Y

%SAFE%\safekit printi "Stopping Milestone Event Server Service"
net stop "MilestoneEventServerService" /Y

%SAFE%\safekit printi "Stopping Milestone Log Server Service"
net stop "Milestone XProtect Log Server" /Y

%SAFE%\safekit printi "Stopping Milestone XProtect Corporate Management Server"
net stop "Milestone XProtect Management Server" /Y

%SAFE%\safekit printi "Stopping SQL Server (MSSQLSERVER)"
net stop "MSSQLSERVER" /Y

"%SAFEBIN%\sleep" 10

net stop "W3SVC" /Y

rem Wait a little for the real stop of services
"%SAFEBIN%\sleep" 10

if %res% == 0 goto end

"%SAFE%\safekit" printe "stop_prim failed"
goto end

:check
call :checksrv "MSSQLSERVER"
goto end

:checksrv
  set SERVICE=%1
  net stop %SERVICE% /Y
  if NOT ERRORLEVEL 1 goto end
  sc query %SERVICE% | findstr STATE | findstr 1
  if NOT ERRORLEVEL 1 goto end
  "%SAFE%\safekit" stop -i "stop_prim: service not stopped"
  exit

:end

Clients du logiciel de haute disponibilité SafeKit dans tous les domaines d'activité

  • Le fournisseur de solutions pour le contrôle aérien, Copperchase, déploie SafeKit pour la haute disponibilité de ses systèmes dans les aéroports.

    Transport aérien [+]

    Le fournisseur de solutions pour le contrôle aérien, Copperchase, déploie SafeKit pour la haute disponibilité de ses systèmes dans les aéroports.

    Plus de 20 clusters SafeKit sont déployés sur Windows.

    Tony Myers, Directeur Business Développement témoigne :

    "En développant des applications pour le contrôle du trafic aérien, Copperchase est dans l'une des activités les plus critiques qui existent. Nous avons absolument besoin que nos applications soient disponibles tout le temps. Nous avons trouvé avec SafeKit une solution simple et complète de clustering qui répond parfaitement à nos besoins. Ce logiciel combine en un seul produit l'équilibrage de charge, la réplication de données en temps réel sans perte de données et le basculement automatique en cas de panne. C'est pourquoi, Copperchase déploie SafeKit dans les aéroports pour le contrôle du trafic aérien au Royaume-Uni et dans les 30 pays où nous sommes présents."


  • L'éditeur de logiciel Wellington IT spécialisé dans les banques coopératives déploie la solution de haute disponibilité SafeKit en Irlande et au Royaume-Uni avec son progiciel.

    Banque [+]

    L'éditeur de logiciel Wellington IT spécialisé dans les banques coopératives déploie la solution de haute disponibilité SafeKit en Irlande et au Royaume-Uni avec son progiciel.

    Plus de 25 clusters SafeKit sont déployés sur Linux avec Oracle.

    Peter Knight, Directeur Commercial témoigne :

    "La continuité d’activité et la résistance au désastre sont une préoccupation majeure pour nos clients utilisant notre application bancaire Locus déployée dans de nombreuses banques en Irlande et au Royaume-Uni. Nous avons trouvé avec SafeKit une solution simple et robuste pour assurer la haute disponibilité et la réplication synchrone et sans perte des données entre deux serveurs. Avec cette solution logicielle, nous ne sommes pas dépendants d’une solution de clustering matérielle spécifique et coûteuse. C’est un outil parfait pour fournir une option de haute disponibilité à une application développée par un éditeur logiciel."


  • La RATP choisit la solution de haute disponibilité et de load balancing SafeKit pour son poste de commande centralisé de la ligne 1 du métro parisien.

    Transport métropolitain [+]

    La RATP choisit la solution de haute disponibilité et de load balancing SafeKit pour son poste de commande centralisé de la ligne 1 du métro parisien.

    20 clusters SafeKit sont déployés sur Windows et Linux.

    Stéphane Guilmin, Responsable de projets témoigne :

    "Projet majeur au sein de la RATP, l’automatisation de la ligne 1 du métro 1 parisien impose que le poste commande centralisé (PCC) soit conçu pour résister aux pannes informatiques. Avec le produit SafeKit, nous avons trouvé trois avantages distinctifs répondant à ce besoin. Il s’agit d’abord d’une solution purement logicielle qui ne nous contraint pas à utiliser des disques partagés sur un SAN et des boitiers réseau de partage de charge. Nous pouvons très simplement séparer nos serveurs dans des salles machines distinctes. Ensuite, cette solution de clustering est homogène pour nos plateformes Windows et Linux. Et SafeKit nous apporte les trois fonctions dont nous avons besoin : le partage de charge entre serveurs, la reprise automatique sur panne et la réplication en temps réel des données."

    Et également, Philippe Marsol, responsable d'intégration, Atos BU Transport, témoigne :

    “SafeKit est un produit simple et puissant pour la haute disponibilité des applications. Nous avons intégré SafeKit dans nos projets critiques comme la supervision de la ligne 4 du métro Parisien (dans le PCC / Poste de Commande et de Contrôle) ou la ligne 1 et 2 à Marseille (dans le CSR / Centre de Supervision du Réseau). Grâce à la simplicité du produit, nous avons gagné du temps dans l'intégration et la validation de la solution et nous avons eu également des réponses rapides à nos questions avec une équipe Evidian réactive."


  • L'intégrateur de logiciels Systel déploie la solution de haute disponibilité SafeKit dans les centres d'appels des pompiers et du SAMU.

    Santé [+]

    L'intégrateur de logiciels Systel déploie la solution de haute disponibilité SafeKit dans les centres d'appels des pompiers et du SAMU.

    Plus de 30 clusters SafeKit sont déployés sur Windows avec SQL Server.

    Marc Pellas, Président Directeur Général témoigne :

    "SafeKit répond parfaitement aux besoins d'un éditeur logiciel. Son principal avantage est d'introduire la haute disponibilité via une option logicielle qui s'ajoute à notre propre suite logicielle multi-plateformes. Ainsi, nous ne sommes pas dépendants d'une solution de clustering matériel spécifique, coûteuse, complexe à installer, difficile à maintenir et différente suivant les environnements clients. Avec SafeKit, nos centres de pompiers sont déployés avec une solution de clustering logiciel intégrée avec notre application, uniforme chez tous nos clients, simple pour les utilisateurs et que nous maîtrisons totalement de l'installation jusqu'au support après vente."


  • La haute disponibilité de l'ERP de l'armée Française est réalisée avec SafeKit à la DGA.

    Gouvernement [+]

    La haute disponibilité de l'ERP de l'armée Française est réalisée avec SafeKit à la DGA.

    14 clusters SafeKit sont déployés sur Windows et Linux.

    Alexandre Barth, Administrateur système témoigne :

    "Notre équipe de production a mis en œuvre sans difficulté la solution SafeKit sur 14 clusters Windows et Unix. Notre activité critique est ainsi sécurisée avec des fonctions de haute disponibilité et de partage de charge. Les avantages de ce produit sont d'une part la simplicité de mise en œuvre et d'administration des clusters et d'autre part, l'uniformité de la solution face aux systèmes d'exploitation hétérogènes."


Différentiateurs de la solution de haute disponibilité SafeKit par rapport à la concurrence

Cluster miroir d'Evidian SafeKit avec réplication de fichiers temps réel et reprise sur panne

Économisez avec 3 produits en 1 >

Économisez avec 3 produits en 1

Like  Le logiciel de haute disponibilité SafeKit sur Windows et Linux permet d'économiser sur 1/ les stockages partagés ou répliqués externes coûteux, 2/ les boîtiers de load balancing, 3/ les éditions entreprise des OS et des bases de données

Like  SafeKit offre toutes les fonctionnalités de clustering par logiciel : réplication de fichiers temps réel synchrone, surveillance des défaillances serveur / réseau / logiciel, redémarrage automatique de Milestone XProtect et SQL, adresse IP virtuelle basculée en cas de panne pour rerouter les clients

Configuration très simple >

Configuration très simple

Like   La configuration du cluster est très simple et réalisée au moyen du module applicatif milestone.safe.

Like   Toute la configuration des clusters se fait à l'aide d'une console d'administration web centralisée simple

Like   Il n'y a pas de contrôleur de domaine ou d'Active Directory à configurer comme avec Microsoft cluster

Réplication synchrone >

Synchronous replication

Like  La réplication en temps réel est synchrone sans perte de données en cas de panne

Dislike  Ce n'est pas le cas avec une réplication asynchrone

Retour d'un serveur tombé en panne totalement automatisé (failback) >

Automatic failback

Like  Suite à une panne lorsqu'un serveur reboot, le retour du serveur tombé en panne se fait de manière totalement automatique dans le cluster avec une resynchronisation de ses données et sans arrêter Milestone XProtect et SQL sur le seul serveur restant

Dislike  Ce n'est pas le cas avec la plupart des solutions de réplication particulièrement celles avec une réplication au niveau base de données. Des opérations manuelles sont requises pour resynchroniser le serveur défaillant. Il peut être même nécessaire d'arrêter Milestone XProtect et SQL sur le seul serveur restant

Réplication de n'importe quel type de données >

Any replicated data

Like  La réplication fonctionne pour Milestone XProtect et SQL mais aussi pour n'importe quel fichier qui doit-être répliqué

Dislike  Ce n'est pas le cas pour la réplication au niveau base de données

Réplication de fichiers vs réplication de disque >

File replication vs disk replication

Like  La réplication est basée sur des répertoires de fichiers qui peuvent être localisés n'importe où (même dans le disque système)

Disike  Ce n'est pas le cas avec la réplication de disque où une configuration spéciale de Milestone XProtect et SQL est nécessaire pour placer les données applicatives dans un disque spécial

Réplication de fichiers vs disque partagé >

File replication vs shared disk

Like  Les serveurs peuvent être placés dans deux sites distants

Dislike  Ce n'est pas le cas avec les solutions à disque partagé

Sites distants et adresse IP virtuelle >

Remote sites

Like  Toutes les fonctionnalités de clustering SafeKit fonctionnent pour 2 serveurs sur des sites distants. La réplication requiert un réseau de type LAN étendu (latence = performance de la réplication synchrone, bande passante = performance de la resynchronisation après panne).

Like   Si les deux serveurs sont connectés au même réseau IP via un réseau local étendu entre deux sites distants, l'adresse IP virtuelle de SafeKit fonctionne avec une redirection au niveau 2

Like   Si les deux serveurs sont connectés à deux réseaux IP différents entre deux sites distants, l'adresse IP virtuelle peut être configurée au niveau d'un load balancer avec le "health check" de SafeKit.

Quorum >
Quorum

Like   La solution fonctionne avec seulement 2 serveurs et pour le quorum (isolation réseau entre 2 sites), un simple split brain checker vers un routeur est offert pour supporter une seule exécution de l'application critique

Dislike  Ce n'est pas le cas pour la plupart des solutions de clustering où un 3ième serveur est nécessaire pour le quorum

Cluster actif/actif >

Active active mirror cluster

Like  Le serveur secondaire n'est pas dédié au redémarrage du serveur primaire. Le cluster peut être actif-actif en exécutant deux modules miroirs différents

Dislike  Ce n'est pas le cas avec un système fault-tolerant dans lequel le secondaire est dédié à l'exécution de la même application synchronisée au niveau instruction

Solution de haute disponibilité uniforme >

Uniform high availability solution

Like  SafeKit implémente un cluster miroir avec une réplication et une reprise sur panne. Mais il implémente aussi un cluster ferme avec load balancing et reprise sur panne.

Like  Ainsi une architecture N-tiers peut-être rendue hautement disponible et load balancée avec la même solution sur Windows et Linux (même installation, configuration, administration avec la console SafeKit ou les commandes en ligne). Ceci est unique sur le marché

Dislike  Ce n'est pas le cas avec une architecture mixant des technologies différentes pour le load balancing, la réplication et la reprise sur panne

RTO / RPO >

RTO/RPO

Like    SafeKit met en œuvre un redémarrage rapide de Milestone XProtect et SQL en cas de panne : autour d'1 mn ou moins (voir RTO/RPO ici)

Dislike  Un redémarrage rapide de Milestone XProtect et SQL n'est pas assuré avec une réplication complète de machines virtuelles. En cas de panne d'un hyperviseur, une machine virtuelle doit être rebootée sur un nouvel hyperviseur avec un temps de redémarrage lié au reboot de l'OS comme avec VMware HA ou Hyper-V cluster

Cluster logiciel vs cluster matériel >

Un cluster simple avec SafeKit installé sur deux serveurs

Like  Un cluster logiciel simple avec le package SafeKit installé sur deux serveurs

Cluster matériel avec stockage SAN externe et load balancer

Dislike  Un cluster matériel complexe avec du stockage externe ou des boîtiers de load balancing

Cluster de type "shared nothing"" vs cluster à disque partagé >

SafeKit est un cluster de type shared-nothing: simple à déployer même dans des sites distants

Like  SafeKit est un cluster sans partage de type "shared-nothing": simple à déployer même sur des sites distants

Un cluster à disque partagé est complexe à déployer

Dislike  Un cluster à disque partagé est complexe à déployer

Haute disponibilité applicative vs Haute disponibilité de machines virtuelles complètes >

La haute disponibilité applicative de SafeKit supporte les pannes matérielles, logicielles et les erreurs humaines avec un temps de reprise rapide

Like  La haute disponibilité applicative supporte les pannes matérielles et logicielles avec un temps de reprise rapide (RTO autour d'1 mn ou moins)
Upgrade en douceur de l'application et de l'OS possible serveur par serveur (les versions N et N+1 peuvent coexister)

La haute disponibilité de machines virtuelles (VM) complètes supporte seulement les pannes matérielles avec un reboot de la VM et un temps de reprise indéfini

Dislike  La haute disponibilité de machines virtuelles complètes (VM) supporte seulement les pannes matérielles avec un reboot de la VM et un temps de reprise dépendant du reboot de l'OS.
Upgrade en douceur impossible

Haute disponibilité vs tolérance aux fautes >

SafeKit high availability vs fault-tolerance

Like  Aucun serveur dédié avec SafeKit. Chaque serveur peut être le serveur de reprise de l'autre serveur.
Exception logicielle avec redémarrage dans un autre environnement OS.
Upgrade en douceur de l'application et de l'OS possible serveur par serveur (les versions N et N+1 peuvent coexister)

Fault tolerance system

Dislike  Serveur secondaire dédié à l'exécution de la même application synchronisée au niveau instruction.
Exception logicielle sur les 2 serveurs en même temps.
Upgrade en douceur impossible

Réplication synchrone vs réplication asynchrone >

SafeKit met en œuvre une réplication temps réel synchrone sans perte de données en cas de panne

Like  SafeKit met en œuvre une réplication temps réel synchrone sans perte de données en cas de panne

Avec une réplication asynchrone, il y a une perte de données en cas de panne

Dislike  Avec une réplication asynchrone, il y a une perte de données en cas de panne

Réplication de fichiers au niveau octet vs réplication de disque au niveau du bloc >

SafeKit met en œuvre la réplication de fichiers au niveau octet et se configure simplement avec des répertoires à répliquer même sur le disque système

Like  SafeKit met en œuvre la réplication de fichiers temps réel au niveau octet et se configure simplement avec les répertoires applicatifs à répliquer même dans le disque système

La réplication de disque au niveau du bloc est complexe et nécessite de mettre les données de l'application dans un disque spécial

Dislike  La réplication de disque au niveau bloc est complexe à configurer et nécessite de mettre les données de l'application dans un disque spécial

Heartbeat, reprise sur panne et quorum pour éviter 2 serveurs maîtres >

Pour éviter 2 serveur maîtres, SafeKit propose un simple split brain checker configuré sur un routeur

Like  Pour éviter 2 serveur maîtres, SafeKit propose un simple "split brain checker" configuré sur un routeur

Pour éviter 2 serveur maîtres, les autres clusters demande une configuration complexe avec une 3ième machine, un disque de quorum spécial, un reset hardware distant

Dislike  Pour éviter 2 serveur maîtres, les autres clusters demandent une configuration complexe avec une 3ième machine, un disque de quorum spécial, une interconnexion spéciale

Adresse IP virtuelle
primaire/secondaire, load balancing réseau, basculement sur panne >

Aucune configuration réseau particulière n'est requise dans un cluster SafeKit pour l'équilibrage de la charge réseau

Like  Aucun serveur proxy dédié et aucune configuration réseau particulière ne sont requis dans un cluster SafeKit pour mettre en œuvre des adresses IP virtuelles

Une configuration réseau spéciale est requise dans d'autres clusters pour l'équilibrage de la charge réseau

Dislike  Une configuration réseau spéciale est requise dans d'autres clusters pour mettre en œuvre des adresses IP virtuelles. A noter que SafeKit propose un vérificateur d'état adapté aux équilibreurs de charge

Démonstrations de solutions de haute disponibilité avec SafeKit

Webinaire SafeKit

Ce webinaire présente en 10 minutes Evidian SafeKit.

Dans ce webinaire, vous comprendrez :

  • les clusters ferme et miroir
  • les économies par rapport aux solutions de clustering matériel
  • les meilleurs cas d'utilisation
  • le processus d'intégration d'une nouvelle application

Cluster Milestone XProtect

Cette vidéo montre la configuration d'un module miroir Milestone XProtect avec réplication temps réel synchrone et reprise sur panne.

Après basculement, la reconnexion d'un serveur d'enregistrement est également démontrée.

Essai gratuit ici

Cluster Apache

Cette vidéo montre une configuration d'un module ferme avec équilibrage de charge et reprise sur panne.

L'équilibrage de charge et le basculement sont configurés pour Apache mais fonctionnent de la même manière pour d'autres services Web.

Essai gratuit ici

Cluster Hyper-V

Cette vidéo montre un cluster Hyper-V avec des réplications complètes de machines virtuelles.

Les machines virtuelles peuvent s'exécuter sur les deux serveurs Hyper-V et elles sont redémarrées en cas de panne.

Essai gratuit ici

Formation gratuite en ligne au logiciel de haute disponibilité SafeKit

Modules SafeKit pour des solutions de haute disponibilité plug&play