Haute disponibilité avec Patroni

Workshop Patroni

Franck BOUDEHEN, Thibaud WALKOWIAK

février 2024

Introduction

Objectif de l’atelier

  • Mettre en œuvre un cluster Patroni
  • Gérer des bascules

Déroulé de l’atelier

  • Durée : 3 heures

  • Concepts

  • Travaux pratiques

    • Mise en place
    • Installation et configuration des services
    • Construction d’un agrégat à bascule automatique
    • Création d’incidents

Prérequis de l’atelier

  • Un terminal
  • Une VM Debian Bookworm ou équivalente
  • Compétences Linux et PostgreSQL

Concepts

  • Arbitrage par un quorum : DCS etcd
  • Service PostgreSQL : désactivé
  • Contrôle complet par Patroni

DCS : etcd

  • Arbitre en cas de bascules
  • Stockage distribué de la configuration
  • Jeton leader (etcd)
  • Instance primaire PostgreSQL

Service PostgreSQL et Patroni

  • Service PostgreSQL à désactiver

Mise en place

Infrastructure

  • Connexion à la VM
  • 7 Conteneurs

Vous disposez d’une machine virtuelle dédiée dans laquelle nous avons construit 7 conteneurs LXC :

  • 3 nœuds etcd
  • 3 nœuds Patroni
  • 1 nœud pgBackRest

Connexion à votre machine virtuelle

  • un point d’entrée commun (> tableau)

  • un port individuellement attribué : 22XX

  • un utilisateur linux : dalibo

  • un mot de passe (> tableau)

  • ssh -p 22XX dalibo@<IP_COMMUNE>

Playbook Ansible

Infrastructure clef en main par playbooks Ansible à cette adresse :

https://public.dalibo.com/exports/formation/workshops/fr/patroni_2024/playbook/etcd-patroni

3 fichiers YAML principaux :

  • inventory.yml : inventaire des machines
  • setup.2.yml : playbook principal
  • teardown.yml : playbook de destruction

L’infrastructure complète est déjà créée.

La commande pour recréer l’infrastructure sur votre VM est :

ansible-playbook -i inventory.yml  setup.2.yml

Installation d’etcd

  • Installation des paquets
  • Configuration
  • Démarrage du service
  • Vérification

Installation des paquets

  • etcd-server
  • iputils-ping
  • vim

Configuration du service etcd

  • Fichier : /etc/default/etcd

Démarrage du service

  • Réinitialisation des bases etcd
  • Démarrage du service etcd
  • systemctl start etcd

Installation de PostgreSQL / Patroni

  • Installation
    • PostgreSQL
    • Patroni
    • pgBackRest

Configuration de Patroni

Sur tous les nœuds

  • Configuration du DCS
    • /etc/patroni/dcs.yml
  • Génération de la configuration
    • pg_createconfig_patroni 16 main

Création de l’agrégat

  • Démarrage du primaire
  • Création de l’utilisateur de réplication
  • Suppression des instances secondaires
  • Démarrage des instances secondaires

Vérifications

  • Test de bascule manuelle vers chaque nœud

Création d’incidents

  • Perte totale du DCS
  • Freeze du nœud primaire Patroni
  • Bascule manuelle

Perte totale du DCS

  • Perte de tous les nœuds etcd

Perte du nœud primaire Patroni

Perte du primaire courant

Modification de la configuration

  • patronictl edit-config

Sauvegardes

  • Configuration
  • Détermination du primaire (facultatif)
    • Installation d’etcd-client
  • Archivage
  • Sauvegarde

Références