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