Планировщик в кластерной среде

Наше (весеннее) приложение содержит несколько Schedulers, которые становятся активными ночью для изменения/обновления некоторых данных (из Database) в Batch.

Все работает нормально, проблема в том, что наше приложение скоро запустится в clustered environment.

Каковы наилучшие варианты предотвращения того, чтобы scheduler из instance A и instance B выполняли одну и ту же работу одновременно?

** ОБНОВЛЕНИЕ **
Кластерная среда настроена как 'active-active'.
Каждый узел взаимодействует со своим собственным экземпляром базы данных. Каждый экземпляр базы данных будет replicate передавать данные другим экземплярам.
Экземпляры БД не настроены как 'master-slave', но будут работать в Galera cluster, где каждый экземпляр выполняет операции вставки-обновления-удаления.

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


person user2054927    schedule 07.07.2016    source источник
comment
Возможный дубликат запланированной задачи Spring, работающей в кластерной среде   -  person Gaurava Agarwal    schedule 07.07.2016
comment
у тебя есть ответ?   -  person Gaurava Agarwal    schedule 24.07.2016
comment
Я не получил никаких ответов после обновления моего вопроса для получения дополнительных разъяснений   -  person user2054927    schedule 25.07.2016


Ответы (4)


Просто для полноты: мы получили постоянный Quartz job scheduling.
Этот пост очень помог мне в отношении постоянных Quartz scheduling с Spring .

person user2054927    schedule 09.08.2016
comment
Ссылка битая :( - person Valentyn Kolesnikov; 25.05.2018

У вас будет код для обработки этого запланированного события в обоих кластерах. Есть два подхода.

  1. Вы можете запустить это событие в любом кластере. Затем вам нужно убедиться, что когда этот кластер не работает, вы переключите планировщик в другой кластер. И аналогичные проблемы с обслуживанием.
  2. Вы можете запускать такие события в обоих кластерах. Разница в реализации заключается в том, что все кластеры будут опрашиваться, и любой кластер успешно запустит его. Вы можете выбрать базу данных или jms-сообщение для опроса/блокировки.

Я предпочитаю второй подход - написать один раз.

person Gaurava Agarwal    schedule 07.07.2016

Вы должны делегировать различные задачи узлам в вашем кластере. Какая работа происходит с базой данных ночью?

Если узлы правильно сгруппированы за балансировщиком нагрузки, только один из них должен получить обновление для записи в базу данных.

Вы можете использовать Zookeeper для управления узлами и настроить первичный узел для выполнения единоличного планирования.

person UserF40    schedule 07.07.2016

Вы не говорите, какой тип Schedulers вы используете.
Вам нужно постоянное планирование. JEE поддерживает это, и Quartz тоже. Spring из коробки не работает, хотя при желании он прекрасно интегрируется с Quartz.

При использовании постоянных планировщиков задания добавляются в базу данных, а триггеры запускаются в "транзакции" (не уверен, что это реальная транзакция), что гарантирует, что только один планировщик может запускать триггер.
Для управления требуется несколько таблиц базы данных. , Однако.

person Koos Gadellaa    schedule 08.07.2016