Aller au contenu principal

PostgreSQL (postgresql)

Base relationnelle des services de la plateforme avec l'extension pgvector pour les plongements. Serveur unique, ou haute disponibilité avec Patroni : réplication en flux, bascule automatique et élection du leader dans etcd. Un cluster PostgreSQL de la banque peut être connecté à la place.

Généré depuis catalog/services/postgresql.yaml : ne pas modifier à la main.

Résumé​

Version16.15
Usageinstaller et configurer
Couchefonctionnelle (catalogue IA)
CatégoriePlateformes de données
Méthodes d'installationpodman, package, python
Connexion externepostgresql
Réservé au bac à sablenon

Licence​

Identifiant SPDXPostgreSQL
Politique de licenceexception de licence
Exception de licenceLEX-001 (en attente de la décision du client)
Composant de la plateformepostgresql

Paquets et artefacts​

Un paquet que publie le projet du service (son image, son archive binaire, son paquet Python ou système) porte la licence du service ; un paquet tiers porte la licence écrite sur sa ligne, lue dans les métadonnées officielles du projet amont.

TypePaquetVersionLicenceDétails
image de conteneurdocker.io/pgvector/pgvector0.8.7-pg16-bookwormPostgreSQLclé d'image postgres, utilisée par postgres, condensé sha256:0dd3149a06e4579a0d70d8fef9945636cd514005e7237deb27f9b67886f8dc4f
paquet Pythonpixeltable-pgserver0.7.1PostgreSQLinterpréteurs, par ordre de préférence python3.11, python3.12, python3.10
paquet Pythonpatroni[etcd3]4.1.5PostgreSQLinterpréteurs, par ordre de préférence python3.11, python3.12, python3.10
paquet Pythonpsycopg[binary]3.3.2PostgreSQLinterpréteurs, par ordre de préférence python3.11, python3.12, python3.10
paquet systèmepostgresql16-serverversion du dépôt configuréPostgreSQLfamille RHEL (dnf)
paquet systèmepostgresql16version du dépôt configuréPostgreSQLfamille RHEL (dnf)
paquet systèmepostgresql16-contribversion du dépôt configuréPostgreSQLfamille RHEL (dnf)
paquet systèmepgvector_16version du dépôt configuréPostgreSQLfamille RHEL (dnf)
paquet systèmepatroniversion du dépôt configuréPostgreSQLfamille RHEL (dnf)
paquet systèmepatroni-etcdversion du dépôt configuréPostgreSQLfamille RHEL (dnf)
paquet systèmepostgresql-16version du dépôt configuréPostgreSQLfamille Debian (apt)
paquet systèmepostgresql-client-16version du dépôt configuréPostgreSQLfamille Debian (apt)
paquet systèmepostgresql-16-pgvectorversion du dépôt configuréPostgreSQLfamille Debian (apt)
paquet systèmepatroniversion du dépôt configuréPostgreSQLfamille Debian (apt)
paquet systèmepython3-etcdversion du dépôt configuréPostgreSQLfamille Debian (apt)

Les images sont épinglées par étiquette dans le descripteur, et par condensé (digest) quand le descripteur en déclare un (le bundle hors ligne refuse alors une image téléchargée qui ne le porte pas) ; le condensé est enregistré dans le miroir du Manager à l'import du bundle hors ligne, et chaque téléchargement ou chargement est vérifié par rapport à lui.

Systèmes et architectures pris en charge​

MéthodeSystèmes d'exploitationArchitectures
podmanfamille RHEL (dnf), famille Debian (apt), Arch Linux (pacman)x86_64, aarch64 (non restreintes par le descripteur)
packagefamille RHEL (dnf), famille Debian (apt)x86_64, aarch64 (non restreintes par le descripteur)
pythonfamille RHEL (dnf), famille Debian (apt), Arch Linux (pacman)x86_64, aarch64 (non restreintes par le descripteur)

Systèmes hôtes certifiés : RHEL 8/9/10, Rocky Linux 8/9/10, AlmaLinux 8/9/10, Oracle Linux 8/9, CentOS Stream 9/10, Ubuntu 22.04/24.04, Debian 12, Arch Linux (rolling). Le contrôle préalable des hôtes accepte ces systèmes (une autre version d'une famille connue donne un avertissement, une version en fin de vie est refusée) et les architectures x86_64 et aarch64.

Prérequis​

Hôte​

  • au moins 1024 Mo de mémoire (bloquant, memory).
  • au moins 5120 Mo libres pour /var/lib/navin (avertissement, disk).
  • une horloge synchronisée (avertissement, time_sync).

Réseau et ports​

ComposantNom du portPortOuvert dans le pare-feu de l'hôte
postgressql5432/tcpoui
postgresrestapi8008/tcp (mode ha)oui

Services et connexions nécessaires​

Détail et résolution : voir Dépendances.

Méthodes et modes d'installation​

MéthodeDéfautCe que la méthode utilise
podmanouiles images de conteneur du descripteur, exécutées par Podman sous systemd
package-les paquets système du descripteur, installés par le gestionnaire de paquets de l'hôte
python-un environnement virtuel Python qui contient les paquets Python du descripteur

Composants​

ComposantTypeMéthodes d'installationPorts
Serveur PostgreSQL (postgres)maîtrepodman, package, python5432/tcp, 8008/tcp (mode ha)

Serveur unique (standalone) (par défaut)​

Un seul serveur PostgreSQL, sans réplica.

Ce que le mode déploie :

ComposantPlacement
postgresmin 1, max 1

Haute disponibilité (Patroni) (ha)​

2 à 7 membres (3 recommandés) gérés par Patroni : un leader, les autres membres sont des réplicas en flux, bascule automatique par etcd. Méthodes package et python.

Ce que le mode déploie :

ComposantPlacement
postgresmin 2, max 7, recommandé 3

Installer ce service​

L'assistant d'installation du Navin Manager planifie, valide et exécute l'installation ; il faut la permission services:install sur le cluster.

  1. Ouvrez l'assistant. Dans Clusters, choisissez l'action de ligne Installer des services du cluster cible. L'assistant s'ouvre sur sa première étape, Service.

  2. Choisissez le service. À l'étape Service, sélectionnez PostgreSQL. La carte affiche la licence PostgreSQL et les dépendances dont l'installation a besoin. Choisissez la Méthode parmi podman, package, python (par défaut podman). Pour enregistrer à la place un service postgresql existant de votre organisation, activez Utiliser un service externe existant.

  3. Choisissez les hôtes et le mode. À l'étape Hôtes, cochez les hôtes, puis choisissez le Mode : standalone (par défaut), ha. Chaque mode déploie les composants listés dans Méthodes et modes d'installation.

  4. Liez les dépendances. À l'étape Liaisons, choisissez pour chaque dépendance (dcs) Installer avec la plateforme ou Utiliser une connexion existante ; une dépendance facultative peut rester sur Aucune liaison.

  5. Configurez. À l'étape Configuration, relisez les paramètres (voir Paramètres de configuration). Les mots de passe laissés vides avec une valeur générée par défaut sont générés et scellés par le Manager.

  6. Relisez et installez. À l'étape Installation, le Manager valide le plan et affiche l'ordre d'installation ; quand il indique « Le plan est valide. Prêt pour l'installation. », choisissez Installer. Un mode hautement disponible n'est installé que si ses contrôles HA réussissent.

  7. Vérifiez. L'opération se termine quand les contrôles de santé de chaque instance réussissent (voir Contrôles de santé) ; le service apparaît alors en marche dans Services. Ouvrez le service et choisissez Lancer le test fonctionnel dans la carte Contrôles : Crée une table temporaire sur le leader, écrit puis relit une ligne ; avec pgvector, une colonne vector(3) et une requête du plus proche voisin.

Haute disponibilité​

Clusterréplicas (replication)
Haute disponibiliténatif (native)
Basculeorchestrée (orchestrated)
Réplicationnatif (native)
QuorumRaft (raft)
Découverteregistre (registry)
Point d'entréedécouverte par le client (client-discovery)
Documentation officiellehttps://patroni.readthedocs.io/en/latest/ha_loop.html
Référenceshttps://www.postgresql.org/docs/16/warm-standby.html, https://patroni.readthedocs.io/en/latest/yaml_configuration.html, https://patroni.readthedocs.io/en/latest/rest_api.html, https://www.postgresql.org/docs/16/libpq-connect.html, https://github.com/pgvector/pgvector
Paramètre TLS entre pairstls_enabled
Authentification entre pairsRéplication avec le rôle replicator et pg_rewind avec le rôle postgres (scram-sha-256), autorisés seulement depuis les hôtes des membres ; avec TLS, hostssl uniquement, les réplicas vérifient le certificat du leader (verify-full) et Patroni présente son certificat à etcd et à l'API REST des autres membres.
Commande d'état du clustercluster_status

Prérequis​

PrérequisDoit être hautement disponibleModesDescription
dcsouihaetcd en mode cluster (3 ou 5 membres, quorum Raft) : Patroni rétrograde le leader quand etcd est injoignable, un membre etcd unique en ferait donc le point de défaillance unique.

Topologie par mode​

ModesNiveau le plus haut du catalogueRépartitionComposant du quorumDomaines de panneDescription
standaloneautonome (standalone)unique (single)-1Un serveur PostgreSQL, restauré depuis ses sauvegardes après une perte.
haha (ha)actif-passif (active-passive)-3Un leader en lecture écriture et 1 à 6 réplicas en flux ; Patroni promeut le réplica sain le plus avancé quand la clé du leader expire dans etcd, l'ancien leader revient comme réplica (pg_rewind).

Remarques​

  • Mode ha : les consommateurs joignent le leader par la liste libpq de tous les membres avec target_session_attrs=read-write (clients PostgreSQL 14 ou plus récents). Pour les clients qui ne prennent qu'une adresse, placer HAProxy devant les membres avec un contrôle HTTP GET /primary sur le port de l'API REST de Patroni : seul le leader répond 200.
  • Réplication asynchrone par défaut : une bascule peut perdre les dernières transactions pas encore reçues par le réplica promu, bornées par maximum_lag_on_failover ; synchronous_mode supprime cette perte.
  • Le mode ha fonctionne avec les méthodes package et python ; Patroni sans watchdog s'appuie sur la durée de vie de la clé du leader dans etcd.
  • Les réglages d'amorçage (max_connections, WAL, ttl, loop_wait, retry_timeout, synchronous_mode) sont écrits dans etcd au premier démarrage ; une modification ultérieure s'applique avec la commande push_settings.
  • Un cluster PostgreSQL de la banque qui répond à ses exigences de haute disponibilité peut être connecté à la place (type de connexion postgresql).

Paramètres de configuration​

Réseau​

ParamètreTypeDéfautValeurs permisesObligatoireSecretRedémarrageDescription
Port (port)port5432-nonnonnonPort TCP du serveur SQL.
Port de l'API REST de Patroni (restapi_port)port8008-nonnonnonPort de l'API REST de Patroni de chaque membre (contrôles /liveness, /primary, /replica, état du cluster, bascule). (ha)
Adresse d'écoute (listen_address)string*-nonnonnonAdresses sur lesquelles le serveur et l'API REST de Patroni écoutent. (avancé)

Réglages​

ParamètreTypeDéfautValeurs permisesObligatoireSecretRedémarrageDescription
Connexions maximales (max_connections)int200min 20, max 5000nonnonouiNombre maximal de connexions clientes.
Tampons partagés (shared_buffers_mb)int512min 64, MBnonnonouiMémoire du cache de tampons partagés, environ 25 pour cent de la mémoire de l'hôte. (recommandé clamp(round(host.memory_mb * 0.25), 128, 16384))
WAL conservés pour les réplicas (wal_keep_size_mb)int1024min 0, max 1048576, MBnonnonnonWAL conservés dans pg_wal pour les réplicas et les sauvegardes (wal_keep_size).

Sécurité​

ParamètreTypeDéfautValeurs permisesObligatoireSecretRedémarrageDescription
Mot de passe du superutilisateur (superuser_password)passwordgénéré-nonouinonMot de passe du rôle postgres, utilisé par les commandes de provisionnement, les sauvegardes et pg_rewind.
Mot de passe de réplication (replication_password)passwordgénéré-nonouinonMot de passe du rôle replicator avec lequel les réplicas reçoivent les WAL. (ha)
Mot de passe de l'API REST (restapi_password)passwordgénéré-nonouinonMot de passe d'authentification basique (utilisateur navin) des points sensibles de l'API REST de Patroni (bascule, redémarrage, réinitialisation). (ha)
TLS (tls_enabled)boolfalse-nonnonnonServir le SQL, la réplication et l'API REST de Patroni en TLS avec le certificat de l'autorité de la console et refuser toute connexion sans TLS (hostnossl reject). Méthodes podman et package seulement : le PostgreSQL de la méthode python est compilé sans OpenSSL. Obligatoire en mode ha quand etcd utilise TLS (certificat client).
Réseau autorisé (allowed_cidr)string0.0.0.0/0-nonnonnonCIDR autorisé à se connecter avec un mot de passe (scram-sha-256).

Extensions​

ParamètreTypeDéfautValeurs permisesObligatoireSecretRedémarrageDescription
pgvector (pgvector)booltrue-nonnonnonCréer l'extension vector dans template1 et dans la base de chaque consommateur au provisionnement (type vector, index HNSW et IVFFlat).

Haute disponibilité​

ParamètreTypeDéfautValeurs permisesObligatoireSecretRedémarrageDescription
Limite de WAL d'un slot (max_slot_wal_keep_size_mb)int10240min 1024, max 1048576, MBnonnonnonWAL maximal qu'un slot de réplication d'un membre arrêté retient (max_slot_wal_keep_size), pour qu'un réplica perdu ne remplisse jamais le disque du leader ; au delà le membre est réinitialisé. (ha)
Réplication synchrone (synchronous_mode)boolfalse-nonnonnonsynchronous_mode de Patroni : une validation attend un réplica synchrone et seul ce réplica peut être promu (aucune transaction validée perdue à la bascule, latence de validation plus élevée). (ha)
Durée de vie de la clé du leader (ttl)int30min 10, max 300, snonnonnonDurée de vie de la clé du leader dans etcd : un leader qui ne peut pas la renouveler pendant cette durée est rétrogradé et un réplica est promu. (avancé; ha)
Intervalle de la boucle (loop_wait)int10min 1, max 60, snonnonnonSecondes entre deux tours de la boucle de haute disponibilité de Patroni. (avancé; ha)
Délai de nouvelle tentative (retry_timeout)int10min 1, max 120, snonnonnonDélai des opérations etcd et PostgreSQL que Patroni retente avant une rétrogradation. (avancé; ha)
Retard maximal à la bascule (maximum_lag_on_failover_mb)int1min 0, max 102400, MBnonnonnonUn réplica plus en retard que cette valeur sur le leader n'est jamais promu (maximum_lag_on_failover). (avancé; ha)

Dépendances​

Pour chaque dépendance active, le Manager prend la première solution parmi : la liaison choisie dans l'assistant ; un service de la même installation qui la fournit ; un service déjà installé dans le cluster ; la seule connexion du type attendu. Sinon, une dépendance facultative reste non liée, et une dépendance obligatoire est ajoutée à l'installation dans son mode par défaut (la colonne ci-dessous nomme le service du catalogue ajouté).

LiaisonFournie parType de connexionPoint d'accèsFacultativeQuand rien n'est liéDescription
dcs (ha)etcd-clientnonetcd est ajouté à l'installationCluster etcd où Patroni conserve la clé du leader, la liste des membres et la configuration dynamique (mode ha).

Points d'accès​

Point d'accèsSchémaComposantPortCheminParamètre TLSParamètres de liaisonSecrets de liaisonCommande de provisionnement
sqlpostgresqlpostgres5432 (port)-tls_enableddatabase, username, sslmodepasswordprovision_consumer

Fichiers de configuration client​

Fichiers rendus pour le téléchargement de la configuration client :

  • postgresql.env (client.env.j2)

Commandes​

CommandeComposantCibleDescription
Provisionner la base d'un consommateur (provision_consumer)postgrespremier hôteCrée ou met à jour le rôle et la base d'un service consommateur sur le leader, avec l'extension vector quand pgvector est actif (idempotent).
Activer une extension (enable_extension)postgrespremier hôteCrée une extension dans une base sur le leader (idempotent). La méthode python ne fournit que vector.
Lister les bases (list_databases)postgrespremier hôteListe les bases de données et leurs propriétaires.
Afficher l'activité (activity)postgrespremier hôteAffiche les sessions de pg_stat_activity du leader.
État du cluster (cluster_status)postgrespremier hôteMode ha : membres, rôle, état, timeline et retard (patronictl list). Serveur unique : rôle et réplication du serveur.
Bascule planifiée (switchover)postgrespremier hôteMode ha : déplace le rôle de leader vers le membre indiqué, qui doit être un réplica en flux sain (patronictl switchover) ; les sessions de l'ancien leader sont coupées. (demande une confirmation)
Réinitialiser un membre (reinit_member)postgrespremier hôteMode ha : supprime le répertoire de données d'un réplica et le clone de nouveau depuis le leader (patronictl reinit). Jamais le leader. (demande une confirmation)
Appliquer les réglages (push_settings)postgrespremier hôteMode ha : écrit max_connections, wal_keep_size, la limite de WAL des slots, synchronous_mode, ttl, loop_wait, retry_timeout et maximum_lag_on_failover dans la configuration dynamique dans etcd (patronictl edit-config), puis redémarre un par un les membres qui attendent un redémarrage. (demande une confirmation)

Paramètres des commandes​

CommandeParamètreTypeDéfautObligatoireDescription
provision_consumerBase de données (database)string-ouiBase de données du consommateur.
provision_consumerRôle (username)string-ouiRôle de connexion du consommateur.
provision_consumerMot de passe (password)password-ouiMot de passe du rôle (dérivé par consommateur).
enable_extensionBase de données (database)string-ouiBase de données où l'extension est créée.
enable_extensionExtension (extension)enumvectorouivector (pgvector) ou une extension contrib de PostgreSQL 16.
switchoverNouveau leader (candidate)string-ouiNom du membre du nouveau leader (nom d'hôte, voir l'état du cluster).
reinit_memberMembre (member)string-ouiNom du membre du réplica (nom d'hôte, voir l'état du cluster).

Contrôles de santé​

Vivacité (par instance)​

ComposantContrôleDétails
postgresTCP {{ host.ip or '127.0.0.1' }}:{{ config.port }}90 tentatives ; intervalle 2 s ; délai 3 s

Disponibilité (contrôle du service)​

ContrôleDétails
{{ paths.etc }}/check.sh30 tentatives ; intervalle 4 s ; délai 30 s

Test fonctionnel​

Crée une table temporaire sur le leader, écrit puis relit une ligne ; avec pgvector, une colonne vector(3) et une requête du plus proche voisin. (postgres: write_read, nearest_neighbour)

Contrôles préalables​

ContrôleTypeSignificationSévéritéComposants
memorymemory_mb {"min": 1024}au moins 1024 Mo de mémoirebloquanttous les composants
diskdisk_free_mb {"path": "/var/lib/navin", "min": 5120}au moins 5120 Mo libres pour /var/lib/navinavertissementtous les composants
sql_port_freeport_free {"param": "port"}port 5432 libre sur l'hôtebloquanttous les composants
time_synctime_sync {}une horloge synchroniséeavertissementtous les composants

Sauvegarde et restauration​

Sauvegarde physique de tout le serveur prise sur le leader (pg_basebackup, format tar, WAL en flux, manifeste SHA256) ; l'étape de vérification l'extrait et lance pg_verifybackup. Restauration : le répertoire de données du membre de la sauvegarde est remplacé ; en mode ha l'état du cluster dans etcd est réinitialisé, ce membre redémarre comme leader et chaque autre membre est de nouveau cloné depuis lui à son démarrage.

Formatpg-basebackup
Composantpostgres
Fichiers{{ backup.dir }}/base.tar.gz, {{ backup.dir }}/pg_wal.tar.gz, {{ backup.dir }}/backup_manifest
Test de restaurationoui
Instances arrêtées pendant la restaurationoui

Désinstallation​

Chemins supprimés quand les données sont purgées : {{ paths.data }}, {{ paths.log }}.

Documentation amont​