Ansible Role : PostgreSQL HA

Plage de prix : 49,00 € à 1 499,00 €

Rôle Ansible pour déployer un cluster PostgreSQL Haute Disponibilité avec Repmgr, Keepalived (VIP), pgAudit et alertes Webhook. Bascule automatique, sécurité renforcée et compatible Debian 12/13 & Ubuntu 22.04/24.04

Description

 

🐘 Déployez un cluster PostgreSQL HA robuste et automatisé !

Le rôle Ansible postgres_ha déploie un cluster PostgreSQL Haute Disponibilité basé sur Patroni, etcd, et HAProxy. Bénéficiez d’un failover automatique, d’une élection de leader fiable, et d’un routage intelligent des connexions en quelques minutes.

 

✨ Fonctionnalités Clés

  • 🔄 Failover Automatique : Patroni détecte les pannes et promeut automatiquement un replica en primary en quelques secondes.
  • 🗳️ Consensus Distribué (etcd) : Élection du leader fiable sans split-brain grâce au quorum etcd.
  • ⚖️ Load Balancing Intelligent : HAProxy route les écritures vers le primary (port 5000) et les lectures vers les replicas (port 5001).
  • 🐘 PostgreSQL 17 : Dernière version stable avec toutes les optimisations modernes.
  • 🔧 Modes Flexibles : etcd et HAProxy peuvent être colocalisés (même nœud) ou sur des nœuds dédiés.
  • 📊 Monitoring Intégré : API REST Patroni pour les health checks et interface stats HAProxy.
  • 🐛 Mode Debug : Variable debug_mode pour afficher les logs détaillés lors du dépannage.
  • 💻 Large Compatibilité d’OS : Déployez sur Debian 12/13 et Ubuntu 22.04/24.04 LTS.
  • 🔒 Réplication Synchrone : Option pour garantir zéro perte de données (RPO=0).
  • 🛠️ Outils CLI Puissants : patronictl pour gérer switchover, failover, pause/resume.

 

🏗️ Architecture Haute Disponibilité

Architecture PostgreSQL HA : Applications → HAProxy (5000 R/W, 5001 R/O) → PostgreSQL Primary + Replicas avec Patroni → etcd pour le consensus

 


 

⚙️ Configuration & Usage

 

Prérequis
  • Système d’exploitation : Debian 12/13 ou Ubuntu 22.04/24.04.
  • Ansible : Installé sur votre machine de contrôle.
  • Minimum 3 nœuds : Pour assurer le quorum etcd et la haute disponibilité.
  • Privilèges : Un utilisateur avec des droits sudo sur les serveurs cibles (become: true dans votre playbook).

 

Exemple de Playbook (votre_playbook.yml)
---
- hosts: postgres_cluster
  become: true

  vars:
    # =============================================================================
    # VERSIONS
    # =============================================================================
    pg_version: "17"
    patroni_version: "4.0.4"
    etcd_version: "3.5.17"

    # =============================================================================
    # CONFIGURATION CLUSTER
    # =============================================================================
    # Nom du cluster Patroni (doit être unique)
    patroni_cluster_name: "postgres-cluster"

    # =============================================================================
    # ARCHITECTURE MODE
    # =============================================================================
    # Mode de déploiement etcd:
    #   - "colocated" : etcd installé sur les mêmes nœuds que PostgreSQL
    #   - "dedicated" : etcd sur des nœuds séparés (nécessite le groupe 'etcd_nodes')
    etcd_deployment_mode: "colocated"

    # Mode de déploiement HAProxy:
    #   - "colocated" : HAProxy installé sur les mêmes nœuds que PostgreSQL
    #   - "dedicated" : HAProxy sur des nœuds séparés (nécessite le groupe 'haproxy_nodes')
    haproxy_deployment_mode: "colocated"

    # =============================================================================
    # DEBUG MODE
    # =============================================================================
    # Activer pour voir les logs détaillés des services (dépannage)
    debug_mode: false

    # =============================================================================
    # CREDENTIALS (À DÉFINIR DANS UN VAULT!)
    # =============================================================================
    pg_superuser_password: "{{ vault_pg_superuser_password }}"
    pg_replication_password: "{{ vault_pg_replication_password }}"
    pg_rewind_password: "{{ vault_pg_rewind_password }}"

    # =============================================================================
    # PATRONI CONFIGURATION
    # =============================================================================
    # Mode synchrone (true = plus sûr, RPO=0, moins performant)
    patroni_synchronous_mode: false

    # =============================================================================
    # HAPROXY PORTS
    # =============================================================================
    haproxy_primary_port: 5000    # Read-Write (Primary only)
    haproxy_replica_port: 5001    # Read-Only (Replicas)
    haproxy_stats_port: 7000      # Stats web interface

  roles:
    - role: devops_store.postgres_ha

 

Exemple d’Inventaire (votre_inventaire)
[postgres_cluster]
pg-node-1 ansible_host=192.168.1.10
pg-node-2 ansible_host=192.168.1.11
pg-node-3 ansible_host=192.168.1.12

[postgres_cluster:vars]
ansible_user=ubuntu
ansible_ssh_private_key_file=~/.ssh/id_rsa

 

Lancement
ansible-playbook -i votre_inventaire votre_playbook.yml

 


 

🔬 Détails Techniques

  • Patroni : Orchestre PostgreSQL, gère la réplication streaming, le failover automatique et la récupération via pg_rewind.
  • etcd : Distributed Consensus Store pour l’élection du leader. Binaires téléchargés depuis les releases GitHub. Minimum 3 nœuds pour tolérer la perte d’un nœud.
  • HAProxy : Load balancer TCP utilisant l’API REST Patroni (/primary, /replica) pour router les connexions.
  • Idempotence Garantie : Vous pouvez exécuter ce rôle plusieurs fois en toute sécurité. Patroni gère l’initialisation de PostgreSQL.
  • Déploiement Parallèle : Le rôle gère automatiquement la formation du cluster etcd et utilise throttle: 1 pour l’initialisation séquentielle de Patroni.
  • Tests Complets Inclus : Suite de tests Molecule fournie pour les 4 OS supportés.

 

Ports Utilisés
Port Service Description
5432 PostgreSQL Base de données
8008 Patroni REST API Health checks
2379 etcd client Communication client
2380 etcd peer Communication inter-nœuds
5000 HAProxy Read-Write (Primary)
5001 HAProxy Read-Only (Replicas)
7000 HAProxy Stats Interface web

 


 

📚 Documentation Opérationnelle

Ce rôle inclut une documentation complète dans le dossier docs/ :

  • Guide Jour 1 (docs/day1-guide.md) : État cluster Patroni, connexion HAProxy, vérification réplication, commandes de base.
  • Runbook Jour 2+ (docs/day2-runbook.md) : Switchover/failover, gestion des nœuds, backup PITR, troubleshooting etcd, scénarios catastrophe et récupération complète du cluster.
    👀 Voir la table des matières complète
    1. 🔧 Troubleshooting Courant : Patroni ne démarre pas, split-brain, réplication cassée, HAProxy
    2. 🔄 Switchover et Failover : Switchover planifié, failover forcé, pause/resume
    3. 🖥️ Gestion des Nœuds : Ajout/retrait de nœuds, réinitialisation, maintenance
    4. 💾 Sauvegarde et Restauration : pg_dump, pg_basebackup, PITR, automatisation cron
    5. 🔧 Maintenance PostgreSQL : VACUUM, ANALYZE, REINDEX, configuration runtime
    6. 🔑 Troubleshooting etcd : Espace saturé, réinitialisation membre, restauration snapshot
    7. 🔴 Scénarios Catastrophe : Perte leader, perte quorum etcd, corruption données, perte cluster
    8. 📊 Monitoring et Alertes : Métriques clés, alertes Prometheus, scripts health check
    9. 🔄 Upgrade et Migration : Mise à jour Patroni, upgrade PostgreSQL

 


 

📦 Détails du Produit

  • Nom du rôle : devops_store.postgres_ha
  • Cible OS : Debian (12/13), Ubuntu (22.04/24.04)
  • Composants déployés : PostgreSQL 17, Patroni 4.0.4, etcd 3.5.17, HAProxy
  • Dépendances : Aucune

 

🛡️ Garantie de Qualité et Support

Trois durées de garantie sont disponibles : 3 mois, 1 an et 5 ans. Ces garanties incluent le support technique et les mises à jour du code pour les plateformes supportées.

N.B. : Le support du rôle se base sur le cycle de vie des OS pour lesquels il a été développé. Cela signifie que si un OS atteint sa date d’EOL durant la période de garantie, le support et les mises à jour du rôle s’arrêtent pour cet OS. A contrario, si une nouvelle version majeure d’un OS est publiée durant la période de garantie, le support et les mises à jour du rôle seront assurés pour cette nouvelle version.

 

🔑 Licence d’Utilisation

Trois niveaux de licence sont disponibles :

  • Standard : Usage pour les projets internes de l’acheteur. Pas de redistribution, pas d’utilisation pour des clients tiers. Idéale pour les indépendants, PME gérant leur propre infra, passionnés.
  • Entreprise : Inclut tous les droits Standard et permet d’utiliser le rôle pour configurer les serveurs de clients finaux. Droit d’intégration dans des produits et services vendus. Idéale pour les ESN, Agences Web, Infogérants (MSP), Consultants DevOps.
  • Marque Blanche : Inclut tous les droits Entreprise avec l’autorisation exclusive de supprimer les mentions de l’auteur (attribution) pour présenter le code comme votre propre technologie. Idéale pour les grands Infogérants et éditeurs exigeant une image de marque unifiée sans trace de tiers.

Informations complémentaires

Licence

Standard (Usage interne seulement), Entreprise (Usage interne et commercial), Marque Blanche (Revente sans attribution)

Support et mises à jour

3 mois, 1 an, 5 ans

Produits liés