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 chrono lingo
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.

Configuration des secrets Django

Lors de l'installation des services qui composent Publik, chaque installation crĂ©e un fichier /etc/<service>/secret avec la commande :

  cat /dev/urandom | tr -dc [:alnum:]-_\!\%\^:\; | head -c70 > /etc/<service>/secret

Ce fichier est un clĂ© secrète, utilisĂ©e dans le contexte de le signature cryptographique. La commande ci-dessus permet d'avoir une valeur unique et non prĂ©dictible. Voir plus d'information sur la documentation de Django.

Lorsque le service est rĂ©parti sur plusieurs serveurs, les fichiers /etc/<service>/secret doit ĂŞtre identiques sur tous les serveurs. Pour cela on peut diffuser ces fichiers par NFS ou de prĂ©fĂ©rence par un outil de gestion de configuration.

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