В информатике тактовый сигнал — это периодический сигнал, генерируемый аппаратным или программным обеспечением для указания на нормальную работу или для синхронизации других частей компьютерной системы . [1] [2] Механизм тактового сигнала — один из распространенных методов в критически важных системах для обеспечения высокой доступности и отказоустойчивости сетевых служб путем обнаружения сетевых или системных сбоев узлов или демонов , принадлежащих сетевому кластеру , администрируемому главным сервером , с целью автоматической адаптации и перебалансировки системы путем использования оставшихся избыточных узлов в кластере для принятия на себя нагрузки отказавших узлов для предоставления постоянных услуг. [3] [1] Обычно тактовый сигнал отправляется между машинами с регулярным интервалом в порядке секунд; сообщение тактового сигнала . [4] Если конечная точка не получает тактовый сигнал в течение некоторого времени — обычно нескольких интервалов тактового сигнала — предполагается, что машина, которая должна была отправить тактовый сигнал, вышла из строя. [5] Сообщения Heartbeat обычно отправляются непрерывно на периодической или повторяющейся основе с момента запуска отправителя до его отключения. Когда пункт назначения обнаруживает отсутствие сообщений Heartbeat в течение ожидаемого периода прибытия, пункт назначения может определить, что отправитель вышел из строя, отключился или вообще больше не доступен.
Протокол heartbeat обычно используется для согласования и мониторинга доступности ресурса, такого как плавающий IP-адрес , а процедура включает отправку сетевых пакетов всем узлам в кластере для проверки его достижимости . [3] Обычно, когда heartbeat запускается на машине, он выполняет процесс выборов с другими машинами в сети heartbeat, чтобы определить, какая машина, если таковая имеется, владеет ресурсом. В сетях heartbeat из более чем двух машин важно учитывать разделение, когда две половины сети могут функционировать, но не иметь возможности общаться друг с другом. В такой ситуации важно, чтобы ресурс принадлежал только одной машине, а не одной машине в каждом разделе.
Поскольку heartbeat предназначен для использования для индикации работоспособности машины, важно, чтобы протокол heartbeat и транспорт, на котором он работает, были максимально надежными. Вызвать отказ из-за ложной тревоги может быть крайне нежелательно, в зависимости от ресурса. Также важно быстро реагировать на фактический сбой, что еще больше подтверждает надежность сообщений heartbeat. По этой причине часто желательно, чтобы heartbeat работал более чем на одном транспорте; например, сегмент Ethernet, использующий UDP / IP , и последовательный канал.
«Принадлежность к кластеру» узла — это свойство сетевой достижимости : если мастер может взаимодействовать с узлом , он считается членом кластера и «мертвым» в противном случае. [6] Программа heartbeat в целом состоит из различных подсистем : [7]
Сообщения Heartbeat отправляются периодически с помощью таких методов, как широковещательная или многоадресная рассылка в более крупных кластерах. [6] Поскольку CM имеют транзакции по всему кластеру, наиболее распространенной схемой является отправка сообщений Heartbeat всем узлам и « ожидание » ответов в неблокируемой манере. [8] Поскольку сообщения Heartbeat или Keepalive составляют подавляющее большинство сообщений управления кластером, не связанных с приложениями, которые также отправляются всем членам кластера, основные критические системы также включают не- IP протоколы, такие как последовательные порты, для доставки Heartbeat. [9]
Каждый CM на главном сервере поддерживает конечный автомат с тремя состояниями для каждого узла, которым он управляет: Down, Init и Alive. [10] Всякий раз, когда присоединяется новый узел, CM изменяет состояние узла с Down на Init и транслирует «сообщение о загрузке», которое узел получает и выполняет набор процедур запуска. Затем он отвечает сообщением подтверждения, затем CM включает узел в качестве члена кластера и переводит состояние узла из Init в Alive. Каждый узел в состоянии Alive будет получать периодическое широковещательное сообщение heartbeat от подсистемы HS и ожидает подтверждения в течение определенного периода времени . Если CM не получил обратно сообщение подтверждения heartbeat, узел считается недоступным , и CM выполняет для этого узла переход из Alive в Down. [11] Процедуры или сценарии для запуска и действия, которые необходимо выполнить между каждым переходом состояния, являются деталями реализации системы.
Heartbeat-сеть — это частная сеть , которая используется только узлами в кластере и недоступна извне кластера. Она используется узлами кластера для мониторинга состояния каждого узла и обмена сообщениями, необходимыми для поддержания работы кластера. Метод heartbeat использует характер FIFO сигналов, отправляемых по сети. Удостоверяясь, что все сообщения были получены, система гарантирует, что события могут быть правильно упорядочены. [12]
В этом протоколе связи каждый узел отправляет обратно сообщение в заданном интервале, скажем, delta , фактически подтверждая, что он жив и имеет сердцебиение. Эти сообщения рассматриваются как контрольные сообщения, которые помогают определить, что сеть не содержит задержанных сообщений. Узел-получатель, называемый «sync», поддерживает упорядоченный список полученных сообщений. Как только сообщение с меткой времени позже заданного отмеченного времени получено от каждого узла, система определяет, что все сообщения были получены, поскольку свойство FIFO гарантирует, что сообщения упорядочены. [13]
В общем, сложно выбрать дельту, которая будет оптимальной для всех приложений. Если дельта слишком мала, это потребует слишком много накладных расходов, а если она велика, это приведет к снижению производительности, поскольку все будет ждать следующего сигнала heartbeat. [14]