Actualmente en pruebas: el código de GitHub se abrirá al finalizar.

Protocolo — Servidor ↔ Servidor (clúster)

El protocolo RPC entre pares, usado solo en modo clúster. Los nodos comparten un único estado de bloqueo mediante consenso Raft — cada cambio de estado del bloqueo (adquisición, liberación, expiración) solo se aplica tras la propuesta del líder → replicación de mayoría → commit, así que la exclusión mutua se mantiene incluso durante una partición o un failover. Consulta Cómo funciona para la explicación conceptual.

Flujo — de una adquisición a su confirmación (commit)

Cliente
Líder
Seguidor 1
Seguidor 2
A · adquirir (key)
AppendEntries (Grant)
AppendEntries (Grant)
OK
mayoría alcanzada → commit, aplicado en todos los nodos
A · adquirido (token)
solicitudrespuestaRPC de consenso (Raft)

El líder convierte el comando de bloqueo en un comando replicado, lo transporta en un RPC AppendEntries, y confirma en cuanto una mayoría que se incluye a sí mismo lo ha registrado (con 3 nodos, el líder más el seguidor 1 bastan — no espera al resto). La respuesta al cliente solo se envía tras el commit, así que en cuanto recibes una respuesta, ese bloqueo ya está escrito en la mayoría.

Reglas de puertos y direcciones

  • El RPC entre pares usa un puerto Raft dedicado = puerto del cliente + 1000 (p. ej. 52256225). Se deriva automáticamente sin ninguna clave de configuración aparte, y solo escucha en modo clúster. Tu firewall necesita abrir ambos puertos.
  • La configuración (cluster_self/cluster_peers) siempre contiene la dirección de cliente. Solo al llamar (dial) a un par se le suma +1000 al puerto — la dirección de redirección M (movido) entregada a los clientes es siempre la dirección de cliente tal cual.
  • Los roles se distinguen únicamente por el puerto — no hay ningún paso en el protocolo para diferenciar cliente de par. Consulta Conexión y autenticación para el orden de conexión y las reglas de auth/TLS.

Índice

Véase también