Haute disponiblité

Ce chapitre présente des moyens permettant d’ajouter de la redondance en vue de garantir une meilleure disponibilité d’une installation de Publik. La charge du travail des logiciels de Publk est répartie sur plusieurs machines. 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», machines hôtes identiques (ici nommées web1 et web2) qui feront tourner les logiciels «briques»
  • un service HAProxy en amont
  • un service de base de données PostgreSQL
  • 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»)

Création des utilisateurs avec UID identiques sur tous les frontaux

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 :

#!/bin/sh

uid=2102

for user in hobo hobo-agent authentic-multitenant wcs passerelle combo fargo chrono lingo bijoe welco
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

Avant l’installation des modules, il faut pour chacun d’eux (sauf w.c.s.) configurer l’accès a sa base PostgreSQL; par exemple, dans /etc/combo/settings.d/database.py :

# /etc/combo/settings.d/database.py
DATABASES['default']['NAME'] = 'combo'
DATABASES['default']['USER'] = 'combo'
DATABASES['default']['PASSWORD'] = 'mot-de-passe-base-combo'
DATABASES['default']['HOST'] = 'serveur-sql-primaire'
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

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
apt install wcs wcs-au-quotidien
apt install authentic2-multitenant
apt install combo
apt install passerelle
apt install lingo

Paramétrage du partage de fichiers

Pour s'assurer que le démarrer les services ne se fait qu'après le montage de NFS, on ajoutera un paramètre RequiresMountsFor= à la description du service. Exemple pour Combo :

# /etc/systemd/system/combo.service.d/wait-for-mnt-data.conf
[Unit]
RequiresMountsFor=/var/lib/combo