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