Clusters PostgreSQL 9.4.x sur Debian 8.x

(sujet mis à jour avec la version 9.6)

Initialiser un ou plusieurs clusters PostgreSQL sur un serveur Debian

Il y a cluster et cluster

      Dans cet article cluster désigne donc simplement un ensemble de bases de données PostgreSQL partageant certaines caractéristiques : WAL (write ahead log, fichiers de journalisation), port d’écoute et paramètres fixés au niveau cluster notamment. Debian propose une série de scripts permettant de faciliter la gestion d’un cluster PostgreSQL voire permettant de déployer plusieurs clusters, éventuellement de versions différentes, sur un même serveur.
      Avec la généralisation des solutions de virtualisation matérielle type Xen ou applicative type Docker cette caractéristique perd un peu de son intérêt. Il n’est pas nécessairement intéressant de déployer plusieurs clusters en production avec cette méthode car chaque cluster pensera être "seul" et pourra s’accaparer toutes les ressources du serveur. Cependant, pour des utilisations hors production (développement, recette, formation etc.), cela peut être une solution simple et intéressante.
      La création et le paramétrage du cluster sont de la responsabilité du DBA en fonction de la charge, de la nature des données etc. Il sera nécessaire de paramétrer l’archivage des WAL en continu sur un environnement transactionnel alors que cela peut être inutile sur un environnement purement décisionnel par exemple.

Cluster par défaut

      Si vous avez réalisé l’atelier Installer PostgreSQL 9.4.x sur Debian 8.x "Jessie" vous aurez constaté que dès l’installation du logiciel PostgreSQL un premier cluster appelé "main" est créé avec des options par défaut :

postgres@sv-t-vtl-bas04:~$ pg_lsclusters Ver Cluster Port Status Owner Data directory Log file 9.4 main 5432 online postgres /var/lib/postgresql/9.4/main /var/log/postgresql/postgresql-9.4-main.log

      Si vous aviez précédemment configuré la locale par défaut vous avez un cluster parfaitement utilisable. Quelles pourraient être les raisons de vouloir faire autre chose ?

Créer un cluster

      Je vous propose de détruire le cluster PostgreSQL par défaut puis de créer un cluster PostgreSQL "apptra001" avec le checksum des pages activé et l’organisation de fichiers suivante :

      Quel est l’intérêt de cette organisation ? Si vous avez les filesystems correspondants alors une requête consommant beaucoup d’espace temporaire ne pourra pas saturer l’espace commun des données. Une corruption de filesystem n’entraînera pas la perte de la sauvegarde logique etc. Il est à noter que les fichiers de sauvegarde physique et de journalisation (WAL) archivé seront directement transférés vers un serveur tiers sur lequel sera déployé la solution Barman.

      Les filesystems permettant de tirer parti de cette organisation :
  • /
  • /var/log
  • /var/lib/postgresql/NUM_VERSION/NOM_CLUSTER et optionnellement /var/lib/postgresql/NUM_VERSION/NOM_CLUSTER/pg_xlog
  • /var/tmp/NUM_VERSION/NOM_CLUSTER
  • /var/dump/NUM_VERSION/NOM_CLUSTER
      Dans le cas d’un serveur physique attaché à une baie de disques les logical volumes sur lesquels sont créés / et /var/log peuvent appartenir à un volume group reposant sur des physical volumes correspondant aux disques locaux du serveur. Les logical volumes sur lesquels sont créés /var/lib/postgresql/NUM_VERSION/NOM_CLUSTER et /var/dump/NUM_VERSION/NOM_CLUSTER peuvent appartenir à des volume groups composés de physical volumes reposant sur des raidgroups de la baie de disques associant performance et redondance (exemple : RAID 0+1). Enfin, le logical volume sur lequel est créé /var/tmp/NUM_VERSION/NOM_CLUSTER peut optionnellement appartenir à un volume group composé de physical volumes reposant sur des raidgroups performants mais non protégés au niveau redondance matérielle (RAID0) mais dédiez bien cet espace UNIQUEMENT pour des données temporaires. Avec les baies modernes il est cependant assez fréquent de ne pas faire toutes ces distinctions et de laisser la baie gérer au mieux.

En pratique :

# Destruction du cluster par défaut pg_dropcluster 9.4 main --stop # Création des dossiers pour le nouveau cluster mkdir -p /var/lib/postgresql/9.4/apptra001 /var/tmp/9.4/apptra001 /var/dump/9.4/apptra001 chown postgres:postgres /var/lib/postgresql/9.4/apptra001 /var/tmp/9.4/apptra001 /var/dump/9.4/apptra001 chmod 700 /var/lib/postgresql/9.4/apptra001 /var/tmp/9.4/apptra001 /var/dump/9.4/apptra001 # Création du cluster apptra001 pg_createcluster -p 5432 --start-conf auto 9.4 apptra001 -- --data-checksums # Démarrage du cluster apptra001 pg_ctlcluster 9.4 apptra001 start # Visualisation de l’état du nouveau cluster postgres@srvdeb01:~$ pg_lsclusters Ver Cluster Port Status Owner Data directory Log file 9.4 apptra001 5432 online postgres /var/lib/postgresql/9.4/apptra001 /var/log/postgresql/postgresql-9.4-apptra001.log

Atelier au format .txt : créer un cluster PostgreSQL 9.4.x sur Debian 8.x "Jessie" (il faut que l’atelier installer PostgreSQL 9.4.x sur Debian 8.x "Jessie" ait été préalablement complété)

Mise à jour : 31/01/2016