Какой узел кластера должен быть активным? - PullRequest
1 голос
/ 02 июня 2010

Есть некоторый кластер и есть некоторый сетевой демон unix. Этот демон запускается на каждом узле кластера, но активным может быть только один.

Когда активный демон прерывается (будь то программный разрыв узлов), другой узел должен стать активным.

Я мог бы подумать о нескольких возможных алгоритмах, но я думаю, что есть некоторые уже выполненные исследования этого и некоторые готовые алгоритмы? Я прав? Можете ли вы указать мне ответ?

Спасибо.

1 Ответ

1 голос
/ 03 июня 2010

Jgroups - это сетевой стек Java, который включает поддержку типа DistributedLockManager и возможности кластерного голосования. Это позволяет любому количеству демонов Unix договориться о том, кто должен быть активным. Все узлы могут пытаться получить блокировку (например), и только один из них будет успешным, пока приложение или узел не выйдут из строя.

Jgroups также имеют концепцию координатора конкретного канала связи. Только один узел может быть координатором одновременно, и когда узел выходит из строя, другой узел становится координатором. Просто проверить, являетесь ли вы координатором, и в этом случае вы будете активны.

См .: http://www.jgroups.org/javadoc/org/jgroups/blocks/DistributedLockManager.html

Если вы собираетесь реализовать это самостоятельно, есть несколько вещей, которые нужно иметь в виду:

  • Каждый узел должен иметь согласованное представление кластера.
  • Все узлы должны будут информировать все остальные узлы о том, что они в сети - возможно, с многоадресной рассылкой.
  • Узлы, которые отключаются (из-за сбоя ap или узла), должны быть удалены из «представления» всех других узлов.
  • Тогда вы можете иметь узел с наименьшим IP-адресом или что-то еще, чтобы быть активным узлом.
  • Если это не подходит, тогда вам понадобится какой-то обмен голосованием, чтобы узлы могли договориться, кто активен. Что-то вроде: http://en.wikipedia.org/wiki/Two-phase_commit_protocol
...