Skip to content

Latest commit

 

History

History
1086 lines (866 loc) · 30.7 KB

File metadata and controls

1086 lines (866 loc) · 30.7 KB

🔝 Retour au Sommaire

19. PostgreSQL en Production

Introduction : L'Art de la Production

Déployer PostgreSQL en production est un moment critique qui marque la transition entre l'expérimentation et la responsabilité opérationnelle. C'est le passage du "ça fonctionne sur mon laptop" au "ça doit fonctionner 24/7 pour nos clients".

Analogie :

Imaginez la différence entre :

  • Développement : Cuisiner un plat pour vous-même à la maison
  • Production : Gérer un restaurant qui sert 500 couverts par jour

Les enjeux changent radicalement :

  • La recette doit être reproductible et standardisée
  • L'équipement doit être professionnel et fiable
  • Vous devez gérer les pics de demande et les imprévus
  • La qualité doit être constante
  • Les pannes peuvent ruiner votre réputation
  • La sécurité alimentaire est critique

C'est exactement la même chose avec PostgreSQL en production.


Développement vs Production : Le Grand Écart

Tableau Comparatif

Aspect Développement / Test Production
Utilisateurs 1-10 développeurs Des centaines à des millions
Disponibilité "Best effort" 99.9% - 99.999% (SLA contractuel)
Données Données fictives Données critiques business
Volume Quelques MB/GB Des centaines de GB à plusieurs TB
Performances "Ça marche" Latence garantie (< 100ms)
Sécurité Relaxée (localhost) Stricte (authentification, chiffrement)
Monitoring Logs basiques Observabilité complète 24/7
Backups Optionnels Automatisés, testés, multi-sites
Mises à jour Fréquentes, rapides Planifiées, validées, rollback préparé
Budget panne Redémarrer suffit Coût business : 1000-100 000€/heure
Équipe Développeurs DevOps + DBA + SRE + Astreintes
Documentation README minimal Runbooks détaillés
Configuration Défauts PostgreSQL Optimisée selon charge
Matériel Laptop, VM simple Infrastructure redondée

Les Coûts d'une Panne en Production

Quelques exemples réels :

E-commerce (Black Friday) :
├─ Trafic : 10 000 commandes/heure
├─ Panier moyen : 80€
├─ Panne 1 heure = 800 000€ de CA perdu
└─ + Impact image de marque

Banque en ligne :
├─ Panne = impossibilité paiements
├─ 1 heure downtime = 50 000€ d'amendes régulateurs
└─ + Perte confiance clients

SaaS B2B :
├─ SLA garanti : 99.9% (8.76 heures/an)
├─ Dépassement = pénalités contrat
├─ Panne 24h = remboursement mensuel client
└─ + Risque churn (départ clients)

Healthcare :
├─ Panne = dossiers patients inaccessibles
├─ Impact : retard soins, risque vital
├─ Responsabilité légale
└─ Conformité réglementaire (HDS)

Conclusion : En production, l'indisponibilité a un coût réel et mesurable.


Les Piliers de PostgreSQL en Production

1. Fiabilité (Reliability)

Définition : Le système fonctionne correctement même en cas de problème.

Fiabilité = Capacité à maintenir le service malgré :
├─ Pannes matérielles (disque, CPU, RAM, réseau)
├─ Pannes logicielles (bugs PostgreSQL, OS)
├─ Erreurs humaines (mauvaise requête, config erronée)
├─ Charges imprévues (pic de traffic)
└─ Catastrophes (incendie datacenter, inondation)

Moyens :

  • Réplication : Primary + Standbys (PostgreSQL streaming replication)
  • Backups : Sauvegardes automatisées, testées régulièrement
  • Redondance : Serveurs, disques (RAID), réseau, alimentations
  • PITR : Point-In-Time Recovery (WAL archiving)
  • Monitoring : Détection proactive des anomalies

Métriques clés :

  • MTBF (Mean Time Between Failures) : Temps moyen entre pannes
  • MTTR (Mean Time To Recover) : Temps moyen de récupération
  • RTO (Recovery Time Objective) : Durée maximale de panne acceptable
  • RPO (Recovery Point Objective) : Perte de données maximale acceptable

Exemple :

E-commerce standard :
├─ RTO = 4 heures (back online sous 4h)
├─ RPO = 1 heure (perdre max 1h de transactions)
└─ Disponibilité cible = 99.9% (8.76h downtime/an)

Application critique (banque) :
├─ RTO = 30 secondes (failover automatique)
├─ RPO = 0 (réplication synchrone, zéro perte)
└─ Disponibilité cible = 99.99% (52 min downtime/an)

2. Performance

Définition : Le système répond rapidement et gère la charge attendue.

Performance = Capacité à maintenir :
├─ Latence faible (temps réponse < seuil)
├─ Throughput élevé (transactions/sec)
├─ Utilisation ressources optimale
└─ Dégradation gracieuse sous forte charge

Dimensions de la performance :

Latence (Temps de réponse)

Objectifs typiques :
├─ API Web : < 100ms (p95)
├─ Admin backend : < 500ms (p95)
├─ Analytics : < 5 secondes
└─ Trading haute fréquence : < 1ms

p95 = 95% des requêtes sous le seuil  
p99 = 99% des requêtes sous le seuil  

Throughput (Débit)

Capacité :
├─ OLTP : 1000-100 000 transactions/sec
├─ OLAP : Requêtes lourdes simultanées
├─ Mixte : Équilibre lecture/écriture
└─ Connexions : 100-10 000 simultanées

Facteurs d'optimisation :

  • Hardware : CPU, RAM, I/O (NVMe > SSD > HDD)
  • Configuration : shared_buffers, work_mem, max_connections
  • Schéma : Normalisation, index, partitionnement
  • Requêtes : Optimisation SQL, EXPLAIN ANALYZE
  • Connection pooling : PgBouncer pour gérer connexions
  • Caching : Redis/Memcached pour réduire charge DB

PostgreSQL 18 spécifique :

  • I/O asynchrone : Jusqu'à 3× plus rapide sur NVMe
  • Skip Scan : Optimisation index multi-colonnes
  • OR-clauses : Transformation en ANY pour meilleures performances

3. Scalabilité (Scalability)

Définition : Le système peut croître pour gérer plus de charge.

Scalabilité = Deux dimensions :
├─ Vertical (Scale Up) : Plus de ressources par serveur
│   └─ CPU, RAM, I/O sur même machine
└─ Horizontal (Scale Out) : Plus de serveurs
    └─ Réplication, sharding, lecture/écriture séparées

Scaling Vertical (Scale Up)

Augmenter ressources d'un serveur :
├─ CPU : 8 → 16 → 32 → 64 cores
├─ RAM : 32GB → 64GB → 128GB → 256GB+
├─ I/O : SATA SSD → NVMe → Multi-NVMe RAID
└─ Réseau : 1GbE → 10GbE → 25GbE+

Avantages :
✅ Simple (pas de changement architecture)
✅ Pas de complexité distribuée
✅ PostgreSQL gère tout nativement

Limites :
⚠️ Plafond matériel (coût exponentiel)
⚠️ Single point of failure
⚠️ Downtime pour upgrade

Scaling Horizontal (Scale Out)

Stratégies PostgreSQL :
├─ Réplication en lecture (Read Replicas)
│   ├─ Primary : Écritures
│   └─ Standbys : Lectures seules
│   └─ Charge lectures distribuée
│
├─ Sharding applicatif
│   ├─ Données partitionnées par clé
│   └─ Ex: users_shard1, users_shard2, ...
│   └─ Application route vers bon shard
│
├─ Partitionnement PostgreSQL natif
│   ├─ Table partitionnée (range, list, hash)
│   └─ PostgreSQL gère automatiquement
│
└─ Solutions externes (Citus, Postgres-XL)
    └─ PostgreSQL distribué transparent

Exemple architecture scalable :

┌─────────────────────────────────────────┐
│          Load Balancer (HAProxy)        │
└────────────┬────────────────────────────┘
             │
     ┌───────┴───────┐
     │               │
┌────▼─────┐   ┌─────▼────┐
│ Primary  │   │ Primary  │
│ (Write)  │   │ (Write)  │
│ Shard 1  │   │ Shard 2  │
└────┬─────┘   └────┬─────┘
     │              │
  ┌──┴───┐       ┌──┴───┐
  │      │       │      │
┌─▼──┐ ┌─▼──┐  ┌─▼──┐ ┌─▼──┐
│S1  │ │S2  │  │S3  │ │S4  │
│(R) │ │(R) │  │(R) │ │(R) │
└────┘ └────┘  └────┘ └────┘
Standbys Read  Standbys Read

Capacité :
├─ Écritures : 2× (2 shards)
├─ Lectures : 6× (2 shards × 3 replicas)
└─ Tolérance panne : HA sur chaque shard

4. Sécurité (Security)

Définition : Le système protège les données contre accès non autorisé.

Sécurité = Defense in Depth (Défense en profondeur)
├─ Réseau : Firewall, VPN, segmentation
├─ Authentification : Qui êtes-vous ?
├─ Autorisation : Que pouvez-vous faire ?
├─ Chiffrement : Transit (TLS) + Repos (encryption-at-rest)
├─ Audit : Logs, traçabilité
└─ Conformité : RGPD, PCI-DSS, HIPAA, etc.

Couches de sécurité PostgreSQL :

Niveau Réseau

┌─────────────────────────────────────┐
│ Internet (Zone non-fiable)          │
└──────────────┬──────────────────────┘
               │
        ┌──────▼──────┐
        │  Firewall   │ ← Port 5432 fermé publiquement
        └──────┬──────┘
               │
┌──────────────▼──────────────────────┐
│ DMZ (Bastion, VPN)                  │
└──────────────┬──────────────────────┘
               │
        ┌──────▼──────┐
        │  Firewall   │ ← Règles strictes
        └──────┬──────┘
               │
┌──────────────▼──────────────────────┐
│ Zone Privée (PostgreSQL)            │
│ - Accès uniquement réseau interne   │
│ - IP whitelist                      │
└─────────────────────────────────────┘

Niveau PostgreSQL

pg_hba.conf (Host-Based Authentication) :
├─ Définit qui peut se connecter depuis où
├─ Méthode : scram-sha-256 (PG 18 recommandé)
│   └─ Fini md5 (déprécié, faible)
└─ OAuth 2.0 (PG 18 nouveau)
    └─ Intégration SSO moderne

Autorisations (GRANT/REVOKE) :
├─ Principe moindre privilège
├─ Rôles granulaires
└─ Row-Level Security (RLS)
    └─ Filtrage lignes par utilisateur

Chiffrement

En Transit (TLS/SSL) :
├─ Force SSL obligatoire (pg_hba.conf)
├─ Certificats clients (authentification mutuelle)
└─ TLS 1.3 (PG 18 améliore configuration)

Au Repos (Encryption-at-rest) :
├─ Transparent Data Encryption (TDE)
├─ Chiffrement filesystem (LUKS, BitLocker)
├─ Chiffrement colonnes sensibles (pgcrypto)
└─ Data Checksums activés (PG 18 défaut)

Audit et Conformité

Logs PostgreSQL :
├─ log_connections, log_disconnections
├─ log_statement (DDL, MOD, ALL)
├─ Audit pgAudit (extension)
└─ Centralisation logs (Syslog, ELK)

RGPD :
├─ Droit oubli (DELETE/ANONYMIZE)
├─ Portabilité données
├─ Traçabilité accès
└─ Chiffrement données personnelles

5. Observabilité (Observability)

Définition : Comprendre ce qui se passe dans le système à tout moment.

Observabilité = 3 Piliers
├─ Logs : Événements discrets (erreurs, warnings)
├─ Métriques : Mesures quantitatives (CPU, requêtes/sec)
└─ Traces : Parcours requêtes (distributed tracing)

Monitoring PostgreSQL

Métriques Vitales

Performance :
├─ Requêtes/seconde (transactions rate)
├─ Latence moyenne/p95/p99
├─ Cache hit ratio (>99% idéal)
├─ Temps lock (deadlocks)
└─ Connexions actives vs max

Santé Système :
├─ CPU utilization (< 80%)
├─ RAM usage
├─ I/O wait (< 10%)
├─ Disk space (alerte < 20% libre)
└─ Réplication lag (si HA)

PostgreSQL Spécifique :
├─ Autovacuum running
├─ Table bloat
├─ Index usage
├─ WAL generation
└─ XID wraparound distance

Stack Monitoring Moderne

┌─────────────────────────────────────────┐
│         PostgreSQL Instance(s)          │
│  - pg_stat_statements                   │
│  - postgres_exporter (métriques)        │
└────────────┬────────────────────────────┘
             │
             ↓ Scrape métriques
┌─────────────────────────────────────────┐
│          Prometheus                     │
│  - Time-series database                 │
│  - Alerting rules                       │
└────────────┬────────────────────────────┘
             │
             ↓ Visualisation
┌─────────────────────────────────────────┐
│           Grafana                       │
│  - Dashboards                           │
│  - Graphs, heatmaps                     │
└─────────────────────────────────────────┘
             │
             ↓ Alertes
┌────────────────────────────────────────────┐
│        AlertManager                        │
│  - Notifications (Email, Slack, PagerDuty) │
│  - Escalade astreintes                     │
└────────────────────────────────────────────┘

Alertes Critiques à Configurer

Must-have alerts :
├─ PostgreSQL down (détection < 1 min)
├─ Réplication lag > seuil (ex: 1GB)
├─ Connexions > 80% max_connections
├─ Disk space < 20%
├─ Cache hit ratio < 95%
├─ Deadlocks détectés
├─ Autovacuum bloqué > 1h
├─ XID wraparound risk
└─ Backup failed

6. Maintenabilité (Maintainability)

Définition : Facilité à faire évoluer, réparer et opérer le système.

Maintenabilité =
├─ Documentation : Runbooks, procédures
├─ Automatisation : Moins d'erreurs humaines
├─ Simplicité : Architecture compréhensible
├─ Standardisation : Configurations uniformes
└─ Testabilité : Validation changements

Documentation Essentielle

Runbooks Production :
├─ 📚 Architecture diagram
├─ 📚 Procédures démarrage/arrêt
├─ 📚 Procédures backup/restore
├─ 📚 Procédure failover (basculement HA)
├─ 📚 Troubleshooting courant
├─ 📚 Contacts astreintes
├─ 📚 Historique incidents (post-mortems)
└─ 📚 Configuration rationale (pourquoi ce paramètre)

Automatisation

Infrastructure as Code (IaC) :
├─ Terraform : Provisionning infra
├─ Ansible/Puppet/Chef : Configuration management
├─ GitOps : Git = source of truth
└─ CI/CD : Déploiements automatisés

Avantages :
✅ Reproductibilité (dev = staging = prod)
✅ Versionning (rollback facile)
✅ Review code (peer review)
✅ Moins erreurs manuelles

Gestion des Changements

Change Management Process :
1. Proposition changement (RFC - Request For Change)
2. Review équipe (impact, risques)
3. Test environnement staging
4. Validation automated tests
5. Approbation
6. Déploiement prod (fenêtre maintenance)
7. Validation post-déploiement
8. Rollback plan si problème

Les Phases du Cycle de Vie Production

Phase 1 : Pré-Production (Staging)

Objectif : Valider que le système est prêt pour la production.

Environnement Staging :
├─ Infrastructure identique à production
├─ Données anonymisées mais volumétrie réaliste
├─ Tests charge (load testing)
├─ Tests failover (chaos engineering)
├─ Validation procédures backup/restore
└─ Formation équipe ops

Checklist Pré-Production

Infrastructure :
☐ Serveurs provisionnés (bare metal / VM / K8s)
☐ Réseau configuré (firewall, load balancer)
☐ Stockage performant (IOPS validés)
☐ Haute disponibilité testée (failover < RTO)
☐ Backups automatisés et testés

PostgreSQL :
☐ Version 18 installée depuis dépôt officiel
☐ Configuration optimisée (shared_buffers, work_mem, etc.)
☐ Authentification sécurisée (scram-sha-256, TLS)
☐ Réplication configurée (streaming replication)
☐ Extensions installées (pg_stat_statements, etc.)

Sécurité :
☐ Firewall configuré (ports minimum)
☐ SSL/TLS activé et certificats valides
☐ Rôles et permissions configurés (moindre privilège)
☐ Row-Level Security si nécessaire
☐ Audit logs activés

Monitoring :
☐ Métriques collectées (Prometheus)
☐ Dashboards configurés (Grafana)
☐ Alertes critiques définies
☐ Logs centralisés (ELK, Loki)
☐ Astreintes configurées (PagerDuty)

Documentation :
☐ Architecture documentée
☐ Runbooks rédigés
☐ Procédures testées
☐ Contacts équipe à jour
☐ Escalade définie

Tests :
☐ Load testing passé (charge nominale + 50%)
☐ Failover testé (< 30 secondes)
☐ Backup/restore validé (< RPO/RTO)
☐ Chaos engineering (kill -9 PostgreSQL, etc.)
☐ Security audit (scan vulnérabilités)

Phase 2 : Go-Live (Mise en Production)

Objectif : Transition douce vers production.

Stratégies Go-Live :

Big Bang :
├─ Basculement total en une fois
├─ Downtime : quelques heures
├─ Risque : élevé
└─ Usage : Migrations simples

Blue/Green :
├─ Nouvelle infra (Green) en //
├─ Bascule trafic instantanée
├─ Rollback immédiat si problème
└─ Usage : E-commerce, SaaS

Canary :
├─ Déploiement progressif (1% → 10% → 100%)
├─ Validation par étapes
├─ Risque minimal
└─ Usage : Apps modernes, microservices

Rolling :
├─ Mise à jour serveur par serveur
├─ Zéro downtime
├─ Compatible HA
└─ Usage : Kubernetes, clusters

Jour J : Checklist

Avant basculement :
☐ Backup complet production actuelle
☐ Équipe complète disponible (Dev, Ops, DBA)
☐ Fenêtre de rollback définie
☐ Communication clients (si downtime)
☐ Monitoring intensif activé

Pendant basculement :
☐ Suivre procédure pas-à-pas
☐ Validation santé à chaque étape
☐ Logs analysés en temps réel
☐ Métriques surveillées
☐ Communication équipe continue

Après basculement :
☐ Validation fonctionnelle (smoke tests)
☐ Validation performances (latence, throughput)
☐ Monitoring intensif 24-48h
☐ Équipe en stand-by
☐ Post-mortem planifié (J+7)

Phase 3 : Run (Exploitation)

Objectif : Maintenir le service opérationnel.

Opérations Quotidiennes :
├─ Monitoring dashboards (matin)
├─ Review alertes nuit
├─ Vérification backups
├─ Analyse slow queries
├─ Suivi capacité (croissance)
└─ Incidents éventuels

Opérations Hebdomadaires :
├─ Test restore backup
├─ Review métriques semaine
├─ Analyse tendances (croissance, performance)
├─ Planning capacité
└─ Réunion équipe ops

Opérations Mensuelles :
├─ Maintenance PostgreSQL (VACUUM, REINDEX)
├─ Revue sécurité (CVE, patches)
├─ Audit performances
├─ Update documentation
└─ Post-mortems incidents

Gestion des Incidents

Niveaux de Criticité :

P0 - Critical (Production Down) :
├─ Service complètement indisponible
├─ Perte données en cours
├─ Impact : Tous utilisateurs
├─ Response Time : Immédiate (5 min)
└─ Exemple : PostgreSQL crash, datacenter down

P1 - High (Dégradation Majeure) :
├─ Service très dégradé
├─ Impact : Majorité utilisateurs
├─ Response Time : 30 minutes
└─ Exemple : Latence ×10, réplication cassée

P2 - Medium (Dégradation Partielle) :
├─ Fonctionnalité non-critique KO
├─ Impact : Minorité utilisateurs
├─ Response Time : 4 heures
└─ Exemple : Feature analytics down

P3 - Low (Problème Mineur) :
├─ Problème cosmétique
├─ Impact : Minimal
├─ Response Time : 24-48h
└─ Exemple : Message erreur confus

Procédure Incident P0

1. DÉTECTION (0-5 min)
   └─ Alerting automatique ou report user

2. COMMUNICATION (5-10 min)
   ├─ Équipe technique : Slack/PagerDuty
   ├─ Management : Email/SMS
   └─ Clients : Status page

3. INVESTIGATION (10-30 min)
   ├─ Logs PostgreSQL
   ├─ Métriques systèmes
   ├─ Événements récents (déploiements)
   └─ Hypothèses

4. MITIGATION (30-60 min)
   ├─ Rollback si déploiement récent
   ├─ Failover si Primary down
   ├─ Scale up si saturation ressources
   └─ Workaround temporaire

5. RÉSOLUTION (variable)
   ├─ Fix définitif
   ├─ Tests validation
   └─ Déploiement fix

6. POST-MORTEM (J+7)
   ├─ Timeline détaillée
   ├─ Root cause analysis
   ├─ Actions correctives
   └─ Partage learnings équipe

Phase 4 : Évolution (Growth)

Objectif : Faire évoluer le système avec les besoins.

Signaux de Croissance :
├─ Charge croissante (+ utilisateurs)
├─ Nouvelles fonctionnalités (+ complexité)
├─ Nouveaux marchés (+ régions)
└─ Nouvelles réglementations (+ contraintes)

Planning de Capacité

Monitoring Tendances (Capacity Planning) :

Données :
├─ Taille base : 500 GB → 600 GB/mois (+20%)
├─ Projection 12 mois : 500 × 1.2^12 = 4.5 TB
└─ Action : Planifier upgrade stockage

Connexions :
├─ Pic actuel : 150/200 max_connections (75%)
├─ Croissance : +10%/mois
├─ Action : Prévoir connection pooling (PgBouncer)

CPU :
├─ Usage moyen : 60%, pics à 85%
├─ Croissance charge : +15%/trimestre
└─ Action : Planifier scale-up dans 6 mois

Stratégies Évolution :
1. Scale Vertical (plus puissant)
2. Scale Horizontal (read replicas)
3. Optimisation (index, requêtes)
4. Archivage (données anciennes)
5. Sharding (si nécessaire)

Les Rôles et Responsabilités

Équipe Production PostgreSQL

Petite Organisation (1-10 personnes)

Dev Full-Stack :
├─ Développe application
├─ Gère PostgreSQL (création schémas)
├─ Déploiements
└─ Astreintes (rotation)

Idéal : 1 personne référente PostgreSQL

Moyenne Organisation (10-50 personnes)

Développeurs :
├─ Développent application
└─ Créent migrations schémas

DevOps / SRE :
├─ Infrastructure PostgreSQL
├─ Monitoring, alerting
├─ Backups, HA
└─ Astreintes (rotation)

DBA (optionnel, temps partiel) :
├─ Optimisations performances
└─ Support requêtes complexes

Grande Organisation (50+ personnes)

Développeurs :
└─ Développent application

Platform Engineering :
├─ Infrastructure as Code
├─ Kubernetes / VMs
└─ Tooling interne

SRE (Site Reliability Engineering) :
├─ Reliability systems
├─ Incident response
├─ Capacity planning
└─ Astreintes (équipes dédiées)

DBA (Database Administrator) :
├─ Optimisations avancées
├─ Schema design reviews
├─ Performance tuning
├─ Migrations complexes
└─ Consultant interne

Security Team :
├─ Audits sécurité
├─ Compliance
└─ Gestion accès

Vue d'Ensemble du Chapitre 19

Ce chapitre 19 "PostgreSQL en Production" est structuré en plusieurs sections clés qui couvrent tous les aspects de la mise en production :

19. PostgreSQL en Production
│
├─ 19.1. Stratégies de déploiement
│   ├─ 19.1.1. Bare Metal
│   ├─ 19.1.2. Virtual Machines
│   ├─ 19.1.3. Conteneurs (Docker, Podman)
│   └─ 19.1.4. Kubernetes (StatefulSets, Operators)
│
├─ 19.2. PostgreSQL dans le Cloud
│   ├─ AWS RDS et Aurora PostgreSQL
│   ├─ Azure Database for PostgreSQL
│   ├─ Google Cloud SQL et AlloyDB
│   └─ Managed vs Self-Hosted : Trade-offs
│
├─ 19.3. Migrations majeures
│   ├─ pg_upgrade amélioré (PG 18)
│   ├─ Stratégies Blue/Green
│   └─ Tests et validation
│
├─ 19.4. Troubleshooting et Crises
│   ├─ Diagnostic verrous
│   ├─ Saturation ressources
│   ├─ Transaction Wraparound
│   ├─ Corruption données
│   ├─ Slow queries tuning
│   └─ Connection storms
│
├─ 19.5. Disaster Recovery (DR)
│   ├─ RTO et RPO : Définir objectifs
│   ├─ Tests restauration
│   └─ Géo-réplication Multi-Region
│
└─ 19.6. Checklist Mise en Production
    ├─ Hardening sécurité
    ├─ Configuration optimale
    ├─ Monitoring et alerting
    ├─ Backup et DR
    └─ Documentation runbooks

Parcours de Lecture Recommandé

Pour un Débutant :

  1. Lire cette introduction (comprendre enjeux)
  2. 19.1 Stratégies de déploiement (choisir approche)
  3. 19.6 Checklist (valider setup)
  4. Revenir sections spécifiques selon besoins

Pour un DevOps :

  1. 19.1 Stratégies (architecture)
  2. 19.2 Cloud (si applicable)
  3. 19.4 Troubleshooting (résolution incidents)
  4. 19.5 DR (haute disponibilité)

Pour un DBA :

  1. 19.3 Migrations (upgrades)
  2. 19.4 Troubleshooting (performance)
  3. 19.1.1 Bare Metal (tuning avancé)
  4. 19.5 DR (PITR, backups)

Pour une Migration :

  1. Cette introduction (contexte)
  2. 19.1 (comprendre options cibles)
  3. 19.3 Migrations (procédures)
  4. 19.4 Troubleshooting (anticiper problèmes)

PostgreSQL 18 : Améliorations pour la Production

Les nouveautés de PostgreSQL 18 facilitent et optimisent la mise en production :

1. I/O Asynchrone (Performance)

Impact Production :
├─ Gain performances : jusqu'à 3× sur NVMe
├─ Meilleure utilisation hardware moderne
├─ Latence réduite
└─ Throughput augmenté

Configuration :  
io_method = 'worker'  # ou 'io_uring' sur Linux  
io_async_workers = 16  

2. Améliorations pg_upgrade (Migrations)

Nouveautés PG 18 :
├─ Préservation statistiques (pas de re-ANALYZE)
├─ Option --swap (upgrade ultra-rapide)
├─ Vérifications parallèles (--jobs)
└─ Downtime réduit drastiquement

Simplifie :
└─ Migrations majeures 17 → 18

3. OAuth 2.0 (Sécurité)

Authentification moderne :
├─ Intégration SSO entreprise
├─ Pas de gestion mots de passe PostgreSQL
├─ Révocation centralisée
└─ Audit facilité

Usage :
└─ Architectures cloud-native, microservices

4. Data Checksums par Défaut (Fiabilité)

Protection corruption :
├─ Activé par défaut à l'initdb
├─ Détection erreurs disque
├─ Alerte proactive corruption
└─ Améliore fiabilité production

Désactivation si besoin :
└─ initdb --no-data-checksums

5. Autovacuum Amélioré (Maintenabilité)

Gestion automatique améliorée :
├─ Ajustements dynamiques workers
├─ Nouveau paramètre max_threshold
├─ Moins d'interventions manuelles
└─ Performances maintenues automatiquement

Configuration :  
autovacuum_vacuum_max_threshold = 10000000  

6. Colonnes Virtuelles (Évolutivité)

Facilite évolutions schéma :
├─ Colonnes calculées sans stockage
├─ Migrations simplifiées
├─ Stockage optimisé
└─ Performances préservées

Exemple :  
ALTER TABLE users ADD COLUMN full_name TEXT  
  GENERATED ALWAYS AS (first_name || ' ' || last_name) VIRTUAL;

Les 10 Commandements PostgreSQL en Production

Mémento des Règles d'Or

1. Tu monitoreras sans relâche
   └─ Prometheus + Grafana + Alerting

2. Tu sauvegarderas automatiquement
   └─ Backups testés, multi-sites, PITR

3. Tu répliqueras pour la haute disponibilité
   └─ Primary + Standbys, failover < 30s

4. Tu sécuriseras strictement
   └─ TLS, scram-sha-256, moindre privilège

5. Tu optimiseras avant de scaler
   └─ Index, requêtes, configuration

6. Tu documenteras exhaustivement
   └─ Runbooks, procédures, architectures

7. Tu testeras en staging d'abord
   └─ Jamais de changement direct en prod

8. Tu automatiseras tout ce qui peut l'être
   └─ Infrastructure as Code, CI/CD

9. Tu planifieras la capacité
   └─ Monitoring tendances, anticipation

10. Tu apprendras de chaque incident
    └─ Post-mortems, amélioration continue

Métriques Clés de Succès Production

Indicateurs de Santé

Technique (SLI - Service Level Indicators)

Disponibilité :
└─ Uptime : 99.9%+ (< 8.76h downtime/an)

Performance :
├─ Latence p95 : < 100ms
├─ Latence p99 : < 500ms
└─ Throughput : > 1000 req/s

Fiabilité :
├─ Error rate : < 0.1%
├─ MTTR : < 30 minutes
└─ MTBF : > 30 jours

Qualité Données :
├─ Backup success rate : 100%
├─ Restore tested : 1/mois minimum
└─ Replication lag : < 10s

Business (SLO - Service Level Objectives)

Disponibilité Service :
└─ 99.9% (SLA client)

Temps Réponse :
└─ 95% requêtes < 200ms

Perte Données :
└─ RPO = 1 heure maximum

Temps Récupération :
└─ RTO = 4 heures maximum

Conclusion de l'Introduction

PostgreSQL en production n'est pas simplement une question d'installation. C'est un écosystème complet qui nécessite :

  • Architecture robuste : Choix infrastructure, HA, redondance
  • Configuration optimale : Tuning selon charge
  • Sécurité rigoureuse : Authentification, chiffrement, audit
  • Monitoring proactif : Métriques, alertes, logs
  • Procédures éprouvées : Backup, restore, failover, incident
  • Documentation complète : Runbooks, architecture, contacts
  • Équipe formée : Expertise PostgreSQL, DevOps, disponibilité
  • Amélioration continue : Post-mortems, optimisations

PostgreSQL 18 apporte des améliorations significatives pour la production :

  • I/O asynchrone (performances)
  • pg_upgrade facilité (migrations)
  • OAuth 2.0 (sécurité moderne)
  • Data checksums (fiabilité)
  • Autovacuum amélioré (automatisation)

Le chemin vers la production est un marathon, pas un sprint.

Commençons par choisir la stratégie de déploiement adaptée à votre contexte dans la section suivante : 19.1. Stratégies de déploiement...


⏭️ Stratégies de déploiement