Почему работающий нож в одиночку с использованием Parallel gem выдает ошибку порта?

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

Parallel.each(machines, in_threads => machines.size) do |machine|
   knife solo cook machine.user + ":" + machine.ip <options>
end

При этом поток, который запускается первым, выполняется, как и ожидалось. Однако другие потоки не выполняются и останавливаются с ошибкой: EADDRINUSE: Адрес уже используется — bind(2) для 127.0.0.1:8889.

Мы добавили команду netstat в то же место, где вызывали knife solo cook для расследования, и обнаружили, что сокет Listen был открыт на порту 8889 первым потоком. Мы открывали какие-либо сокеты и не нашли никаких указаний на то, что нож или Net:SSH (который используется ножом) делают это.

Кто-нибудь знает, кто открывает этот сокет? Или есть ли какой-нибудь файл конфигурации для него?

Спасибо!

Редактировать: забыл упомянуть, мы делаем то же самое для knife solo prepare перед вызовом cook, и это прекрасно работает. Кроме того, на всех удаленных машинах правильно настроен шеф-повар.


person Parimal    schedule 06.06.2014    source источник


Ответы (2)


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

Вы также можете сослаться на вариант использования tomcat, мы можем создавать несколько экземпляров tomcat для нескольких сборок, для этого используется какой-то механизм. Хороший вариант использования, чтобы узнать об этом.

person Apurv Nerlekar    schedule 06.06.2014
comment
Мы изменили chef_zero[:port] в файле knife.rb перед тем, как запускать одиночный режим приготовления каждого ножа. Это работало до сегодняшнего утра. С сегодняшнего утра соло-нож вообще не создает никаких портов для прослушивания. На выходных вышел новый релиз, проблема вроде исправлена. - person Parimal; 09.06.2014

Я погуглил knife chef 8889 и нашел это: http://docs.opscode.com/config_rb_knife.html.

Похоже, что chef-zero запускается, и, возможно, было бы неплохо попробовать chef_zero[:enabled] false в вашем файле конфигурации?

person Nick Veys    schedule 06.06.2014
comment
Да, это то, что мы тоже пробовали. Но выдает ту же ошибку. Вы правы насчет chef_zero, хотя мы попытались изменить chef_zero[:port] на 4000, и сообщение об ошибке показывает 4000. Теперь мы пытаемся изменить это значение динамически, чтобы каждый поток использовал другой порт. - person Parimal; 06.06.2014