Redondance
Introduction
Le module de redondance de DevI/O est un module complémentaire du serveur DevI/O permettant de redonder intégralement un poste principal sur un poste de secours en cas de défaillance de ce dernier.
Note
Le module de redondance permet ainsi une haute disponibilité du serveur d'acquisition Dev I/O
Prérequis
7zip.exe installé sur les postes principaux et secours.
DevI/O ainsi que l’ensemble des exécutables (interfaces) installés sur les postes principaux et secours.
Le compte de service qui execute le service Dev I/O <devioUser> doit-être commun sur les postes principaux et secours.
Warning
Le lancement de DevI/O par un client OPC doit être désactivé. En effet, excepté pour le premier lancement, c’est le module de redondance de DevI/O qui se charge de gérer les arrêts et relances du serveur DevI/O
Principes de fonctionnement
Concept général
Le concept général se base sur une messagerie établie entre le (ou les) poste(s) principal(aux) et le (ou les) poste(s) de secours. Cette messagerie repose sur le protocole TCP/IP. Les différents postes doivent donc être connectés en réseau.
Un poste de secours peut redonder plusieurs postes principaux (fonction de la volumétrie). Le module de redondance est une application client/serveur, où un poste de secours est serveur TCP/IP et un poste principal est client TCP/IP. Le serveur de secours accepte ainsi un ou plusieurs client(s).
Note
Contrairement à la notion de maître/esclave où les rôles des serveurs peuvent être inversés en cours de fonctionnement, la notion de poste principal/secours reste figée. Un poste de secours aura toujours ce rôle quel que soit l’évolution des basculements de l’application complète, et un poste principal reprendra la main dès qu’il en aura la possibilité.
Shemas de redondance
graph TD
subgraph "Redondance 1-n"
C[Serveur Principal 1] --> D[Serveur de Secours]
E[Serveur Principal 2] --> D
F[Serveur Principal n] --> D
end
subgraph "Redondance 1-1"
A[Serveur Principal] --> B[Serveur de Secours]
end
Warning
Dans le cadre d’une redondance 1-n, le poste de secours ne pourra prendre en charge qu’un seul des n serveurs DevI/O principaux. Si plus d’un serveur principal est défaillant, seul le premier serveur défaillant sera redondé en termes d’application. En revanche, les autres serveurs principaux actifs seront toujours redondés en termes de transfert de configuration et de valeurs d’entités.
Fonctionnement
sequenceDiagram
participant Principal as Poste Principal
participant Studio as DevI/O Studio
participant Autoconf as Autoconfiguration
participant Secours as Poste de Secours
Studio->>Principal: Modification des paramètres
Autoconf->>Principal: Ajout / Suppresion / Mise à jour d'équipement
Principal->>Principal: Archivage .zip
Principal->>Secours: Transfert de l'archivage .zip
Secours->>Secours: Décompression de l'archivage .zip
Principal->>Secours: Envoi des valeurs des entités via messages
Secours->>Secours: Mise à jour des entités pour démarrage à chaud
Mode nominal
Sur un poste principal, le processus du module de redondance apparaît dans la liste des processus tout comme l’application DevI/O ainsi que les processus des interfaces canaux et d’échanges.
Sur un poste de secours, seul le processus du module de redondance est exécuté. Le module de redondance de chaque poste principal établit une connexion physique avec le module de redondance du poste de secours.
Basculement en mode nominal
Le mode nominal de DevI/O se réactive dès que le poste de secours détecte la présence et le fonctionnement du serveur DevI/O sur le poste principal.
Mode dégradé
Lorsque le module de redondance du poste de secours détecte une défaillance d’un poste principal, le poste de secours prend intégralement le relais en termes d’application de DevI/O.
Basculement en mode dégradé
Les sources de basculement de l’application DevI/O d’un poste principal vers un poste de secours sont les suivantes :
- Défaillance matérielle du poste principal
- Défaillance réseau du poste principal
- Défaillance du serveur Dev I /O sur le poste principal
- Défaillance du module de redondance sur le poste principal
- Défaillance réseau du poste de secours
Note
Si une défaillance réseau du poste de secours apparaît, le poste de secours prend en charge le premier serveur principal perdu. Cependant, ce serveur DevI/O, fonctionnant en parallèle du serveur principal, sera inactif.
Warning
Un arrêt normal du serveur DevI/O sur un poste principal n’entraîne pas le basculement vers le poste de secours.
Transfert et synchronisation
Lors de la connexion de deux modules de redondance entre eux, une synchronisation est réalisée entre la base de configuration DevI/O du poste de secours et celle d’un poste principal, en fonction de l’horodatage de cette base : ce qui permet d’avoir toujours la base la plus récente en fonctionnement.
Point de vue paramétrage
La synchronisation d’une base DevI/O s’effectue suite aux opérations suivantes :
- Modification de paramétrage via DevI/O Studio.
- Modification de paramétrage via le module d’autoconfiguration.
La synchronisation s’effectue comme suit :
1. Compression (ZIP) du répertoire de la base la plus récente.
2. Transfert vers le poste où la base est la moins récente.
3. Décompression de la base.
Point de vue valeurs d’entités
En cours de fonctionnement, les changements de valeurs des entités sur un poste principal peuvent être transférés sur le poste de secours, nécessaire en vue des démarrages à chaud des serveurs DevI/O. Ce transfert s’effectue par envoi de messages entre les modules de redondance du principal vers le secours.
Warning
le transfert des modifications de configuration est possible sans le transfert des changements de valeurs. En revanche, le transfert des changements de valeurs est impossible sans le transfert des modifications de configuration.
Parametrage
Etape 1: Configuration du poste principal
Etape 1.2: Modifier les propriétés du serveur
A partir de votre projet Dev I/O Studio
- clic-droit sur Server
- Propriétés
- Section Redondance
Serveur > Propriétés > Redondance
| Paramètre | Definition | Description |
|---|---|---|
-RDDBARCH |
Archivage secours | Active l'archivage des bases transférées du poste principal vers un poste de secours. |
-RDPORT <tcp_port> |
Port TCP | Indique le port TCP de communication des modules de redondance. Valeur par défaut : 801 |
-RDHOST <hostname_secours> |
Poste secours | Hostname du poste de secours. |
-RDWD <keepalive> |
Surveillance serveur | Indique la période de surveillance du serveur DevI/O par le module de redondance (valeur en seconde, > 0) |
-RDC <type_redondance> |
Type | Précise le type de redondance (0: désactivée,1: configuration uniquement, 2: configuration et temps-réel). |
Etape 1.3: Modifier le fichier DevioRedundancy.ini
Editez ..\DevIO\Bin\DevioRedundancy.ini à l’aide d’un éditeur de texte
-RDDB "<PATH_BASE_DB_BIN_poste_secours>"
-EXCMDUNZ "<path_7z.exe>" x -y "%s" -o"%s"
-EXCMDZ "<path_7z.exe>" a -y -r -xr!History* "%s"\"%s" -ssw "%s\*"
-RDDB 'C:\Program Files\DevIO\Data\Bases\DEMO\DEMO_DB_BIN'
-EXCMDUNZ "C:\Program Files\7-Zip\7z.exe" x -y "%s" -o"%s"
-EXCMDZ "C:\Program Files\7-Zip\7z.exe" a -y -r -xr!History* "%s"\"%s" -ssw "%s\*"
Etape 1.4: Création et partage DEVIORDSHARE
Etape 1.4.1: Création du dossier
- Créez un dossier DEVIORDSHARE sur le poste principale.
ExempleC:\Program Files\DevIO\Data\DEVIORDSHARE - Faites un clic droit sur le dossier DEVIORDSHARE
- Cliquez sur Propriétés.
Etape 1.4.2: Configurer le partage
- Allez dans l'onglet Partage.
- Cliquez sur Partage avancé....
- Cochez Partager ce dossier.
- Entrez le nom de partage : DEVIORDSHARE.
- Cliquez sur Autorisations.
- Autorisez Contrôle total pour le compte de service
<devioUser>. - Validez en cliquant sur OK.
Etape 1.4.3: Configurer les paramètres de sécurité
- Allez dans l'onglet Sécurité.
- Cliquez sur Modifier....
- Ajoutez l’utilisateur
<devioUser>. - Autorisez Contrôle total pour cet utilisateur.
- Validez en cliquant sur OK.
# INIT
$folderPath = Read-Host "Entrez le chemin du dossier (par défaut: C:\Program Files\DevIO\Data\DEVIORDSHARE)"
if ([string]::IsNullOrWhiteSpace($folderPath)) {
$folderPath = "C:\Program Files\DevIO\Data\DEVIORDSHARE"
}
$devioUser = Read-Host "compte de service <devioUser>"
# Etape 1: Création du dossier
New-Item -Path $folderPath -ItemType Directory
# Etape 2: Configurer le partage
$shareName = "DEVIORDSHARE"
# Créer le partage
net share $shareName=$folderPath /GRANT:$devioUser,CHANGE
# Configurer les autorisations de partage
$acl = Get-Acl -Path $folderPath
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($devioUser, "FullControl", "Allow")
$acl.SetAccessRule($accessRule)
Set-Acl -Path $folderPath -AclObject $acl
# Etape 3: Configurer les paramètres de sécurité
$security = Get-Acl -Path $folderPath
$securityRule = New-Object System.Security.AccessControl.FileSystemAccessRule($devioUser, "FullControl", "Allow")
$security.SetAccessRule($securityRule)
Set-Acl -Path $folderPath -AclObject $security
Write-Host "Configuration terminée avec succès."
Etape 2: Configuration du poste secours
Etape 2.1: Copie du projet Dev I/O
Copier le projet DevI/O préalablement configuré sur le poste principal vers le poste de secours.
Exemple C:\Program Files\DevIO\Data\Bases\DEMO
Etape 2.2: Modifier le fichier DevioRedundancy.ini
Editez ..\DevIO\Bin\DevioRedundancy.ini à l’aide d’un éditeur de texte
-EXCMDUNZ "<path_7z.exe>" x -y "%s" -o"%s"
-EXCMDZ "<path_7z.exe>" a -y -r -xr!History* "%s"\"%s" -ssw "%s\*"
-EXCMDUNZ "C:\Program Files\7-Zip\7z.exe" x -y "%s" -o"%s"
-EXCMDZ "C:\Program Files\7-Zip\7z.exe" a -y -r -xr!History* "%s"\"%s" -ssw "%s\*"
Partage de fichier
TODO
Lancement des postes
Note
Lorsque l’application complète, postes principaux et poste de secours est lancée pour la première fois, l’ordre de lancement des postes n’est pas important si l’application part de bases vierges. En revanche, si le premier lancement s’effectue avec des bases déjà paramétrées, les postes principaux doivent être opérationnels avant le lancement du poste de secours. Ce dernier se synchronisera lors de son lancement.
Warning
La redondance n’est pas effective pour les bases DevI/O en configuration avec DevI/O Studio.