Назад | Перейти на главную страницу

Параллельное выполнение разных команд на нескольких хостах

Я ищу инструмент для выполнения ряда команд, таких как существующий инструмент:

parallel -h
parallel [OPTIONS] command -- arguments
    for each argument, run command with argument, in parallel
parallel [OPTIONS] -- commands
    run specified commands in parallel

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

Еще лучше, если бы в инструменте была базовая балансировка нагрузки, но я подумал, что буду использовать отдельный инструмент для выбора хоста. (Хороший инструмент для запроса нагрузки, памяти и, если компьютер находится в интерактивном режиме, тоже будет признателен, но я уже написал кое-что, что будет достаточно для выбора хоста.) Это не в кластере, и я этого не делаю. Я не хочу полагаться на других демонов, кроме sshd, или просить администраторов установить серьезный планировщик заданий кластера, такой как Condor. У меня нет root-доступа ни на одном из этих компьютеров.

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

Ах! Похоже, что GNU-версия параллельного (не тот, который я установил) делает это. Нет балансировки нагрузки, и я не пробовал ее, чтобы увидеть, что она делает с каждым stdout и stderr, но это именно то, что я хотел.

To run commands on more than one remote computer run:
seq 10 | parallel --sshlogin server.example.com,server2.example.net echo

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

Редактирование цитаты: чтобы подчеркнуть, я хочу запускать разные команды на каждом хосте. Цитата

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

Вам действительно стоит изучить одну из многих существующих технологий кластеризации. Попробуй посмотреть на Apache Hadoop. Я недавно прочитал отличную статью, которая может вас заинтересовать, о настройке кластера на 10000 ядер для параллельных вычислений: http://goo.gl/A8hgX

Я использовал для этого mussh, он основан на bash, но работает параллельно. Я очень доволен этим.

Я также видел несколько разговоров о rshall (который, несмотря на то, что в имени содержится RSH, изначально использует ssh) на локальном Linuxfests, он основан на Perl и может использовать внешний источник для запроса списков хостов, но он ожидает определенную информацию о хосте в конкретных форматы.

Ни у одного из них нет очереди или планирования заданий, хотя вы можете запускать их через cron или at, если хотите.

Ни для одного из них не требуется root-доступ, но они требуют, чтобы у вас была аутентификация на основе ключей для систем.

clusterssh - еще один инструмент, на который стоит обратить внимание. Он более интерактивен в том смысле, что он будет открывать и мозаично размещать окна терминала для каждого хоста. Вы также можете запускать команды в каждом терминале отдельно друг от друга или во всех (или некоторых) сразу. Например, бег top на 12 системах одновременно, а затем отслеживание процесса только в одной из них.