Installation de PostgreSQL

Magazine
Marque
Linux Pratique
Numéro
139
Mois de parution
septembre 2023
Spécialité(s)


Résumé

Nous commençons une série d’articles qui se veut être un guide du débutant pour l'installation, la maintenance et l'utilisation de PostgreSQL. Le but est de vous permettre de débuter rapidement sur de bonnes bases. Les articles couvriront l’installation et la configuration, mais aussi la mise en place de la sauvegarde, de la supervision, de la maintenance et de la réplication dans des cas simples. Ce premier article concerne donc l’installation.


Body

L’installation d’un serveur PostgreSQL n’offre pas vraiment de difficultés. Certains points particuliers sont à connaître, notamment sur les systèmes de fichiers, mais en fait, la difficulté principale est de les connaître, pas de les appliquer.

L'installation de PostgreSQL se décompose en six étapes :

  • préparation du système d’exploitation ;
  • installation du dépôt de la communauté ;
  • installation des paquets ;
  • configuration du service ;
  • initialisation du répertoire de données ;
  • activation et démarrage du service.

1. Préparation du système d’exploitation

Tous les exemples sont basés sur une VM installée avec Rocky Linux 9.2. Aucune option spéciale n'a été utilisée pour l'installation de la distribution. Une deuxième VM, identique à la première, sera utilisée pour le chapitre sur la réplication. D’autres VM pourront aussi être utilisés pour les articles sur la sauvegarde et sur la supervision.

La VM (sous QEMU) comprend :

  • 2 vCPU ;
  • 2 Go de RAM ;
  • un disque de 30 Go.

Ce dernier a été partitionné. Le système LVM est utilisé pour se faciliter la vie. Voici la liste des partitions d'après la commande lsblk :

NAME           MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sr0             11:0    1 1024M 0 rom
vda            252:0    0   30G 0 disk
├─vda1         252:1    0    1G 0 part /boot
└─vda2         252:2    0   29G 0 part
  ├─rl-root    253:0    0    5G 0 lvm /
  ├─rl-swap    253:1    0 1020M 0 lvm [SWAP]
  ├─rl-srv_wal 253:2    0    5G 0 lvm /srv/wal
  ├─rl-var     253:3    0    5G 0 lvm /var
  ├─rl-home    253:4    0    3G 0 lvm /home
  └─rl-srv     253:5    0   10G 0 lvm /srv

La partition /srv contient les fichiers de PostgreSQL. Le sous-répertoire /srv/data contient le répertoire principal des données. La variable d'environnement PGDATA devra pointer vers ce répertoire. La partition /srv/wal contient uniquement les journaux de transactions de PostgreSQL. Il est généralement conseillé de séparer fichiers de données et journaux de transactions dans des partitions différentes, nous le faisons donc ici. Il est aussi généralement conseillé de déplacer les journaux applicatifs de PostgreSQL dans une partition séparée. Cela se fera dans le chapitre sur la configuration, /var/log/postgresql étant le répertoire choisi, ce dernier dépendant de la partition /var.

Au cas où vous voudriez installer une version antérieure à la 15, les statistiques d’activités sont stockées sur disque et il est généralement préférable de les placer sur un ramdisk pour gagner en performances. Ce n’est plus le cas en version 15 vu que les métriques sont conservées en mémoire pendant toute la durée d’exécution du serveur.

Même si tous les exemples se basent sur Rocky Linux, les commandes doivent être utilisables sur toute distribution, quelle que soit sa version.

Toutes les commandes de cet article seront à exécuter avec l’utilisateur root ou en utilisant la commande sudo.

2. Configuration du système d’exploitation

Il existe plusieurs paramètres du noyau Linux qui sont importants pour PostgreSQL. Un seul concerne sa stabilité, les autres sont plutôt relatifs aux performances.

Linux dispose d’un système qui lui permet d’allouer aux applications plus de mémoire qu’il n’en a réellement. L’idée de base est simple : beaucoup d’applications demandent de la mémoire, sans vraiment l’utiliser. Les applications écrites en Java en sont un exemple typique : beaucoup de mémoire allouée, mais au final peu réellement utilisée. De ce fait, par défaut, Linux accepte de donner plus de mémoire qu’il n’en a. Cela fonctionne généralement bien. Mais dans certains cas, comme par exemple avec PostgreSQL, cela peut causer de gros problèmes. En effet, si les applications ont la mauvaise idée d’utiliser toute la mémoire qu’elles ont allouée, Linux risque de se retrouver à court de mémoire. Dans ce cas, il décide de tuer les applications les plus consommatrices. Et malheureusement, PostgreSQL a tendance à gagner facilement à ce jeu-là. Ce système s’appelle l’Overcommit Memory et il convient de le désactiver sur un serveur dédié à PostgreSQL.

Pour cela, il convient de configurer le paramètre vm.overcommit_memory à la valeur 2. Le mieux revient à créer un fichier nommé /etc/sysctl.d/S99-postgresql avec ce contenu :

vm.overcommit_memory = 2

Ainsi, cette configuration s’appliquera à chaque démarrage du serveur.

Les autres paramètres étant relatifs aux performances de PostgreSQL et ne permettant pas de toute façon de gagner énormément, ils ne seront pas détaillés dans cet article, mais en voici la liste pour les curieux et curieuses :

  • vm.dirty_background_bytes et ses amis vm.dirty_background_ratio, vm.dirty_bytes et vm.dirty_ratio ;
  • vm.nr_hugepages ;
  • vm.nr_overcommit_hugepages ;
  • vm.overcommit_ratio ;
  • vm.swappiness ;
  • vm.zone_reclaim_mode.

Pensez néanmoins à désactiver les Transparent Huge Pages.

Concernant les systèmes de fichiers, faites bien attention à activer l’option noatime sur les systèmes le supportant.

3. Installation du dépôt de la communauté

En effet, nous n'allons pas utiliser les paquets fournis par la distribution Rocky Linux, mais ceux fournis par la communauté PostgreSQL. Les mises à jour, majeures et mineures, sont souvent disponibles bien plus rapidement. C'est d'autant plus important pour les mises à jour mineures comprenant des failles de sécurité. Il est essentiel de les mettre à jour dès l'annonce de la sortie de versions mineures. De ce fait, la première étape est d'installer la définition du dépôt de la communauté. Pour un serveur x86_64 installé avec une distribution Red Hat / CentOS / Rocky Linux version 9, cela se fait avec cette commande unique :

dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

Attention, uniquement si vous êtes sur une version 7 des mêmes distributions, il vous faut maintenant désactiver le module postgresql. Cette commande s'en charge :

dnf -qy module disable postgresql

Pour les versions ultérieures, ce module n'existe plus, donc la commande de désactivation est inutile.

Ceci fait, nous avons accès aux paquets de la communauté.

4 Installation des paquets

Nous allons installer plusieurs paquets pour PostgreSQL :

  • postgresql15-server contient les binaires nécessaires au serveur PostgreSQL ;
  • postgresql15-libs contient les bibliothèques partagées du serveur ;
  • postgresql15 contient les applications clientes (comme psql ou pg_dump par exemple) ;
  • postgresql15-contrib contient les modules contrib, sortes d’extensions ou d’addons permettant d’ajouter des fonctionnalités à PostgreSQL.

La ligne de commandes ne précise que deux paquets, mais les dépendances de ces deux paquets feront que les autres seront installés :

dnf install -y postgresql15-server postgresql15-contrib

5. Configuration du service

Comme nous allons placer le répertoire de données dans un répertoire autre que l'habituel /var/lib/pgsql/15/data, il nous faut modifier la configuration du service. Pour cela, il faut créer un fichier override.conf qui va permettre, comme son nom l’indique, de surcharger la configuration par défaut. Cela se fait avec les deux commandes suivantes :

mkdir -p /etc/systemd/system/postgresql-15.service.d
cat > /etc/systemd/system/postgresql-15.service.d/override.conf <<_EOF_
[Service]
Environment=PGDATA=/srv/data
_EOF_

6. Initialisation du répertoire des données

Maintenant, il nous faut préparer le répertoire des fichiers de données et celui des journaux de transactions :

install -d -o postgres -g postgres -m 700 /srv/data
rm -rf /srv/wal/lost+found/
chown -R postgres:postgres /srv/wal

Enfin, nous pouvons initialiser le répertoire des données :

PGSETUP_INITDB_OPTIONS="--data-checksums --waldir /srv/wal" /usr/pgsql-15/bin/postgresql-15-setup initdb

L'option --data-checksums permet d'activer les sommes de contrôle sur les fichiers de données. Ces sommes de contrôle permettent d’être prévenu en cas de corruption dans les fichiers de données. L'option --waldir permet d'indiquer un autre répertoire de stockage pour les journaux de transactions.

La commande initdb va créer les répertoires et fichiers nécessaires pour pouvoir démarrer PostgreSQL. Ces fichiers étant créés, il ne nous reste plus qu'à activer le service et le démarrer.

7. Activation et démarrage du service

L’activation et le démarrage sont deux commandes séparées pour systemd. Le service PostgreSQL pour ce dernier étant configuré, il ne reste plus qu’à les exécuter :

systemctl enable postgresql-15
systemctl start postgresql-15

8. Configuration de l’utilisateur système postgres

Ce rôle n’a pas de mot de passe par défaut. Ajoutez-en un si vous le souhaitez.

Ajoutez surtout dans le fichier d’initialisation de session (.profile, .bash_profile, ou autre) la configuration de la variable d’environnement PGDATA. Celle-ci doit pointer vers le répertoire d’installation de PostgreSQL :

export PGDATA=/srv/data

Les paquets RPM le font, cependant le répertoire indiqué pointe vers le répertoire par défaut (/var/lib/pgsql/15/data), pas le répertoire personnalisé que nous avons choisi.

Il est aussi intéressant de modifier la variable d’environnement PATH pour pointer vers les binaires de PostgreSQL, soit :

export PATH=/usr/pgsql-15/bin:$PATH

9. Ajouter une deuxième instance

Nous n’allons pas utiliser de deuxième instance sur un même serveur. Cependant, cette demande revient si régulièrement qu’il est intéressant d’y répondre maintenant.

Si vous souhaitez ajouter une deuxième instance sur le même serveur, il faut ajouter un service systemd en copiant le fichier de base (ou plus intelligemment, en créant un lien symbolique) :

ln -s /usr/lib/systemd/system/postgresql-15.service /etc/systemd/system/pg2.service

Comme précédemment, nous allons surcharger la configuration du nouveau service :

mkdir -p /etc/systemd/system/pg2.service.d
cat > /etc/systemd/system/pg2.service.d/override.conf <<_EOF_
[Service]
Environment=PGDATA=/srv/data2
_EOF_

Comme un nouveau service est installé, il faut demander à systemd de recharger sa configuration :

systemctl daemon-reload

Avant de remplir le répertoire de données, il faut le créer et lui affecter le bon propriétaire :

install -d -o postgres -g postgres -m 700 /srv/data2

Enfin, nous pouvons initialiser le répertoire des données :

PGSETUP_INITDB_OPTIONS="--data-checksums" /usr/pgsql-15/bin/postgresql-15-setup initdb pg2

La différence avec la précédente exécution de ce script tient dans l’ajout d’un argument correspondant au nom du nouveau service. Ainsi le script peut trouver le bon répertoire des données.

Il ne reste plus qu’à activer et lancer ce service :

systemctl enable pg2
systemctl start pg2

Si vous avez créé plusieurs instances sur le même serveur, il est fortement conseillé de configurer le paramètre cluster_name de PostgreSQL pour pouvoir différencier les processus de chaque instance.

Conclusion

Et voilà, PostgreSQL est installé. Il est même lancé. Cependant, avant de l’utiliser, il serait bien de le configurer un minimum. Ce sera le sujet du prochain article de cette série.



Article rédigé par

Par le(s) même(s) auteur(s)

Supervision d’une instance PostgreSQL

Magazine
Marque
Linux Pratique
Numéro
142
Mois de parution
mars 2024
Spécialité(s)
Résumé

Maintenant que nous sommes rassurés suite à l’installation de solutions de sauvegarde [1], il est temps de s’occuper de la supervision de notre instance. Il existe différents types d’outils, certains en ligne de commandes, certains graphiques (généralement une application web), certains font de la rétro-analyse alors que d’autres font de la supervision en direct. Encore une fois avec PostgreSQL, les outils sont nombreux et la difficulté vient principalement du choix offert.

Les derniers articles Premiums

Les derniers articles Premium

La place de l’Intelligence Artificielle dans les entreprises

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

L’intelligence artificielle est en train de redéfinir le paysage professionnel. De l’automatisation des tâches répétitives à la cybersécurité, en passant par l’analyse des données, l’IA s’immisce dans tous les aspects de l’entreprise moderne. Toutefois, cette révolution technologique soulève des questions éthiques et sociétales, notamment sur l’avenir des emplois. Cet article se penche sur l’évolution de l’IA, ses applications variées, et les enjeux qu’elle engendre dans le monde du travail.

Petit guide d’outils open source pour le télétravail

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Ah le Covid ! Si en cette période de nombreux cas resurgissent, ce n’est rien comparé aux vagues que nous avons connues en 2020 et 2021. Ce fléau a contraint une large partie de la population à faire ce que tout le monde connaît sous le nom de télétravail. Nous avons dû changer nos habitudes et avons dû apprendre à utiliser de nombreux outils collaboratifs, de visioconférence, etc., dont tout le monde n’était pas habitué. Dans cet article, nous passons en revue quelques outils open source utiles pour le travail à la maison. En effet, pour les adeptes du costume en haut et du pyjama en bas, la communauté open source s’est démenée pour proposer des alternatives aux outils propriétaires et payants.

Sécurisez vos applications web : comment Symfony vous protège des menaces courantes

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Les frameworks tels que Symfony ont bouleversé le développement web en apportant une structure solide et des outils performants. Malgré ces qualités, nous pouvons découvrir d’innombrables vulnérabilités. Cet article met le doigt sur les failles de sécurité les plus fréquentes qui affectent même les environnements les plus robustes. De l’injection de requêtes à distance à l’exécution de scripts malveillants, découvrez comment ces failles peuvent mettre en péril vos applications et, surtout, comment vous en prémunir.

Bash des temps modernes

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Les scripts Shell, et Bash spécifiquement, demeurent un standard, de facto, de notre industrie. Ils forment un composant primordial de toute distribution Linux, mais c’est aussi un outil de prédilection pour implémenter de nombreuses tâches d’automatisation, en particulier dans le « Cloud », par eux-mêmes ou conjointement à des solutions telles que Ansible. Pour toutes ces raisons et bien d’autres encore, savoir les concevoir de manière robuste et idempotente est crucial.

Les listes de lecture

9 article(s) - ajoutée le 01/07/2020
Vous désirez apprendre le langage Python, mais ne savez pas trop par où commencer ? Cette liste de lecture vous permettra de faire vos premiers pas en découvrant l'écosystème de Python et en écrivant de petits scripts.
11 article(s) - ajoutée le 01/07/2020
La base de tout programme effectuant une tâche un tant soit peu complexe est un algorithme, une méthode permettant de manipuler des données pour obtenir un résultat attendu. Dans cette liste, vous pourrez découvrir quelques spécimens d'algorithmes.
10 article(s) - ajoutée le 01/07/2020
À quoi bon se targuer de posséder des pétaoctets de données si l'on est incapable d'analyser ces dernières ? Cette liste vous aidera à "faire parler" vos données.
Voir les 125 listes de lecture

Abonnez-vous maintenant

et profitez de tous les contenus en illimité

Je découvre les offres

Déjà abonné ? Connectez-vous