Généralités sur la Haute Disponibilité

Module R50

Dalibo SCOP

24.09

29 août 2024

Sur ce document

Formation Module R50
Titre Généralités sur la Haute Disponibilité
Révision 24.09
PDF https://dali.bo/r50_pdf
EPUB https://dali.bo/r50_epub
HTML https://dali.bo/r50_html
Slides https://dali.bo/r50_slides

Licence Creative Commons CC-BY-NC-SA

Cette formation est sous licence CC-BY-NC-SA. Vous êtes libre de la redistribuer et/ou modifier aux conditions suivantes :

  • Paternité
  • Pas d’utilisation commerciale
  • Partage des conditions initiales à l’identique

Marques déposées

PostgreSQL® Postgres® et le logo Slonik sont des marques déposées par PostgreSQL Community Association of Canada.

Versions de PostgreSQL couvertes

Ce document ne couvre que les versions supportées de PostgreSQL au moment de sa rédaction, soit les versions 12 à 16.

Généralités sur la haute disponibilité

Introduction

  • Définition de « Haute Disponibilité »
  • Contraintes à définir
  • Contraintes techniques
  • Solutions existantes

Définitions

  • RTO / RPO
  • Haute Disponibilité de données / de service

RTO / RPO

Haute disponibilité de service

  • Continuité d’activité malgré incident
  • Redondance à tous les niveaux
    • réseaux, stockage, serveurs, administrateurs…
    • réplication des données
  • Automatisation des bascules

Haute disponibilité des données

  • Perte faible ou nulle de données après incident
    • redonder les données
    • garantir les écritures à plusieurs endroits
  • Contradictoire avec la haute disponibilité de service
    • arbitrage possible avec une complexité et un budget plus importants

Sauvegardes

  • Composant déjà présent
  • Travail d’optimisation à effectuer
  • RTO de quelques minutes possibles
  • RPO de quelques minutes (secondes ?) facilement
  • Et ne pas oublier de tester

Sauvegarde PITR

  • Sauvegarde incrémentale binaire
  • Optimiser la sauvegarde complète
  • Optimiser la restauration complète (RTO)
  • Ajuster l’archivage au RPO désiré

PITR et redondance par réplication physique

Outils PITR

  • Barman
  • pgBackRest

Bilan PITR

  • Utiliser un outil libre issu de l’écosystème PostgreSQL
  • Fiabilise l’architecture
  • Facilite la mise en œuvre et l’administration
  • Couvre déjà certains besoins de disponibilité
  • Nécessite une intervention humaine
  • Nécessite une supervision fiable

Réplication physique

  • Réplique les écritures via les journaux de transactions
  • Entretient une ou plusieurs instances clones
  • Intégrée à PostgreSQL
  • Facilité de mise en œuvre
  • Réduit RPO/RTO par rapport au PITR
  • Plus de matériel
  • Architecture et maintenance plus complexes
  • Haute disponibilité des données

Réplication et RPO

  • Réplication asynchrone ou synchrone
  • Nécessite un réseau très fiable et performant
  • Asynchrone : RPO dépendant du volume d’écriture
    • RPO < 1s hors maintenance et chargement en masse
  • Synchrone : RPO = 0
    • 2 secondaires minimum
    • impact sur les performances !

Réplication et RTO

  • Bascule manuelle
  • Promotion d’une instance en quelques secondes

Bilan sur la réplication

  • 0 ≤ RPO < PITR
  • RTO = prise en charge + 30s
  • Simple à mettre en œuvre
  • Investissement financier et humain plus important

Bascule automatisée

  • Détection d’anomalie et bascule automatique
  • HA de service :
    • réduit le temps de prise en charge
  • Plusieurs solutions en fonction du besoin
  • Beaucoup de contraintes !

Prise de décision

  • La détection d’anomalie est naïve !
  • L’architecture doit pouvoir éviter un split-brain
  • Solutions éprouvées :
    • fencing
    • quorum
    • watchdog
    • SBD
  • Solutions le plus souvent complémentaires.

Mécanique de fencing

  • Isole un serveur/ressource
    • électriquement
    • arrêt via IPMI, hyperviseur
    • coupe les réseaux
  • Utile :
    • pour un serveur muet ou fantôme (rogue node)
    • lorsque l’arrêt d’une ressource est perturbé
  • Déclenché depuis un des nœuds du cluster
  • Nécessite une gestion fine des droits
  • Supporté par Pacemaker, embryonnaire dans Patroni

Mécanique d’un Quorum

  • Chaque serveur possède un ou plusieurs votes
  • Utile en cas de partition réseau
  • La partition réseau qui a le plus de votes détient le quorum
  • La partition qui détient le quorum peut héberger les ressources
  • La partition sans quorum doit arrêter toute ressource
  • Attention au retour d’une instance dans le cluster
  • Supporté par Pacemaker et Patroni (via DCS)

Mécanique du watchdog

  • Équipement matériel intégré partout
    • au pire : softdog (moins fiable)
  • Compte à rebours avant redémarrage complet du serveur
  • À ré-armer par un composant applicatif du serveur, périodiquement
  • Permet de déclencher du self-fencing rapide et fiable
    • meilleure réactivité de l’agrégat
  • « Fencing du pauvre », complémentaire du quorum
  • Patroni et Pacemaker : oui

Storage Base Death

  • L’une des méthodes historique de fencing
  • Un ou plusieurs disques partagés
    • où les nœuds s’échangent des messages
  • Un watchdog par nœud
  • Message poison pill pour demander à un nœud distant de s’auto-fencer
  • Self-fencing en cas de perte d’accès aux disques…
    • …si Pacemaker confirme lui aussi une anomalie
  • Patroni : émulé

Bilan des solutions anti-split-brain

À minima, une architecture fiable peut se composer au choix :

  • fencing actif ou SBD
  • 1 watchdog par serveur + quorum
  • L’idéal : tous les configurer
  • Désactiver les services au démarrage

Implication et risques de la bascule automatique

  • Un collègue peu loquace de plus : un automate
    • et tout doit passer à présent par lui
  • Complexification de l’administration
    • Formation + Tests + Documentation + Communication
    • sinon : erreurs humaines plus fréquentes
    • au final : est-ce plus fiable ?
  • Opérations post-bascule toujours à faire

Reconstruction automatique des instances

  • mécanisme supporté par Patroni
  • risque des:
    • perte d’informations
    • sur-incident
  • préférer une reconstruction manuelle

Questions

N’hésitez pas, c’est le moment !


  1. Distributed Control System↩︎