PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

  • 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
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget iOSApple WatchCatalystUniversal Windows 10 AppWindows Mobile
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 :
Remarque : A partir de la version 19, HFSQL est le nouveau nom de HyperFileSQL.
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.
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électionnez les 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 :
      cnxConnexionHFMaitre est une Connexion
      cnxConnexionHFMaitre..Provider = hAccèsHFClientServeur
      cnxConnexionHFMaitre..Serveur = "NomServeurMaître:4900"
      cnxConnexionHFMaitre..Utilisateur = "Admin"
      cnxConnexionHFMaitre..MotDePasse = ""
      HOuvreConnexion(cnxConnexionHFMaitre)

      HRSInit(cnxConnexionHFMaitre, hrsMaître, 1, "MotDePasseMaître", 4996, 5)
    • Initialisation d'un poste Abonné :
      cnxConnexionHFAbonné est une Connexion
      cnxConnexionHFAbonné..Provider = hAccèsHFClientServeur
      cnxConnexionHFAbonné..Serveur = "NomServeurAbonné:4900"
      cnxConnexionHFAbonné..Utilisateur = "Admin"
      cnxConnexionHFAbonné..MotDePasse = ""
      HOuvreConnexion(cnxConnexionHFAbonné)

      HRSInit(cnxConnexionHFAbonné, 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(cnxConnexionHFMaitre, 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.
Versions 25 et supérieures
Pour définir une réplication spare, il faut utiliser la propriété ..Spare à la place de la propriété ..Bidirectionnelle.
Nouveauté 25
Pour définir une réplication spare, il faut utiliser la propriété ..Spare à la place de la propriété ..Bidirectionnelle.
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(cnxConnexionHFMaitre, hrsAbonné + hrsMaître, 1, "MotDePasse", 4996, 5)

    HRSInit(cnxConnexionHFAbonné, 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é.
Versions 23 et supérieures
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.
Nouveauté 23
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.
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.
Version minimum requise
  • Version 18
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire