En informática , un latido es una señal periódica generada por hardware o software para indicar el funcionamiento normal o para sincronizar otras partes de un sistema informático . [1] [2] El mecanismo de latido es una de las técnicas comunes en sistemas de misión crítica para proporcionar alta disponibilidad y tolerancia a fallos de los servicios de red mediante la detección de fallos de red o sistemas de nodos o daemons que pertenecen a un clúster de red (administrado por un servidor maestro ) con el fin de adaptar y reequilibrar automáticamente el sistema utilizando los nodos redundantes restantes en el clúster para hacerse cargo de la carga de los nodos fallidos para proporcionar servicios constantes. [3] [1] Por lo general, un latido se envía entre máquinas a intervalos regulares en el orden de segundos; un mensaje de latido . [4] Si el punto final no recibe un latido durante un tiempo (normalmente unos pocos intervalos de latido), se supone que la máquina que debería haber enviado el latido ha fallado. [5] Los mensajes de latido normalmente se envían sin parar de forma periódica o recurrente desde el inicio del originador hasta el apagado del originador. Cuando el destino identifica una falta de mensajes de latido durante un período de llegada previsto, el destino puede determinar que el originador ha fallado, se ha apagado o, en general, ya no está disponible.
Un protocolo de latido se utiliza generalmente para negociar y monitorear la disponibilidad de un recurso, como una dirección IP flotante , y el procedimiento implica enviar paquetes de red a todos los nodos del clúster para verificar su accesibilidad . [3] Normalmente, cuando se inicia un latido en una máquina, realizará un proceso de elección con otras máquinas en la red de latidos para determinar qué máquina, si hay alguna, posee el recurso. En redes de latidos de más de dos máquinas, es importante tener en cuenta la partición, donde dos mitades de la red podrían estar funcionando pero no poder comunicarse entre sí. En una situación como esta, es importante que el recurso solo sea propiedad de una máquina, no de una máquina en cada partición.
Como el objetivo del latido es indicar el estado de una máquina, es importante que el protocolo del latido y el transporte en el que se ejecuta sean lo más confiables posible. Según el recurso, provocar una conmutación por error debido a una falsa alarma puede ser altamente indeseable. También es importante reaccionar rápidamente ante un fallo real, lo que indica aún más la confiabilidad de los mensajes del latido. Por este motivo, a menudo es deseable tener un latido ejecutándose en más de un transporte; por ejemplo, un segmento Ethernet que utiliza UDP / IP y un enlace serial.
La "pertenencia a un clúster" de un nodo es una propiedad de la accesibilidad de la red : si el maestro puede comunicarse con el nodo , se lo considera miembro del clúster y "muerto" en caso contrario. [6] Un programa de latido en su conjunto consta de varios subsistemas : [7]
Los mensajes de latido se envían de manera periódica a través de técnicas como difusión o multidifusión en clústeres más grandes. [6] Dado que los CM tienen transacciones en todo el clúster, el patrón más común es enviar mensajes de latido a todos los nodos y " esperar " respuestas de manera no bloqueante . [8] Dado que los mensajes de latido o de mantenimiento de la actividad son la abrumadora mayoría de los mensajes de control de clúster no relacionados con la aplicación (que también se envían a todos los miembros del clúster), los principales sistemas críticos también incluyen protocolos que no son IP, como puertos seriales, para enviar latidos. [9]
Cada CM en el servidor maestro mantiene una máquina de estados finitos con tres estados para cada nodo que administra: Down, Init y Alive. [10] Siempre que se une un nuevo nodo, el CM cambia el estado del nodo de Down a Init y transmite un "mensaje de arranque", que el nodo recibe y ejecuta el conjunto de procedimientos de arranque. Luego responde con un mensaje de reconocimiento, luego el CM incluye el nodo como miembro del clúster y cambia el estado del nodo de Init a Alive. Cada nodo en el estado Alive recibiría un mensaje de latido de transmisión periódico del subsistema HS y espera un mensaje de reconocimiento dentro de un rango de tiempo de espera . Si el CM no recibió un mensaje de latido de reconocimiento, el nodo se considera no disponible y el CM realiza una transición de estado de Alive a Down para ese nodo. [11] Los procedimientos o scripts que se ejecutarán y las acciones que se realizarán entre cada transición de estado son un detalle de implementación del sistema.
La red Heartbeat es una red privada que comparten únicamente los nodos del clúster y a la que no se puede acceder desde fuera del clúster. Los nodos del clúster la utilizan para supervisar el estado de cada nodo y comunicarse entre sí los mensajes necesarios para mantener el funcionamiento del clúster. El método Heartbeat utiliza la naturaleza FIFO de las señales enviadas a través de la red. Al asegurarse de que se hayan recibido todos los mensajes, el sistema garantiza que los eventos se puedan ordenar correctamente. [12]
En este protocolo de comunicaciones, cada nodo envía un mensaje en un intervalo determinado, por ejemplo delta , lo que confirma que está activo y tiene un latido. Estos mensajes se consideran mensajes de control que ayudan a determinar que la red no incluye mensajes retrasados. Un nodo receptor, llamado "sync", mantiene una lista ordenada de los mensajes recibidos. Una vez que se recibe un mensaje con una marca de tiempo posterior a la hora marcada dada desde cada nodo, el sistema determina que se han recibido todos los mensajes, ya que la propiedad FIFO garantiza que los mensajes estén ordenados. [13]
En general, es difícil seleccionar un delta que sea óptimo para todas las aplicaciones. Si el delta es demasiado pequeño, requiere demasiada sobrecarga y si es grande, da como resultado una degradación del rendimiento ya que todo espera la siguiente señal de latido. [14]