PmaControl logo PmaControl
  • Accueil
  • PmaControl
    • Agents IA 13 agents on-premise
    • Nos offres Community, Cloud, On-Premise, Premium
    • Documentation Guides, API, architecture
    • Clients 28+ entreprises
    • FAQ 25 questions / 7 catégories
    Bases de données
    • MariaDB 30 articles
    • MySQL 10 articles
    • Galera Cluster 6 articles
    • MaxScale 3 articles
    • ProxySQL 2 articles
    • Amazon Aurora MySQL 0 article
    • Azure Database 0 article
    • ClickHouse 0 article
    • GCP CloudSQL 0 article
    • Percona Server 0 article
    • SingleStore 0 article
    • TiDB 0 article
    • Vitess 0 article
    Solutions
    • Support 24×7 Urgences MariaDB & MySQL
    • Observabilité SQL Monitoring, alertes, topologie
    • Haute disponibilité Réplication, failover, Galera
    • Disaster Recovery Backup, restore, RPO/RTO
    • Sécurité & conformité Audit, RGPD, SOC2
    • Migration & upgrade Zero downtime, pt-osc, gh-ost
  • Nos offres
  • Ressources
    • Documentation Guides techniques & API
    • FAQ 25 questions fréquentes
    • Témoignages Retours clients & cas d'usage
    • Blog Articles & insights
    • Roadmap Fonctionnalités à venir
    Domaines d'expertise
    • Observabilité SQL Monitoring, alertes, topologie Dot3
    • Haute disponibilité Réplication, failover, Galera
    • Sécurité & conformité Audit, RGPD, SOC2, ISO 27001
    • Disaster Recovery Backup, restore, RPO/RTO
    • Performance & optimisation Digests, EXPLAIN, tuning
    • Migration & upgrade Zero downtime, pt-osc
    Liens rapides
    • Wiki GitHub 26 pages — install, engine, plugins
    • Code source Repository GitHub officiel
    • Support 24×7 Urgences MariaDB & MySQL
    • Réserver une démo 30 min — architecture réelle
  • Support 24×7
  • Réserver une démo
Réserver une démo
🇫🇷 FR Français 🇬🇧 EN English 🇵🇱 PL Polski 🇷🇺 RU Русский 🇨🇳 ZH 中文
← Retour au blog

Galera : comprendre le Flow Control

Publié le 28 octobre 2024 Par Sylvain ARBAUDIE
galera mariadb flow-control clustering tuning
Partager X LinkedIn Facebook Email PDF
Galera : comprendre le Flow Control

Le problème fondamental

Dans un cluster Galera, tous les nœuds doivent appliquer les mêmes writesets dans le même ordre pour maintenir la cohérence. Mais tous les nœuds ne sont pas égaux : certains sont plus rapides (hardware récent, charge légère), d'autres plus lents (hardware ancien, requêtes lourdes).

Que se passe-t-il quand un nœud lent ne peut pas suivre le rythme des écritures ? Les writesets s'accumulent dans sa file d'attente de réception (recv queue). Si rien n'est fait, cette file grossit indéfiniment, consommant toute la mémoire, et le nœud finit par crasher ou par diverger du cluster.

Le Flow Control est le mécanisme qui empêche cette situation. C'est le frein à main du cluster : quand un nœud est débordé, il demande aux autres de ralentir.

Comment fonctionne le Flow Control

Le Flow Control repose sur un seuil simple : gcs.fc_limit.

Chaque nœud Galera maintient une file d'attente de réception (recv queue) qui stocke les writesets en attente d'application. Quand la taille de cette file dépasse gcs.fc_limit, le nœud envoie un message FC_PAUSE à tous les autres nœuds du cluster.

À réception de FC_PAUSE, les autres nœuds cessent d'envoyer de nouveaux writesets au nœud lent. Les écritures sur le cluster entier sont bloquées — c'est le prix de la cohérence synchrone.

Quand la recv queue du nœud lent redescend en dessous de gcs.fc_limit × gcs.fc_factor, le nœud envoie un message FC_CONTINUE et le cluster reprend son fonctionnement normal.

Les 5 variables wsrep critiques

Pour monitorer le Flow Control, cinq variables de statut sont essentielles :

SHOW GLOBAL STATUS WHERE Variable_name IN (
    'wsrep_local_recv_queue',
    'wsrep_local_recv_queue_avg',
    'wsrep_flow_control_paused',
    'wsrep_flow_control_paused_ns',
    'wsrep_flow_control_sent'
);

wsrep_local_recv_queue

Taille actuelle de la recv queue. En fonctionnement normal, cette valeur devrait être proche de 0. Si elle monte régulièrement au-dessus de gcs.fc_limit, le nœud est en difficulté.

wsrep_local_recv_queue_avg

Moyenne mobile de la recv queue. C'est l'indicateur le plus fiable pour détecter les tendances. Une moyenne au-dessus de 0,5 mérite investigation.

wsrep_flow_control_paused

Fraction du temps passé en Flow Control (entre 0 et 1). Si cette valeur dépasse 0,1 (10% du temps), le cluster a un problème de performance sérieux.

wsrep_flow_control_paused_ns

Temps total passé en Flow Control en nanosecondes. Utile pour calculer le temps absolu de pause sur une période.

wsrep_flow_control_sent

Nombre de messages FC_PAUSE envoyés par ce nœud. Si un seul nœud envoie la majorité des FC_PAUSE, c'est le goulot d'étranglement à traiter.

Les 6 paramètres de tuning

gcs.fc_limit

Le seuil de déclenchement du Flow Control. Valeur par défaut : 16. Augmenter cette valeur tolère plus de lag avant de déclencher le frein, mais augmente la consommation mémoire.

gcs.fc_factor

Le coefficient de reprise. Valeur par défaut : 0,5. Quand la recv queue redescend à fc_limit × fc_factor, le Flow Control est relâché. Avec un fc_limit de 100 et un fc_factor de 0,8, le FC se relâche à 80 writesets.

wsrep_slave_threads

Nombre de threads d'application des writesets. Plus de threads = application plus rapide des writesets reçus = recv queue qui se vide plus vite. Recommandation : 2 × nombre de cœurs CPU.

wsrep_cert_deps_distance

Distance moyenne de certification entre les transactions. Indique le parallélisme potentiel. Si cette valeur est élevée, augmenter wsrep_slave_threads aura un impact positif.

gcs.recv_q_hard_limit

Limite absolue de la recv queue en octets. Si dépassée, le nœud est avorté. C'est le dernier recours pour éviter un OOM. Recommandation : la moitié de la RAM + swap disponible.

gcs.max_throttle

Débit minimum garanti même en Flow Control (entre 0 et 1). La valeur par défaut de 0,25 signifie que même en FC, 25% du débit normal est maintenu. Mettre à 0 pour un arrêt complet en FC.

Recommandations d'experts

Après des années de gestion de clusters Galera en production, voici les recommandations consolidées :

Dimensionnement des slave threads

wsrep_slave_threads = 2 × CPU_CORES

Si votre serveur a 8 cœurs, commencez avec wsrep_slave_threads = 16. Surveillez wsrep_cert_deps_distance — si elle est inférieure au nombre de slave threads, réduisez.

fc_limit en fonction des slave threads

gcs.fc_limit = 5 × wsrep_slave_threads

Avec 16 slave threads, gcs.fc_limit = 80. Cela donne assez de marge aux threads pour travailler en parallèle sans déclencher le FC trop tôt.

fc_factor pour une reprise progressive

gcs.fc_factor = 0.8

Un fc_factor de 0,8 (au lieu du défaut 0,5) permet une reprise plus progressive du trafic, évitant les oscillations FC_PAUSE / FC_CONTINUE.

Hard limit pour la sécurité

gcs.recv_q_hard_limit = HALF_RAM_PLUS_SWAP

Sur un serveur avec 32 Go de RAM et 16 Go de swap, mettez gcs.recv_q_hard_limit = 24G. C'est le filet de sécurité contre les OOM.

Identifier le nœud problématique

Quand le Flow Control se déclenche fréquemment, il faut identifier le nœud lent :

-- Sur chaque nœud
SELECT @@hostname,
       VARIABLE_VALUE AS fc_sent
FROM information_schema.GLOBAL_STATUS
WHERE VARIABLE_NAME = 'wsrep_flow_control_sent';

Le nœud qui envoie le plus de FC_PAUSE est le goulot. Les causes habituelles :

  • Hardware inférieur : disques plus lents, moins de RAM
  • Requêtes lourdes : un ALTER TABLE ou un SELECT massif qui monopolise les ressources
  • Sauvegarde en cours : mariabackup/xtrabackup consomme beaucoup d'I/O
  • Charge applicative déséquilibrée : trop de lectures sur un nœud qui doit aussi appliquer les writesets

Conclusion

Le Flow Control est le gardien de la cohérence dans Galera. Comprendre son fonctionnement et ses paramètres est essentiel pour maintenir un cluster performant.

Les règles d'or : slave_threads = 2 × CPU, fc_limit = 5 × threads, fc_factor = 0.8, hard limit = moitié RAM + swap. Monitorez wsrep_flow_control_paused et réagissez dès que la valeur dépasse 10%.


Cet article a été initialement publié sur Medium.

Partager X LinkedIn Facebook Email PDF
← Retour au blog

Commentaires (0)

Aucun commentaire pour le moment.

Laisser un commentaire

PmaControl
+33 6 63 28 27 47 contact@pmacontrol.com
Mentions légales GitHub Contact
N'attendez pas l'incident pour comprendre votre architecture. © 2014-2026 PmaControl — 68Koncept