DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Gestion des bases de données / HFSQL / Gestion de la réplication / Réplication de serveurs
  • Présentation
  • Comment le faire ?
  • Pré-requis
  • Les différentes étapes
  • Cas d'une réplication bi-directionnelle
  • Cas particuliers : Réplication en linéaire/en étoile/arborescente
  • Cas particulier : Réplication de serveurs et basculement d'utilisateurs
  • Cas particulier : Renommer un serveur
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Présentation
La réplication de serveurs HFSQL permet de répliquer automatiquement les données de serveur en serveur, de manière asynchrone.
La réplication de serveurs HFSQL peut être mise en place :
Comment le faire ?

Pré-requis

La mise en place de la réplication mono-birectionnelle ou bi-directionnelle entre plusieurs serveurs HFSQL nécessite quelques adaptations de l'application.

Adaptions nécessaires quelque soit le mode de réplication des serveurs (réplication spare ou non)
L'application ne doit pas utiliser la fonction HRaye.

Adaptations nécessaires uniquement pour une réplication classique de serveurs HFSQL (ces adaptations ne sont pas nécessaires pour une réplication spare) :
1. Au niveau de l'analyse de l'application
Dans l'analyse, les fichiers de données pris en compte dans la réplication de serveurs HFSQL doivent posséder :
  • soit un identifiant automatique sur 8 octets. Si l'identifiant automatique est sur 4 octets, vous devez le modifier.
    Attention : Cette modification peut entraîner des modifications au niveau du code de l'application. Par exemple, au niveau de la manipulation des identifiants de fichiers avec des variables de type entier.
    • Recherchez "n est un entier = fic.idauto" dans votre application pour remplacer l'entier par un entier sur 8.
    • Vérifiez si vous passez vos identifiants de fichiers à des procédures qui attendent un entier. Dans ce cas, il faut soit enlever le typage dans la déclaration de la procédure, soit utiliser un entier sur 8.
  • soit une clé primaire (c'est-à-dire une clé unique, simple ou composée, qui n'accepte pas de valeur nulle, et dont les composants n'acceptent pas de valeur nulle).
2. Au niveau de l'application
  • Il ne faut pas utiliser la fonction HRaye.
  • Un fichier ne peut pas être copié s'il est répliqué : la fonction HCopieFichier ne doit pas être utilisée.
    Remarque : Dans le cas d'une réplication mono-directionnelle :
    • la copie vers le serveur maître est interdite.
    • la copie depuis le serveur maître est autorisée.
  • Il n'est pas possible de restaurer un fichier répliqué : la fonction HRestaureSauvegarde ne peut pas être utilisée.
  • Les clusters HFSQL ne doivent pas être utilisés sur les données répliquées.
3. Sélection des informations à répliquer : La mise en place de la réplication de serveurs diminue les performances des serveurs HFSQL. Il est conseillé de mettre en place la réplication entre les serveurs uniquement pour les fichiers de données vraiment concernés par la réplication. N'hésitez pas à exclure certains fichiers de la réplication.
Attention :
  • La réplication bi-directionnelle entre plusieurs serveurs HFSQL nécessite l'utilisation d'adresses IP fixes ou de "reverse-DNS" : il faut pouvoir trouver le nom du serveur sur lequel la réplication a été créée.
  • La communication du serveur HFSQL abonné vers le serveur HFSQL maître se fera avec l'adresse IP que le serveur maître a utilisée pour contacter l'abonné lors de la création de la réplication. Il est possible de connaître cette adresse IP (utilisée par le serveur abonné pour contacter le serveur maître) via le Centre de Contrôle HFSQL du serveur abonné, dans la configuration de la réplication (champ "Serveur destination").

Les différentes étapes

Pour mettre en place une réplication entre deux serveurs HFSQL par programmation :
  1. Initialisez le serveur maître et le serveur abonné grâce à la fonction HRSInit.
    Exemples :
    • Initialisation d'un poste Maître :
      ConnexionHFMaitre est une Connexion
      ConnexionHFMaitre.Provider = hAccèsHFClientServeur
      ConnexionHFMaitre.Serveur = "NomServeurMaître:4900"
      ConnexionHFMaitre.Utilisateur = "Admin"
      ConnexionHFMaitre.MotDePasse = ""
      HOuvreConnexion(ConnexionHFMaitre)
       
      HRSInit(ConnexionHFMaitre, hrsMaître, 1, "MotDePasseMaître", 4996, 5)
    • Initialisation d'un poste Abonné :
      ConnexionHFAbonné est une Connexion
      ConnexionHFAbonné.Provider = hAccèsHFClientServeur
      ConnexionHFAbonné.Serveur = "NomServeurAbonné:4900"
      ConnexionHFAbonné.Utilisateur = "Admin"
      ConnexionHFAbonné.MotDePasse = ""
      HOuvreConnexion(ConnexionHFAbonné)
       
      HRSInit(ConnexionHFAbonné, hrsAbonné, 2, "MotDePasseAbonné", 4997, 7)
    Remarque : Pour définir une réplication sur un serveur HFSQL, l'utilisateur doit être administrateur ou avoir le droit de définir une réplication entre deux serveurs (constante hDroitRéplicationServeur dans les fonctions HInfoDroitServeur et HModifieDroitServeur).
  2. Définissez la réplication entre les deux serveurs HFSQL
    Pour définir la réplication entre les 2 serveurs HFSQL, il suffit de :
    • définir une variable de type hRSConfig.
    • utiliser la fonction HRSAjouteConfig pour configurer la réplication sur le poste maître.
    Par exemple :
    // Définition de la réplication
    ConfigRéplication1 est un hRSConfig
    ConfigRéplication1.Bidirectionnelle = Faux
    ConfigRéplication1.Serveur = "NomServeurAbonné:4997"
    Ajoute(ConfigRéplication1.Fichier, gsNomBase)
    Ajoute(ConfigRéplication1.Fichier, "-" + gsNomBase + "\FichierÀExclure.fic")
    ConfigRéplication1.RésolutionConflitModification = hrcmPlusRécent
    ConfigRéplication1.MotDePasse = "MotDePasseAbonné"
     
    // Planification de la réplication (tous les jours à 23h00)
    MaPlanification est une hPlanification
    MaPlanification.Mois = "*"
    MaPlanification.JourDeLaSemaine = "*"
    MaPlanification.Heure = "23"
    MaPlanification.Minute = "0"
     
    ConfigRéplication1.Planification = MaPlanification
     
    // Ajout de la réplication sans copie des fichiers
    HRSAjouteConfig(ConnexionHFMaitre, ConfigRéplication1, hrsSansCopie)

    Dans ce code, les points à remarquer sont les suivants :
    • le serveur HFSQL abonné et le port utilisé pour la réplication sont spécifiés avec la propriété Serveur. Le port utilisé pour la réplication doit correspondre à celui spécifié dans la fonction HRSInit sur le serveur abonné.
    • le mot de passe spécifié avec la propriété MotDePasse doit correspondre à celui spécifié dans la fonction HRSInit sur le serveur abonné.
    • une planification a été définie. Si cette planification n'avait pas été spécifiée, la réplication serait réalisée directement à chaque modification (mode streaming).
    • la résolution des conflits de modification est la suivante : le plus récent est prioritaire : il est donc nécessaire de synchroniser les horloges des serveurs avant de commencer la réplication.
Pour définir une réplication spare, il faut utiliser la propriété Spare à la place de la propriété Bidirectionnelle.

Cas d'une réplication bi-directionnelle

Lors d'une réplication bi-directionnelle :
  • La fonction HRSInit doit être utilisée sur les deux postes serveurs en précisant pour chacun qu'ils sont et maître et abonné.
    HRSInit(ConnexionHFMaitre, hrsAbonné + hrsMaître, 1, "MotDePasse", 4996, 5)

    HRSInit(ConnexionHFAbonné, hrsAbonné + hrsMaître, 2, "MotDePasse", 4996, 7)
  • Il est conseillé d'utiliser le même port de réplication. Ce port doit être ouvert dans les deux sens.
  • Le mot de passe utilisé pour la réplication et spécifié avec la fonction HRSInit doit être identique pour le poste serveur maître et pour le poste serveur abonné.
  • La fonction HRSAjouteConfig peut être utilisée sur n'importe quel serveur (maître ou abonné) pour définir la réplication bi-directionnelle.

Cas particuliers : Réplication en linéaire/en étoile/arborescente

La réplication de serveurs HFSQL se définit entre deux serveurs HFSQL.
Il est ensuite possible d'utiliser toutes les configurations possibles :
  • réplication linéaire : les serveurs sont reliés deux à deux. Exemple :
    • S1 (maître) et S2 (abonné) font une réplication monodirectionnelle,
    • S2 (maître) et S3 (abonné) font une réplication monodirectionnelle,
  • réplication en étoile : un serveur maître est relié à plusieurs serveurs abonnés (toujours 2 à 2). Exemple :
    • S1 (maître) et S2 (abonné) font une réplication bidirectionnelle,
    • S1 (maître) et S3 (abonné) font une réplication bidirectionnelle,
    • S1 (maître) et S4 (abonné) font une réplication bidirectionnelle.
  • réplication arborescente : un serveur maître est relié à plusieurs serveurs abonnés (toujours 2 à 2). Chaque serveur abonné est relié à d'autres serveurs abonnés. Exemple :
    • S1 (maître) et S2-1 (abonné) font une réplication monodirectionnelle,
    • S1 (maître) et S2-2 (abonné) font une réplication monodirectionnelle,
    • S2-1 (maître) et S2-1-1 (abonné) font une réplication monodirectionnelle.
    • S2-1 (maître) et S2-1-2 (abonné) font une réplication monodirectionnelle.
    • S2-2 (maître) et S2-2-1 (abonné) font une réplication monodirectionnelle.
    • S2-2 (maître) et S2-2-2 (abonné) font une réplication monodirectionnelle.

Cas particulier : Réplication de serveurs et basculement d'utilisateurs

La réplication de serveurs HFSQL se définit entre deux serveurs HFSQL. Il est possible d'envisager une réplication en streaming, avec un accès des utilisateurs sur un seul des serveurs HFSQL.
Dans certaines situations (mise à jour d'un serveur par exemple), les utilisateurs sont basculés du serveur HFSQL maître vers le serveur HSQL abonné.
Dans ce cas, il est nécessaire :
  • de fermer les accès au serveur HFSQL maître,
  • de s'assurer que les données à répliquer ont été envoyées au serveur abonné et traitées par celui-ci.
  • d'autoriser les accès au serveur abonné.
La fonction HRSAttendTraitementDonnées permet d'attendre que :
  • les données à répliquer sur le serveur maître soient envoyées sur le serveur abonné.
  • les données à répliquer reçues sur le serveur abonné soient entièrement appliquées.

Cas particulier : Renommer un serveur

Il peut être nécessaire de renommer un des serveurs de la réplication.
Attention : Cette manipulation doit être effectuée uniquement si seul le nom du serveur a été modifié (le serveur est resté à l'identique : la configuration, l'architecture des bases de données, les fichiers systèmes doivent être les mêmes). En particulier, la configuration de la réplication qui se trouve dans le fichier HFConf.ini ne doit pas avoir été modifiée. Exemple :
[REPLICATION]
PRIORITY=2
PASSWORD=XXXXX
PORT=9792
ROLE=3
SERVER_ID=2
Pour prendre en compte ce renommage dans la réplication, utilisez la fonction HRSRenommeNomServeur.
Version minimum requise
  • Version 18
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 03/07/2023

Signaler une erreur ou faire une suggestion | Aide en ligne locale