Actuellement en test : le code GitHub sera ouvert une fois terminé.

Procédure de redémarrage progressif

Il n'y a qu'un principe fondamental : une majorité doit toujours rester active. Avec 3 nœuds, vous ne pouvez en descendre qu'1 à la fois ; avec 5 nœuds, jusqu'à 2.

  1. Redémarrez d'abord les suiveurs (nœuds non-leader), un par un — le leader continue de servir pendant ce temps. Confirmez que chaque nœud redémarré a rattrapé son retard via la réplication du journal des pairs ou un snapshot avant de passer au suivant.
  2. Enfin, arrêtez le leader. Les nœuds restants détectent la perte du battement de cœur et élisent un nouveau leader en 0,5 à 1 seconde. Les requêtes clients pendant cette fenêtre reçoivent E no_leader, mais les clients officiels les réessaient de façon transparente, si bien que l'application ne voit qu'un bref délai.
  3. Remontez l'ancien leader — il rejoint le cluster en tant que suiveur et rattrape son retard (il ne récupère pas automatiquement le rôle de leader).

L'état des verrous est préservé tout du long tant qu'une majorité reste active — les verrous octroyés ou libérés pendant le redémarrage passent eux aussi par un commit, rien n'est donc perdu.

Flux (avec 3 nœuds)

Leader
Suiveur 1
Suiveur 2
① redémarre le suiveur 1 — le leader continue de servir
rattrape via réplication du journal/snapshot
② une fois rattrapé, redémarre le suiveur 2
rattrape via réplication du journal
③ redémarre le leader en dernier
Vote → nouveau leader élu en 0,5-1 s
l'ancien leader rejoint en tant que suiveur et rattrape son retard
RPC de consensus (Raft)

Pendant la brève fenêtre où le leader est arrêté, les clients peuvent recevoir E no_leader, mais les clients officiels réessaient de façon transparente, si bien que cela n'apparaît que comme un court délai côté application.