Hazelcast: как обеспечить запуск кластера

У меня есть кластер с 3 узлами (на разных машинах), и у меня есть "бизнес-логика", которая использует распределенную блокировку при запуске.

Иногда, когда есть больше задержки, каждый узел успешно получает эксклюзивную блокировку, потому что кластер еще не "запускается", поэтому каждый узел еще не видит другого.

Впоследствии узлы видят друг друга, и кластер правильно настроен с 3 узлами. Я знаю, что существует "MemberShipListener" для захвата события "Элемент добавлен", чтобы я мог снова выполнить "бизнес-логику", но я хотел бы знать, существует ли метод, обеспечивающий правильное завершение запуска кластера для ожидания выполнить "бизнес-логику", пока кластер не будет включен.

Я пытался использовать hazelcast.initial.wait.seconds но настройка правильных секунд не является детерминированной, и я не знаю, задержит ли это также операции присоединения члена.

1 ответ

Решение

Афайк, в Hazelcast такого нет. Поскольку кластер является динамическим, узел может уходить и уходить в любое время, поэтому кластер никогда не является "завершенным" или нет.

Вы можете, однако:

  1. Настройте начальное ожидание, как вы описали, чтобы помочь с начальными задержками
  2. использование hazelcast.initial.min.cluster.size определить минимальное количество членов, которые ожидают hazelcast на старте
  3. Определите минимальный кворум: минимальное количество узлов для кластера, которое будет считаться полезным / работоспособным (см. Кворум кластера)
  4. Использовать PartitionService проверить, безопасен ли кластер, или есть ли ожидающие миграции
Другие вопросы по тегам