
Le packaging de PostgreSQL dans le système d’exploitation Debian
GNU/Linux est couramment utilisé par les administrateurs, grâce à ses
qualités intrinsèques, aux outils spécifiques l’enrichissant
(pg_lsclusters
, pg_ctlcluster
, …) tout comme au fait que les
distributions Debian GNU/Linux et Ubuntu l’utilisant sont elles-mêmes
très répandues.
Autre avantage, et non des moindres, dès l’installation des paquets terminés, une instance PostgreSQL fonctionne et est immédiatement utilisable. Dans les faits, quelques minutes suffisent pour utiliser PostgreSQL.
De plus, si les paquets sont disponibles directement dans les distributions citées, il est aussi possible d’utiliser le dépôt créé et maintenu par la communauté PostgreSQL pour choisir la version souhaitée : ce sont les mêmes paquets et la même équipe de mainteneurs. Même la version 11, en bêta au moment de l’écriture de ces lignes, est disponible ! Pour cela, se référer à la page suivante : https://wiki.postgresql.org/wiki/Apt
Dans cet article, nous allons nous intéresser aux possibilités offertes par ces paquets au moment de l’installation en ce qui concerne la création d’une instance PostgreSQL : comment personnaliser la création du cluster !
Paquets
Le packaging sous Debian sépare les différentes versions de PostgreSQL, les clients et la partie serveur, et aussi tout ce qui consiste à intégrer PostgreSQL dans le système d’exploitation.
On trouve donc d’une part les paquets postgresql-10
et
postgresql-client-10
pour la version 10 de PostgreSQL, et d’autre
part les paquets postgresql-common
et postgresql-client-common
pour l’intégration dans le système.
Le paquet postgresql-common
permet de contrôler la création d’une
instance PostgreSQL, c’est donc celui-ci que nous allons étudier dans
cet article.
Ce qui va nous permettre de contrôler finement la création d’un
cluster est le fichier de configuration
/etc/postgresql-common/createcluster.conf
qui décrit en fait le
comportement de la commande pg_createcluster
.
Cette commande va ensuite être utilisée à l’installation du paquet
postgresql-10
(et de toutes les autres versions).
Configuration de pg_createcluster
La première étape est d’installer les paquets « common » :
apt install postgresql-common postgresql-client-common
Le fichier /etc/postgresql-common/createcluster.conf
contient
différentes parties qu’il faut distinguer :
- Contrôle de l’instance : démarrage automatique ou non
- Chemin des données
- Initialisation des données
- Configuration de l’instance
Contrôle de l’instance
La directive create_main_cluster
autorise la création d’une instance
lors de l’installation d’une version particulière de PostgreSQL, par
exemple le paquet postgresql-10
.
Le simple fait de désactiver cette création permet d’appeler la
commande « manuellement » une fois le paquet postgresql-10
installé,
créant ainsi une instance personnalisée avec la commande
pg_createcluster
. Mais ça n’est pas cette option que nous allons
retenir dans cet article.
La seconde option, start_conf
, permet d’indiquer si on souhaite que
l’instance soit automatiquement lancée au démarrage du système, ce qui
est souvent le cas.
Cette valeur est reportée dans le fichier start.conf
de chaque
instance, et permet donc un contrôle par instance.
Chemin des données
Le choix du matériel de stockage étant toujours important quand on évoque des bases de données, il est fréquent de devoir préciser le point de montage correspondant, afin d’y stocker le répertoire des données de PostgreSQL.
Par défaut, le chemin utilisé est /var/lib/postgresql
, qui pourrait
être le point de montage du tableau RAID ou de l’attachement SAN. Mais
si le point de montage est, par exemple, /pgdata
pour les données,
et /pgwal
pour les journaux de transactions, alors, on modifie les
directives data_directory
et waldir
du fichier de configuration,
comme dans l’exemple suivant :
data_directory = '/pgdata/postgresql/%v/%c'
waldir = '/pgwal/postgresql/wal/%v/%c/pg_wal'
Ceci permet de stocker les données dans les bons systèmes de stockages dès la création de l’instance.
Initialisation des données
L’initialisation des données, c’est-à-dire la création de
l’arborescence des répertoires et des fichiers nécessaire à une
instance, est confiée à la commande initdb
. Les options passées
permettent de modifier cette initialisation, par exemple pour activer
les sommes de contrôle ou modifier la politique d’authentification par
défaut.
La directive initdb_options
permet de mettre en place les options
qui sont passées à la commande initdb
par le script
pg_createcluster
. L’exemple suivant met en place les options
préalablement citées :
initdb_options = '--data-checksums'
Configuration de l’instance
Enfin, la fin du fichier permet d’indiquer les directives de
configuration que l’on souhaite utiliser pour alimenter le fichier
postgresql.conf
de l’instance, qui est situé dans l’arborescence
/etc/postgresql/
, par exemple.
Quelques directives sont présentes par défaut, comme ssl
ou
cluster_name
auxquels on peut ajouter les exemples suivants :
listen_adresses = '*'
checkpoint_completion_target = 0.9
default_statistics_target = 250
archive_mode = on
archive_command = 'pgbackrest --stanza=%c archive-push %%p '
log_checkpoints = on
log_lock_waits = on
La directive archive_command
utilise ici l’outil pgbackrest
et le
nom de l’instance est utilisé comme nom de la stanza de PgBackRest.
Création de l’instance
Dernière étape, l’installation proprement dite va créer l’instance
apt install postgresql-10 postgresql-client-10
L’instance est alors crée, les données à l’emplacement choisi, et le fichier de configuration correctement ajusté :
$ pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
10 main 5432 online postgres /pgdata/postgresql/10/main /var/log/postgresql/postgresql-10-main.log
L’instance dispose alors de ses propres fichiers postgresql.conf
et
pg_hba.conf
, que l’on peut modifier à souhait, sans impact sur
createcluster.conf
.
Toutes les instances créées ultérieurement par la commande
pg_createcluster
tiendront compte de ce fichier de configuration.
Conclusion
Cette gestion des instances PostgreSQL basée sur le fichier de
configuration createcluster.conf
est tout à fait compatible avec les
outils d’industrialisation comme Ansible, et permet donc une
intégration propre et efficace de PostgreSQL, tout en permettant le
tuning habituel dans les fichiers propres à l’instance.