Documentation Patroni 4.1.5
[!AVERTISSEMENT]
Exécution de Patroni sur des systèmes à mémoire limitée avec Python 3.11+
Si vous exécutez Patroni sur un système avec des limites de mémoire strictes, par exemple avec vm.overcommit_memory=2 (recommandé pour PostgreSQL), et utilisez Python 3.11 ou une version ultérieure, vous pouvez observer un comportement inattendu :
- Patroni est en état sain
- PostgreSQL continue de s’exécuter
- L’API REST de Patroni devient inopérante
- Le système d’exploitation indique que Patroni écoute sur le port de l’API REST
- Les journaux de Patroni semblent normaux ; cependant, les messages suivants peuvent apparaître une fois :
Exception ignored in thread started by: <object repr() failed>,MemoryError - Les journaux du noyau peuvent contenir des messages tels que
not enough memory for the allocation
Ce comportement est dû à un bug dans Python 3.11+ . Sous des conditions de mémoire strictes, le démarrage d’un nouveau thread peut bloquer indéfiniment en l’absence de mémoire libre.
Solution recommandée
Les versions récentes de Patroni (4.1.1+, 4.0.8+) réduisent l’impact de ce problème en lançant tous les threads requis dès le démarrage, avant que le système ne soit soumis à une pression mémoire.
Recommandations supplémentaires (Linux, glibc)
Lors de l’exécution avec vm.overcommit_memory=2 (recommandé pour PostgreSQL), nous recommandons également de lancer Patroni avec les variables d’environnement suivantes configurées :
MALLOC_ARENA_MAX=1- réduit la quantité de mémoire virtuelle allouée par glibc aux applications multithreadéesPG_MALLOC_ARENA_MAX=- réinitialise la valeur deMALLOC_ARENA_MAXpour les processus PostgreSQL lancés par Patroni.
En outre, vous pouvez ajuster les paramètres de configuration suivants de Patroni :
thread_stack_size- taille de la pile utilisée par les threads lancés par Patroni. Réduire cette valeur diminue l’utilisation mémoire du processus Patroni. La valeur par défaut définie par Patroni est512kB. Augmentezthread_stack_sizesi Patroni subit des plantages liés à la pile ; sinon, la valeur par défaut est suffisante.thread_pool_size- taille du pool de threads utilisé par Patroni pour les tâches asynchrones et la communication API REST avec les autres membres lors des courses au leader ou des vérifications en mode d’urgence. La valeur par défaut est5, qui est suffisante pour les clusters à trois nœuds.restapi.thread_pool_size- taille du pool de threads utilisé pour traiter les requêtes API REST. La valeur par défaut est5, permettant jusqu’à cinq requêtes API REST en parallèle. Notez que les requêtes impliquant des requêtes SQL sont effectivement sérialisées, car une seule connexion à la base de données est utilisée, aussi l’augmentation de cette valeur ne procure généralement aucun avantage.
Patroni est un modèle de solutions PostgreSQL à haute disponibilité (HA) basé sur Python. Pour une accessibilité maximale, Patroni prend en charge une variété de magasins de configuration distribués, tels que ZooKeeper , etcd , Consul ou Kubernetes . Les ingénieurs base de données, les DBA, les ingénieurs DevOps et les SRE qui souhaitent déployer rapidement une solution PostgreSQL à haute disponibilité dans des datacenters — ou ailleurs — devraient y trouver un intérêt.
Nous appelons Patroni un « modèle » car il est loin d’être un système de réplication universel ou immédiatement utilisable. Il présente ses propres contraintes. À utiliser avec prudence. Il existe de nombreuses façons de mettre en œuvre une haute disponibilité avec PostgreSQL ; pour en consulter la liste, reportez-vous à la Documentation PostgreSQL .
Versions de PostgreSQL actuellement prises en charge : 9.3 à 18.
Remarque aux utilisateurs de Citus : À compter de la version 3.0, Patroni intègre harmonieusement l’extension de base de données Citus pour PostgreSQL. Veuillez consulter la page Prise en charge de Citus dans la documentation de Patroni pour plus d’informations sur l’utilisation de la haute disponibilité Patroni avec un cluster distribué Citus.
Remarque aux utilisateurs Kubernetes : Patroni peut s’exécuter nativement sur Kubernetes. Consultez le chapitre Kubernetes de la documentation Patroni.

Introduction à Patroni, démarrage rapide et concepts fondamentaux de haute disponibilité.
Instructions d’installation et de mise à jour de Patroni sur les plates-formes prises en charge.
Modèle de configuration Patroni, règles de priorité et outils de validation.
Référence des points d’extrémité de l’API REST de Patroni et de leurs comportements opérationnels.
Référence de la commande pour la configuration, la syntaxe et les sous-commandes de patronictl.
Flux de travail d’imagerie de réplique, d’amorçage et de création de réplique personnalisée.
Modes de réplication asynchrone et synchrone gérés par Patroni.
Configuration du cluster de secours, comportement et réplication depuis un primaire distant.
Intégration du watchdog et considérations sur le fencing pour les clusters Patroni.
Comportement du mode pause et reprise pour la gestion du cluster Patroni.
Comportement, exigences et précautions opérationnelles du mode de secours DCS.
Utilisation de Patroni avec les objets, étiquettes et la découverte de service Kubernetes.
Détails d’intégration Patroni pour les groupes coordinateur et worker Citus.
Procédure de conversion des données PostgreSQL existantes en cluster Patroni.
Intégration de Patroni avec des outils externes de sauvegarde et d’orchestration.
Considérations de sécurité pour DCS, l’API REST et la gestion des identifiants.
Modèles de haute disponibilité multi-centres de données avec réplication Patroni.
Questions fréquemment posées sur l’opération et le dépannage de Patroni.
Notes de version et historique des modifications de Patroni, par ordre chronologique.
Contribution au workflow, canaux de support et directives de développement.