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-requis

    Se référer aux pré-requis Link: ../pre-requis/ généraux, avec les différences suivantes:

    2 machines hôtes identiques (ici nommées web1 et web2) qui feront tourner les logiciels «briques»
  • un service HAProxy en amont
  • disposant des ressources suivantes:
    • CPU 8 cœurs
    • 32Go de mémoire vive
    • 100Go d’espace disque
    • Debian 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.).
  • disposant de 200Go d’espace (cluster géré par le client)

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

Alternativement vous pouvez utiliser  :

#!/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/xxx des composants Publik, copiés vers /srv/nfs/publik/etc/xxx,
  • les données /var/lib/xxx de ces mêmes composants, copiés vers /srv/nfs/publik/var/lib/xxx,
  • la configuration nginx ; copiés vers /srv/nfs/publik/etc/nginx/xxx et /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:

  1. Service wcs

    service 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 start 
  2. Service combo

    service 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 start 
  3. Même procédure avec fargo

  4. Même procédure avec passerelle

  5. Même procédure avec hobo

  6. Même procédure avec authentic2-multitenant

  7. Configuration hobo-agent

    service 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 :

  1. Configurations nginx

    service 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 
  2. Éléments web statiques

    cd /var/www mv html /srv/nfs/publik/var/www/ ln -sf /srv/nfs/publik/var/www/html . 
  3. APT : dépôts et préférences backports

    mkdir /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 :

  1. Service wcs

    ln -sf /srv/nfs/publik/etc/wcs /etc/wcs ln -sf /srv/nfs/publik/var/lib/wcs /var/lib/wcs 
  2. Service combo

    ln -sf /srv/nfs/publik/etc/combo /etc/combo ln -sf /srv/nfs/publik/var/lib/combo /var/lib/combo 
  3. Même procédure avec fargo

  4. Même procédure avec passerelle

  5. Même procédure avec hobo

  6. Même procédure avec authentic2-multitenant

  7. Configuration hobo-agent

    ln -sf /srv/nfs/publik/etc/hobo-agent /etc/hobo-agent 

Préparer la configuration des autres composants:

  1. Configurations nginx

    service nginx stop cd /etc/nginx rm -rf conf.d includes sites-available sites-enabled ln -sf /srv/nfs/publik/etc/nginx/* . service nginx start 
  2. Éléments web statiques

    cd /var/www rm -rf html ln -sf /srv/nfs/publik/var/www/html . 
  3. APT : dépôts et préférences backports

    cd /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
  
(on utilise ceux partagés par NFS) : apt install wcs wcs-au-quotidien apt install combo apt install fargo apt install passerelle apt install hobo apt install authentic2-multitenant apt install combo apt install passerelle apt install lingo 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.