LINUX.ORG.RU

Распределенный cron


0

0

Есть распределенная среда (множество машин) на которых надо выполнять некоторый список задач с опредленной периодичностью (у каждой задачи она может быть своя). При условии что одно задание должно одновременно выполняться только один раз.

Пока основная идея - хранить конфиг в sql базе (собственно этого не избежать по другим причинам), и выставлять прямо в таблице флаг running пока задание где-то исполняется.

А если нода отвалится? Можно было бы как-то заходить на узел и проверять. НО этого хотелось бы избежать. Сколько задача будет исполняться по времени сказать сложно, так что некий тайм аут тоже не желателен.

Можно использовать не флаг running, а некий счетчик, увеличвать его каждые n секунд, а на других (или отдельной взятой) ноде следить за этим.

Что-нибудь посоветуете? Может есть готовые решения?

★★★★

Последнее исправление: OxiD (всего исправлений: 1)

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

pseudo-cat ★★★
()
Ответ на: комментарий от pseudo-cat

ЧТо-то не очень тебя понял. Можешь привести пример?

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

OxiD ★★★★
() автор топика
Ответ на: комментарий от nnz

Я так понял там используется выделенная нода -менеджер, которая распределяет задания и следит за жизнедеятельностью воркеров?

Да, это довольно простое решения (наверное не в плане реализации), но хочется чего-то полностью распределенного.

OxiD ★★★★
() автор топика
Ответ на: комментарий от OxiD

Пример -

есть 3 процесса с требованиями:
p1 - ((p2 active) (p3 inactive))
p2 - ((p3 inactive))
p3 - ((p2 active))

запускаем:
[p2 on]<set active p2 in p1,p3> -> [p3 on]<...> -> <[p2 off] ->... | [p3 off] -> [p1 on] ->...> ...

выполняется еще или можно перезапускать

я хз как такое отслеживают

взаимоотношений никаких особо нет

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

pseudo-cat ★★★
()
Ответ на: комментарий от pseudo-cat

Спасибо, но это не совсем то. Зависимостей у меня нет. И проблемы с отслеживанием тоже. Скажем можно атомарно выставить флаг что процесс запустился, и этого будет достаточно.

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

Вообщем думаю вместо флага использовать счетчик и увеличивать его каждые n секунд оп ходу выполнения задания, если счетчик не будет увеличиваться более чем 3*n секунд - значит нода сдохла.

Хотя есть еще вариант с NFS диском, а в нем lock файлы. Может это даже лучше.

OxiD ★★★★
() автор топика
Ответ на: комментарий от OxiD

>использовать счетчик и увеличивать его каждые n секунд

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

nu11 ★★★★★
()
Ответ на: комментарий от OxiD

>NFS диском, а в нем lock файлы.
если сдохнет, то лок так и останется :)

nu11 ★★★★★
()
Ответ на: комментарий от OxiD

>Я так понял там используется выделенная нода -менеджер, которая распределяет задания и следит за жизнедеятельностью воркеров?

Невнимательно ты, дядя Федор, документацию читаешь.

This list of instructions is then fed to the DC (Designated Co-ordinator). Pacemaker centralizes all cluster decision making by electing one of the CRMd instances to act as a master. Should the elected CRMd process, or the node it is on, fail... a new one is quickly established.


Думаешь, авторы кластерного менеджера ресурсов были такие глупые, что сделали single point of failure?

nnz ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.