Algeria e Banking Services
Document d'installation Architecture HA Sela
Dossier technique
Référence SELA SGA
Version 1.0
Date de révision
Projet SELA AeBS - SGA
Client SGA
Classification Publication restreinte
Statut Draft
Nom du document
Algeria e Banking Services
Copyright
© AEBS. Tous droits réservés.
Tous les noms ou les marques de produits ou de la société mentionnés dans ce document sont la
propriété de leurs propriétaires respectifs. Aucune partie de ce document ne peut être reproduite
sans la permission d’AEBS.
Confidentialité
Le destinataire de ce document s'engage à ne pas divulguer d'information d'ordre confidentiel. Il
n'utilisera pas le contenu sans la permission d’AEBS. De plus, le destinataire s'engage à ne pas mettre
ce document à la disposition de tiers sans notification écrite d’AEBS.
Si vous n'êtes pas le destinataire de ce document, prière d'en informer AEBS par email à l'adresse
[email protected], ou par téléphone au +213 (0) 23 35 39 20/21/22.
Marques
Toutes les marques utilisées dans ce document sont la propriété de leurs légitimes propriétaires.
Identification du document
Produit ou affaire SELA AEBS SGA
Client SGA
Type Descriptif technique
Référence SELA AEBS SGA v1.0
Classification Publication restreinte
Statut Draft
Nom
Algeria e Banking Services
Historique des versions
Version Date Auteur Commentaire
1.0 13/09/2021
Diffusion
Pour action Pour information
AEBS
SGA
Algeria e Banking Services
Sommaire :
1 Présentation architecture mise en place ........................................................................................ 5
2 Installation des instances base de données (choix du SGBD POSTGRESQL 13) .............................. 5
2.1 Installation de PostgreSQL 13.................................................................................................. 5
2.2 Installation de Patroni ............................................................................................................. 6
2.3 Configuration Patroni 1 ........................................................................................................... 6
2.4 Configuration Patroni 2 ........................................................................................................... 8
2.5 Démarrage et affichage Patroni Base de données .................................................................. 9
3 Installation des instances ETCD 3.5: .............................................................................................. 11
3.1 Installation de ETCD .............................................................................................................. 11
3.2 Configuration ETCD ............................................................................................................... 12
3.2.1 Fichier de configuration ETCD-1 .................................................................................... 12
3.2.2 Fichier de configuration ETCD-2 .................................................................................... 12
3.2.3 Fichier de configuration ETCD-3 .................................................................................... 12
4 Installation de la couche application « Java, Haproxy »................................................................ 12
4.1 Configuration Haproxy .......................................................................................................... 13
4.2 Visualisation stats Bases de données à travers HaProxy....................................................... 13
5 Commandes d’administration Patroni .......................................................................................... 14
6 Définition des différents paramètres de configuration ................................................................ 14
6.1 ETCD ...................................................................................................................................... 14
6.2 PATRONI ................................................................................................................................ 15
Algeria e Banking Services
1 Présentation architecture mise en place
L’architecture (Base de données, application) qui a été mise en place est représentée
sur la figure suivante :
2 Installation des instances base de données (choix du SGBD
POSTGRESQL 13)
2.1 Installation de PostgreSQL 13
Télécharger à partir du site « https://yum.postgresql.org/13/redhat/rhel-7-
x86_64/repoview/postgresqldbserver13.group.html » les quatre paquages suivants :
• Postgresql13
• Postgresql13-contrib
• Postgresql13-libs
• Postgresql13-server
# yum install postgresql13* -y
# /usr/pgsql-10/bin/postgresql-10-setup initdb
# systemctl disable postgresql-10
Mise en place d’un lien symbolique pour l’utilisation des binaires de PostgreSQL par le service
Patroni :
# ln -s /usr/pgsql-10/bin/* /usr/sbin/
Algeria e Banking Services
2.2 Installation de Patroni
L’installation de l’outil PATRONI se fait sur le même serveur que la base de données
et se fait à partir du repo de Postgresql 13 :
# yum install -y
https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-
x86_64/pgdg-redhat-repo-latest.noarch.rpm
# yum install epel-release gcc -y
# yum install python python-devel python-pip -y
# yum install patroni patroni-etcd
# cd /etc/
# mkdir -p patroni
Changer les autorisation et propriétaires des répertoires et fichiers :
# chown -R postgres.postgres /chemin-repertoire/patroni
# chmod 700 /chemin-repertoire/patroni
# chown postgres.Postgres /chemin-certificat/certificats*
# chmod 600 /chemin-certificat/*.key
Il est nécessaire de rajouter les dépendances de l’ETCD lors de l’installation de
PATRONI. Les étapes ci-dessus se font sur les deux serveurs destinés à être des serveurs de
base de données.
2.3 Configuration Patroni 1
Ci-après le contenu du fichier « patroni.yml » ainsi que « customconf.conf »
Figure : Patroni.yml
Algeria e Banking Services
Figure : Customconf.conf
Algeria e Banking Services
2.4 Configuration Patroni 2
Ci-après le contenu du fichier « patroni.yml » ainsi que « customconf.conf »
Figure : Patroni.yml
Algeria e Banking Services
Figure : Customconf.conf
2.5 Démarrage et affichage Patroni Base de données
Après démarrage du service Patroni avec la commande :
# systemctl start patroni
On aura l’affichage suivant sur la base de données primaire :
Algeria e Banking Services
Et on aura l’affichage suivant sur le serveur de base de données secondaire :
Après le démarrage des deux serveurs PATRONI, il est possible de vérifier l’état de
chacun avec la commande « systemctl status patroni » et pour voir le serveur ayant le rôle
de serveur primaire et ceux ayant le rôle de serveur secondaire on utilise la commande :
# patronictl -c /etc/patroni/patroni.yml -d etcd://@Ip-ETCD:2379 list nom-cluster
On obtient alors un affichage comme le suivant :
Algeria e Banking Services
3 Installation des instances ETCD 3.5:
3.1 Installation de ETCD
L’installation de l’ETCD version « 3.5 » se fait sur un serveur différent que celui de la
base de données et PATRONI :
# DOWNLOAD_URL=https://storage.googleapis.com/etcd
# rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
# rm -rf /tmp/etcd-download-test
# mkdir -p /tmp/etcd-download-test
# curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-
${ETCD_VER}-linux-amd64.tar.gz
# tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-
components=1
# rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
# chmod +x /tmp/etcd-download-test/etcd
# chmod +x /tmp/etcd-download-test/etcdctl
Vérifier la version de ETCD comme suit :
# /tmp/etcd-download-test/etcd --version
# /tmp/etcd-download-test/etcdctl version
Renommer le fichier de configuration par défaut et travailler sur un fichier de configuration
vide au départ :
# mv /etc/etcd/etcd.conf /etc/etcd/etcd.conf.old
# cp /etc/etcd/etcd.conf.old /etc/etcd/etcd.conf
# > /etc/etcd/etcd.conf
Changer les autorisation et propriétaires des répertoires et fichiers :
# chown -R etcd.etcd /chemin-repertoire/etcd
# chown etcd. etcd /chemin-certificat/certificats*
# chmod 600 /chemin-certificat/*.key
Les actions effectuées ci-dessus ont été exécutées sur les trois serveurs « ETCD-1 ETCD-2
ETCD-3 » ce qui formera notre cluster ETCD.
Algeria e Banking Services
3.2 Configuration ETCD
3.2.1 Fichier de configuration ETCD-1
3.2.2 Fichier de configuration ETCD-2
3.2.3 Fichier de configuration ETCD-3
Une fois la configuration effectuée on démarre ETCD avec :
# systemctl start etcd
4 Installation de la couche application « Java, Haproxy »
L’installation de HaProxy se fait sur deux serveurs différents des serveurs base de
données et ETCD.
On commence par installer « java 11 » pour le fonctionnement applicatif
# yum install java-11-openjdk-devel
Algeria e Banking Services
Par la suite on lance l’installation de HaProxy :
# yum install epel-release
# yum install haproxy -y
Renommer le fichier de configuration par défaut et travailler sur un fichier de configuration
vide au départ :
# mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.old
# cp /etc/haproxy/haproxy.cfg.old /etc/haproxy/haproxy.cfg
# > /etc/haproxy/haproxy.cfg
4.1 Configuration Haproxy
Le même fichier de configuration pour les deux instances HaProxy :
Vérifier si la configuration ne contient pas d’erreurs :
# /usr/sbin/haproxy -c -V -f /etc/haproxy/haproxy.cfg
Démarrage de Haproxy :
# systemctl start haproxy
4.2 Visualisation stats Bases de données à travers HaProxy
Saisie de l’adresse IP du HaProxy avec le port 7000 sur un navigateur nous aurons
toutes les informations de notre cluster base de données comme affiché sur l’image
suivante :
Algeria e Banking Services
5 Commandes d’administration Patroni
Suppression d’un cluster :
# patronictl -c chemin_fichier_yaml remove Nom_cluster
Lister tous les nœuds et leurs états d’un cluster :
# patronictl -c chemin_fichier_yaml -d etcd://@IP_ETCD:2379 list Nom_cluster
Où
# patronictl -c chemin_fichier_yaml list Nom_Cluster
Faire un Failover manuellement :
patronictl -c chemin_yaml -d etcd://@IP_ETCD:2379 failover Nom_cluster
Réinitialiser un nœud d’un cluster :
# patronictl -c chemin_fichier_yaml reinit Nom_cluster Nom_Noeud
Réinitialiser un cluster :
# patronictl -c chemin_fichier_yaml reinit Nom_cluster
6 Définition des différents paramètres de configuration
6.1 ETCD
ETCD_LISTEN_PEER_URLS : L’adresse et le port sur lesquels ETCD reçoit les notifications.
ETCD_LISTEN_CLIENT_URLS : Cet indicateur permet à l'ETCD d'accepter les demandes
entrantes des clients sur l'adresse et le port saisies.
ETCD_INITIAL_ADVERTISE_PEER_URLS : Adresse @IP qui permet de communiquer des
données ETCD aux membres du cluster.
Algeria e Banking Services
ETCD_INITIAL_CLUSTER : Configuration initiale du cluster.
ETCD_ADVERTISE_CLIENT_URLS : @IP qui permet de récupérer des informations du cluster
ETCD_INITIAL_CLUSTER_TOKEN="cluster1"
ETCD_INITIAL_CLUSTER_STATE="new"
6.2 PATRONI
RestAPI :
Il est nécessaire de saisir l'adresse et le port pour accéder au RestApi de PATRONI, ce
dernier va nous permettre de travailler avec une configuration dynamique (get/config,
patch/config, put/config)
Connect_address :
Ce paramètre (ip et port) va permettre d'accéder au RestAPI, adresse IP + port par
lequel RestAPI est accessible.
Listen :
Port et @IP qui permettront de fournir les informations au serveur HaProxy
ETCD :
Host :
Informations sur le nœud ETCD (@ip:port)
Bootstrap :
Dcs :
Dans cette section nous aurons la configuration globale du cluster, toute modification
qui se fera au niveau du dcs s'appliquera sur tous les nœuds.
Ttl :
Pour quérir le verrou de leader. Le temps écoulé avant le lancement du processus de
basculement « valeur par défaut 30ms ». Considérer comme la durée écoulée avant le
lancement du processus de basculement automatique. Best practices :
Ttl >= loop_wait + retry_timeout * 2
Loop_wait :
Le nombre de secondes pendant lequel la boucle sarrète (test if master actif).
« Valeur par défaut 10ms ».
Algeria e Banking Services
Retry_timeout :
Délai d'attente pour les nouvelles tentatives d'opération de DCS et PostgreSQL. Les
problèmes DCS ou de réseaux plus courts que cela ne forcera pas PATRONI à rétrograder le
leader. « Valeur par défaut 10ms ».
Maximum_lag_on_failover :
Nombre maximal d'octets perdus pouvant avoir un candidat pour être leader
(participer à l'élection).
Master_start_timeout :
Le temps pendant lequel le Master est autorisé à récupérer des défaillances avant
que le basculement ne soit effectué. Quand cette valeur est égale à 0 le basculement se fait
directement quand le master est en arrêt si possible. Pour minimiser le risque de perte
d’information quand nous utilisons une réplication asynchrone il est important de ne pas
mettre cette valeur à 0. Le temps que prendra le basculement sera :
<= loop_wait + master_start_timeout + loop_wait.
Use_pg_rewind :
L’activation de ce paramètre va permettre de synchroniser un nœud POSTGRES avec
un autre nœud POSTGRES appartenant au même cluster. Ceci nous donne la possibilité dans
un scénario typique de remettre un ancien serveur maitre en ligne après le basculement
autant que serveur de secours suivant un autre serveur maitre.
Data-checksums :
Activer ce paramètre seulement si pg_rewind est activé, il permet de détecter un
échec et provoque une erreur et interrompre la transaction en cours (control des E/S au
niveau du serveur de base de données).
Pg_hba :
Ici nous ajoutons toutes les @IP, users et base de données que le serveur de base de
données permettra d'accéder.
PostgreSQL :
Listen :
@IP et port du serveur de base de données.
Connect_address :
@IP et port par lequel POSTGRES est accessible à partir d'autres instances.
Data_dir :
Algeria e Banking Services
Saisir le chemin du répertoire contenant les bases et fichiers de configuration du
serveur de base données.
Pgpass :
Chemin d'accès aux fichiers de mot de passe.
Authentification :
Création des utilisateur POSTGRES (super user) et REPLICATOR (pour la réplication)
Unix_socket_directories :
Le répertoire ou sont enregistrés les deux fichiers «. s.PGSQL.5432 » et
« .s.PGSQL.5432.lock »
Callbacks :
Ce paramètre nous permet de faire des actions ou d’exécuter des scripts au moment
rechargement, arrêt ou redémarrage du service patroni.
Tags :
Nofailover :
Dans le passé, si l'API REST était protégée par des certificats auto-signés, patronictl
ne parvenait pas à les vérifier. Il n'y avait aucun moyen de désactiver cette vérification. Il est
maintenant possible de configurer patronictl pour ignorer la vérification du certificat ou tout
à fait fournir des certificats.
Noloadbalance :
Cette balise fait que PATRONI retourne toujours que la réplication n'est pas
disponible pour le load balancing.
Clonefrom :
Transforme clone à partir d’une balise booléenne : si elle est définie sur True, la
réplique devient candidate pour que d'autres répliques puissent la cloner. Lorsque plusieurs
candidats sont présents, les répliques en choisissent une au hasard.
Nosync :
Si nous voulons qu'un serveur en standby ne devient jamais un serveur synchrone
nous mettons cette valeur a True. Pour notre cas la valeur de nosync est à False.
a. HaProxy :
Inter :
L’intervalle entre deux états de santé consécutifs. Valeur par défaut 2s.
Rise :
Algeria e Banking Services
Nombre consécutif entre les états de santé valide avant de considérer que le serveur
est UP. Valeur par défaut est 2.
Fall :
Nombre consécutif entre les états de santé invalide avant de considérer que le
serveur est DOWN. Valeur par défaut est 3.
Timeout check :
Temps permit pour le serveur de lancer un check. Si les deux paramètres "timeout
check" et "inter" sont activés alors la plus petite valeur entre les deux est utilisée après que
la connexion TCP soit établie.
Option httpchk :
Méthode HTTP pour générer la requête http.
Http-check disable-on-404 :
Renvoi le serveur vers un statu Maintenance quand ce dernier répond au check de
l'état de santé avec 404.
Http-check expect :
Modifie le comportement de validation de la réponse en configurant une règle de
correspondance --> statu : statu code.
Balance :
Saisir la méthode de répartition des charges.