У меня есть два идентично настроенных сервера CentOS 5 (возможно, в будущем их будет больше). Мне нужно запустить задание cron на любом из них, и оно будет работать только на одном из них.
Я знаю о RedHat Cluster Suite (мы используем его на других серверах), но это слишком большая пушка для этой задачи, к тому же она плохо себя ведет менее чем на трех узлах.
Можно ли для этого использовать что-нибудь легкое?
Серверы могут напрямую связываться друг с другом. Я полагаю, что могу разработать что-то по ssh или nrpe (два сервера, которые уже установлены на этих серверах), но мне было интересно, есть ли что-то уже доступное.
Для корпоративных решений вы можете использовать BMC Control-M. Альтернативой с открытым исходным кодом будет Планировщик заданий
Это довольно просто сделать с помощью файла блокировки в общей файловой системе, такой как NFS. Я предполагаю, однако, что у вас нет такой настройки.
Вот несколько идей, которые приходят в голову:
Реализуйте блокировку некоторого общего ресурса или чего-то, к чему обе машины могут получить доступ. Например, могут ли они оба писать на какой-то внешний сетевой ресурс? Обратная сторона: я уверен, много возможностей для гоночных условий.
Используйте readhat DLM и блокировку доступа через perl DLM :: Клиент. Оборотная сторона: как вы упомянули, может быть тяжелее, чем вы хотите.
Попробуйте ruby lockserver Офицер. Может быть весело, если вы любите рубин.
Вот еще один механизм распределенной блокировки Perl: IPC :: шкафчик. Преимущество: не требует настройки другой службы, такой как DLM ядра Linux.
Используйте службу обмена сообщениями, например RabbitMQ сделать блокировку. Опять же, наверное, довольно тяжеловес.
Я сам программист на Perl, так что, наверное, сначала попробую IPC :: Locker. Мне нравится простота этого подхода, если у вас всего два сервера.