Haute disponiblité
Haute disponiblité¶ Link: #haute-disponiblite
Ce chapitre présente des moyens permettant d’ajouter de la redondance en vue de garantir une meilleure la disponibilité d’une installation de Publik. La charge du travail des logiciels de Publk est des opérations est dès lors répartie sur plusieurs machines. Le machines; et le service est maintenu en cas de panne
- de l'une d'entre elles.
Pré-requis
On décrit ici une installation avec deux frontaux, on aura donc besoin de :
deux «frontaux»,d’un des composants.Pré-requis¶ Link: #pre-requisSe référer aux pré-requis Link: ../pre-requis/ généraux, avec les différences suivantes:2machines hôtes identiques (ici nommées web1 et web2) qui feront tourner les logiciels «briques» - un service HAProxy en amont
CPU 8 cœurs32Go de mémoire vive100Go d’espace disqueDebian 12 (« bookworm ») installé en architecture amd64 (installation minimale)un service frontal HAProxy (géré par le client)- un service de base de données PostgreSQL
disposant de 200Go d’espace (cluster géré par le client) - un service de partage de fichiers NFS
- un système de gestion de configuration pour les frontaux (puppet, ansible, cfengine, chef, etc.).
Installation des composants («briques») ¶ Link: #installation-des-composants
Création des utilisateurs avec UID identiques sur tous les frontaux web1 et web2¶ Link: #creation-des-utilisateurs-avec-uid-identiques-sur-web1-et-web2
Lors de partage de fichiers sur un réseau (NFS par exemple), il faut que les UID des utilisateurs Unix concernés par Publik soient les mêmes sur les deux machines web1 et web2. Cela peut se faire avec un script tel que
Nous fournissons un script pour faire cela :
publik-create-users
#!/bin/sh
uid=2102
for user in hobo hobo-agent authentic-multitenant wcs passerelle combo fargo chrono lingo bijoe welco
bijoe
do
echo "create group $user ($uid)"
addgroup --system --gid $uid $user
echo "create user $user ($uid)"
adduser --disabled-password --system --uid $uid --gecos "$user daemon" --ingroup $user --no-create-home --home /var/lib/$user $user
uid=$(($uid+1))
done
Mais il est fortement recommandé que cela soit géré par un système de gestion de configuration (ansible, puppet, etc.).
Partage NFS des données /var/lib/composant
Les répertoires /var/lib/composant sont des montages NFS, donc partagés entre les frontaux. Ils appartiennent, chacun, à l'utilisateur Unix dédié.
Le système NFS doit être capable de gérer les locks (attention notamment au réglage d'un éventuel pare-feu entre le serveur et les clients NFS).
Configuration des accès PostgreSQL
Résultat dans /etc/passwd:
hobo:x:2102:2102:hobo daemon,,,:/var/lib/hobo:/bin/false authentic-multitenant:x:2103:2103:authentic2-multitenant daemon,,,:/var/lib/authentic2-multitenant:/bin/false wcs:x:2104:2104:wcs daemon,,,:/var/lib/wcs:/bin/false passerelle:x:2105:2105:passerelle daemon,,,:/var/lib/passerelle:/bin/false combo:x:2106:2106:combo daemon,,,:/var/lib/combo:/bin/false fargo:x:2107:2107:fargo daemon,,,:/var/lib/fargo:/bin/false chrono:x:2109:2109:chrono daemon,,,:/var/lib/chrono:/bin/false bijoe:x:2110:2110:bijoe daemon,,,:/var/lib/bijoe:/bin/false Vue générale¶ Link: #vue-generale
Avant l’installation des modules, il faut pour chacun d’eux (sauf w.c.s.) configurer l’accès a sa base au PostgreSQL; par exemple, dans
/etc/combo/settings.d/database.py:# /etc/combo/settings.d/database.py
/etc/combo/settings.d/macollectivite.py: DATABASES['default']['NAME'] = 'combo' DATABASES['default']['USER'] = 'combo' DATABASES['default']['PASSWORD'] = 'mot-de-passe-base-combo' 'indiquer-ici-le-mot-de-passe-pour-combo' DATABASES['default']['HOST'] = 'serveur-sql-primaire' 'sql-prod' DATABASES['default']['PORT'] = '5432' Mettre en place la même configuration pour tous les services.
Désactivation des crons sur tous les frontaux sauf un
Le système de crons de Publik ne sait pas fonctionner en parallélisation : il ne doit être laissé actif que sur un seul frontal.
Il faut donc désactiver les crons sur tous les autres frontaux pour tous les composants, à travers des fichiers /etc/composant/settings.d/disable_cron_jobs.py :
# /etc/combo/settings.d/disable_cron_jobs.py DISABLE_CRON_JOBS = True
Installation des composants
Gestion de la configuration sur plusieurs serveurs¶ Link: #vue-generale
Il existe deux options pour gérer une configuration identique sur plusieurs serveurs : un outil de gestion de configuration du type puppet (ou ansible ou rudder ou chef ou...) ou un répertoire nfs partagé.
L'usage d'un outil de gestion de configuration étant en dehors du périmètre de ce guide (mais recommandé et utilisé sur notre Saas), nous vous présentons la méthode via partage NFS.
Suivre ensuite les instructions pour une installation mono-machine. Ensuite, déplacer les éléments de configuration vers le partage de fichiers :
les répertoires de configuration/etc/xxxdes composants Publik, copiés vers/srv/nfs/publik/etc/xxx,les données/var/lib/xxxde ces mêmes composants, copiés vers/srv/nfs/publik/var/lib/xxx,la configuration nginx ; copiés vers/srv/nfs/publik/etc/nginx/xxxet/srv/nfs/publik/var/www/html.
Sur web1 et web2, nous pointons les fichiers partagés à l’aide de liens symboliques :
Configuration :/etc/xxx→/srv/nfs/publik/etc/xxx,Données :/var/lib/xxx→/srv/nfs/publik/var/lib/xxx,Configuration nginx.
Détail des opérations¶ Link: #detail-des-operations
Création des répertoires partagés :
Configuration:/srv/nfs/publik/etc,Données des tenants:/srv/nfs/publik/var/lib/Données statiques:/srv/nfs/publik/var/www/
Déplacement des configurations et données des services Publik:
Service wcsservice wcs stop mv /etc/wcs /srv/nfs/publik/etc/ ln -sf /srv/nfs/publik/etc/wcs /etc/wcs mv /var/lib/wcs /srv/nfs/publik/var/lib/ ln -sf /srv/nfs/publik/var/lib/wcs /var/lib/wcs service wcs startService comboservice combo stop mv /etc/combo /srv/nfs/publik/etc/ ln -sf /srv/nfs/publik/etc/combo /etc/combo mv /var/lib/combo /srv/nfs/publik/var/lib/ ln -sf /srv/nfs/publik/var/lib/combo /var/lib/combo service combo startMême procédure avec fargoMême procédure avec passerelleMême procédure avec hoboMême procédure avec authentic2-multitenantConfiguration hobo-agentservice supervisor stop mv /etc/hobo-agent /srv/nfs/publik/etc/ ln -sf /srv/nfs/publik/etc/hobo-agent /etc service supervisor start
Autres partages via NFS :
Configurations nginxservice nginx stop mkdir /srv/nfs/publik/etc/nginx cd /etc/nginx mv conf.d includes sites-available sites-enabled /srv/nfs/publik/etc/nginx/ ln -sf /srv/nfs/publik/etc/nginx/* . service nginx startÉléments web statiquescd /var/www mv html /srv/nfs/publik/var/www/ ln -sf /srv/nfs/publik/var/www/html .APT : dépôts et préférences backportsmkdir /srv/nfs/publik/etc/apt cd /etc/apt mv sources.list.d preferences.d /srv/nfs/publik/etc/apt/ ln -sf /srv/nfs/publik/etc/apt/* .
Opérations sur web2¶ Link: #operations-sur-web2
Attention: l’UID et le GUID de l’utilisateur www-data doit être identique.
Préparer les répertoires de configuration et de données des composants Publik avant leur installation :
Service wcsln -sf /srv/nfs/publik/etc/wcs /etc/wcs ln -sf /srv/nfs/publik/var/lib/wcs /var/lib/wcsService comboln -sf /srv/nfs/publik/etc/combo /etc/combo ln -sf /srv/nfs/publik/var/lib/combo /var/lib/comboMême procédure avec fargoMême procédure avec passerelleMême procédure avec hoboMême procédure avec authentic2-multitenantConfiguration hobo-agentln -sf /srv/nfs/publik/etc/hobo-agent /etc/hobo-agent
Préparer la configuration des autres composants:
Configurations nginxservice nginx stop cd /etc/nginx rm -rf conf.d includes sites-available sites-enabled ln -sf /srv/nfs/publik/etc/nginx/* . service nginx startÉléments web statiquescd /var/www rm -rf html ln -sf /srv/nfs/publik/var/www/html .APT : dépôts et préférences backportscd /etc/apt rm -rf sources.list.d preferences.d ln -sf /srv/nfs/publik/etc/apt/* .
Lancer l’installation des composants packagés. Attention, lors de cette étape, toujours refuser les éventuelles demandes de modification des fichiers de configuration
:apt install publik-base-theme
apt install hobo hobo-agent
Nous comparons la liste des paquets installés entre web1 et web2 (obtenue avec dpkg -l), et installons les paquets suivants :
python-combo-plugin-macollectivite,publik-base-theme,gettext
Désactivation des crons Publik sur web2¶ Link: #desactivation-des-crons-publik-sur-web2
Il est très important de désactiver les crons de Publik sur web2, pour ne pas avoir de compétition/conflit avec ceux déjà en place sur web1, puisqu’ils agissent sur les mêmes données.
Il faut donc poser des # devant les lignes des crons suivants :
/etc/cron.d/wcs,/etc/cron.d/authentic2-multitenant,/etc/cron.d/passerelle,/etc/cron.hourly/python-combo,/etc/cron.hourly/fargo.
Une autre option est de mettre un "DISABLE_CRON_JOBS=TRUE" dans les fichiers /etc/xxx/settings.d/ de chaque composant sur web2 mais ce n'est pas possible avec un répertoire de configuration partagé entre plusieurs serveurs.
Paramétrage du partage de fichiers
Pour s'assurer que le démarrer les services ne se fait qu'après ¶ Link: #parametrage-du-partage-de-fichiers Démarrer les services uniquement après le montage de NFS, on ajoutera un paramètre /srv/nfsAjouter pour les services liés à Publik un supplément RequiresMountsFor= à la description du service. service Exemple pour Combo :
# cat /etc/systemd/system/combo.service.d/wait-for-mnt-data.conf [Unit] RequiresMountsFor=/ var/lib/combo srv/nfs Faire de même avec les services qui ont besoin de /srv/nfs: Combo, Fargo, Passerelle, authentic2-multitenant, hobo, hobo-agent, wcs.