Cuando el cliente adquiere (A) una clave, el servidor responde de una de estas tres formas.
| Estado de la clave | Acción del servidor | Respuesta |
|---|---|---|
| No registrada | Registro inmediato (expiración = ahora + lease), emisión de token | A + token + key |
| Registrada + expirada | Renovación (ahora + lease), emisión de nuevo token | A + token + key |
| Registrada + vigente (en uso) | Se registra en la cola de espera, respuesta pendiente | A al liberar/expirar, T si se supera wait |
R), el traspaso se hace directamente a quien está al frente de la cola — pasa de inmediato con un nuevo token, sin reconcursar.lease es la red de seguridad. Aunque el cliente muera o se olvide de liberar, una vez transcurrido el tiempo de lease el servidor puede recuperar automáticamente la clave y entregarla al siguiente en espera. Por eso, independientemente del flujo normal de liberación, siempre conviene fijar el lease con margen suficiente, pero a un valor que no bloquee demasiado tiempo en caso de muerte del cliente.wait es el límite de espera para la adquisición. Si es 0, la espera es infinita; en cualquier otro caso, si no se obtiene el bloqueo dentro de ese tiempo (en segundos), el servidor desiste y responde con T (timeout) — termina sin conceder el bloqueo, así que no hay fugas de bloqueo.El token incluido en la respuesta A es un u64 monótonamente creciente para ese grant. En cada adquisición se emite un valor mayor que cualquier token anterior. Incluso si ocurre un failover, el nodo que pasa a ser activo continúa desde un valor mayor que el token máximo replicado que recibió (sucesión) — de modo que el token sigue creciendo en todo el clúster.
Si el recurso que se quiere proteger (cuenta, archivo, pedido, etc.) valida únicamente si "el token que tengo ahora es mayor que el último token visto", puede rechazar el acceso de un cliente que se despierta tarde tras la expiración del lease con un token bajo ya invalidado. Gracias a esto, se puede mantener la seguridad aunque el servidor de bloqueo no sea perfectamente consistente en todo momento.
Los clientes oficiales se comportan en común de la siguiente manera (para los detalles de la API por lenguaje, consulta Librerías).
lease, pero esto permite entregarlo antes a otro que esté esperando).peers es la prioridad de promoción (el primero tiene la mayor prioridad). Entre los nodos vivos, el de mayor prioridad se convierte en el activo, y el resto queda como standby recibiendo ese estado por replicación en tiempo real.M) a la dirección del activo y se traslada allí.Ctrl+C), el activo primero le pasa la promoción a su sucesor (handoff) y luego redirige a los clientes, minimizando el vacío sin activo.Este método de promoción no se basa en quórum (voto mayoritario). Por eso no importa si el número de servidores es par o impar, y el servicio se mantiene mientras quede al menos uno vivo.
| N.º de servidores | Sin interrupciones | Fallos simultáneos tolerados | Notas |
|---|---|---|---|
| 1 | ✗ | — | El más rápido. Corte breve al reiniciar |
| 2 | ✓ | 1 | Configuración mínima sin interrupciones. Suficiente en la mayoría de los casos |
| 3 | ✓ | 2 | Se mantiene la redundancia incluso con un servidor en mantenimiento |
| 4+ | ✓ | N−1 | Solo aumenta el costo de propagación — no recomendado |
Como la promoción basada en prioridad no es un consenso, en el instante de una partición de red ambos lados pueden llegar a ser activos brevemente a la vez, y por la naturaleza de la replicación asíncrona, en el momento del failover se puede perder algún grant. Es decir, la exclusión mutua no está garantizada al 100 % durante los períodos de failover/partición. Si se necesita una garantía fuerte, implemente que el recurso protegido valide el token de fencing descrito antes — rechazando tokens antiguos (menores) se mantiene la seguridad aunque el servidor de bloqueo no sea perfectamente consistente.