Lorsqu'un client acquiert (A) une clé, le serveur répond de l'une des trois façons suivantes.
| État de la clé | Action du serveur | Réponse |
|---|---|---|
| Non enregistrée | Enregistrement immédiat (expiration = now + lease), délivrance d'un jeton | A + token + key |
| Enregistrée + expirée | Renouvellement (now + lease), délivrance d'un nouveau jeton | A + token + key |
| Enregistrée + valide (occupée) | Ajout à la file d'attente, réponse différée | A lors de la libération/expiration, T si wait est dépassé |
R) la clé, elle est transmise directement au premier de la file d'attente — la remise se fait immédiatement avec un nouveau jeton, sans nouvelle mise en concurrence.lease est un filet de sécurité. Même si un client meurt ou oublie de libérer la clé, le serveur peut la récupérer automatiquement après l'écoulement du délai lease et la transmettre au demandeur suivant. Il est donc recommandé de toujours régler le lease, indépendamment du flux normal de libération, sur une valeur suffisamment large mais qui n'immobilise pas la clé trop longtemps en cas de mort du client.wait est la limite d'attente pour l'acquisition. À 0, l'attente est illimitée ; sinon, si la clé n'est pas obtenue dans ce délai (en secondes), le serveur abandonne et répond par T (timeout) — l'opération se termine sans octroi, donc aucun verrou ne fuit.Le token contenu dans la réponse A est le u64 strictement croissant de cet octroi (grant). À chaque acquisition, une valeur supérieure à tout jeton précédent est délivrée. Même en cas de bascule (failover), le nœud nouvellement actif reprend la numérotation à partir d'une valeur supérieure au jeton maximal reçu par réplication (succession) — le jeton continue donc de croître sur l'ensemble du cluster.
Il suffit que la ressource à protéger (compte, fichier, commande, etc.) vérifie uniquement que « le jeton actuel est supérieur au dernier jeton observé » pour pouvoir refuser l'accès d'un client qui se réveille tardivement après l'expiration du lease avec un jeton faible désormais invalidé. Cela permet de préserver la sécurité même si le serveur de verrouillage n'est pas parfaitement cohérent à tout instant.
Les clients officiels partagent le comportement commun suivant (pour l'API détaillée propre à chaque langage, consultez Bibliothèques).
lease finira par le récupérer, mais l'objectif est de le transmettre plus rapidement à un autre demandeur avant cela).peers définit la priorité de promotion (le premier a la priorité la plus haute). Parmi les nœuds vivants, celui ayant la priorité la plus élevée devient actif, les autres devenant des standby qui reçoivent son état par réplication en temps réel.M) vers l'adresse du nœud actif.Ctrl+C), l'actif transmet d'abord la promotion à son successeur (handoff) avant de rediriger les clients, ce qui minimise la période sans nœud actif.Ce mécanisme de promotion ne repose pas sur un quorum (vote majoritaire). Le nombre pair ou impair de nœuds n'a donc aucune importance, et le service est maintenu tant qu'un seul nœud reste vivant.
| Nombre de serveurs | Sans interruption | Pannes simultanées tolérées | Remarque |
|---|---|---|---|
| 1 | ✗ | — | Le plus rapide. Brève interruption lors du redémarrage |
| 2 | ✓ | 1 | Configuration minimale sans interruption. Suffisante dans la plupart des cas |
| 3 | ✓ | 2 | La redondance est maintenue même pendant la maintenance d'un nœud |
| 4+ | ✓ | N−1 | Seul le coût de propagation augmente — non recommandé |
La promotion basée sur la priorité n'étant pas un consensus, les deux nœuds peuvent brièvement devenir actifs en même temps lors d'une partition réseau, et en raison de la nature asynchrone de la réplication, certains octrois (grant) peuvent être perdus au moment de la bascule. Autrement dit, l'exclusion mutuelle n'est pas garantie à 100 % pendant les périodes de bascule ou de partition. Si une garantie forte est nécessaire, implémentez la vérification du jeton de fencing décrit plus haut au niveau de la ressource protégée — en rejetant les jetons anciens (plus faibles), la sécurité est assurée même si le serveur de verrouillage n'est pas parfaitement cohérent.