координация выполнения скрипта только на одном из идентичных серверов с балансировкой нагрузки

координация выполнения скрипта только на одном из идентичных серверов с балансировкой нагрузки

У меня есть два одинаково настроенных сервера CentOS 5 (возможно, в будущем их будет больше). Мне нужно запустить задание cron на любом из них, и оно будет работать только на одном из них.

Я знаю о RedHat Cluster Suite (мы используем его на других серверах), но это слишком мощное оружие для этой задачи, к тому же оно не очень хорошо работает, если узлов меньше трех.

Есть ли что-то легкое, что я могу использовать для этого?

Серверы могут общаться друг с другом напрямую. Я предполагаю, что могу разработать что-то через ssh или nrpe (два сервера, которые уже установлены на этих серверах), но мне было интересно, есть ли что-то уже доступное.

решение1

Это довольно просто сделать с помощью файла блокировки в общей файловой системе, такой как NFS. Я предполагаю, однако, что у вас нет такой настройки.

Вот несколько идей, которые приходят на ум:

  1. Реализуйте блокировку на каком-то общем ресурсе или на чем-то, к чему обе машины могут получить доступ. Например, могут ли они обе писать на какой-то внешний сетевой ресурс? Недостаток: много возможностей для состояний гонки, я уверен.

  2. Используйте DLM readhat и блокировку доступа черезperl DLM::Клиент. Недостаток: как вы упомянули, может оказаться более тяжелым, чем вам хотелось бы.

  3. Попробуйте ruby ​​lockserverОфицер. Может быть забавно, если вы любите рубин.

  4. Вот еще один механизм распределенной блокировки Perl:IPC::ШкафчикПреимущество: не требует настройки другой службы, такой как DLM ядра Linux.

  5. Используйте службу обмена сообщениями, напримерRabbitMQдля блокировки. Опять же, вероятно, довольно тяжеловесно.

Я сам программист на Perl, поэтому, наверное, сначала попробую IPC::Locker. Мне нравится простота этого подхода, если у вас всего два сервера.

решение2

Для корпоративных решений вы можете использоватьBMC Control-MАльтернативой с открытым исходным кодом может бытьПланировщик заданий

Связанный контент