CSSH — используем несколько компьютеров для performance testing

Автор: | 13.05.2008

В нагрузочном тестировании главное ухитриться и запустить с нескольких компьютеров скрипты, подобные феноменальному JMeter. Цель скриптов — нежно или грубо грузить тестируемый сервер запросами по определённым сценариям.

Предполагается

  1. Наличие JMeter, или Siege, или ApacheBenchmark, или любую другую подобную утилиту, тестировщик уже освоил.
  2. что выбранная для применения утилита установлена на всех тех компьютерах, которые будут «мочить» сервер
  3. что тестировщик умеет лично перебегать между компутерами (или теребить коллег) и поочередно запускать с них JMeter-атаки.
  4. что на всех задействованных в этом тестировании компьютерах созданы профили с идентичными логином и паролем. Например, testuser/testpass. Кто этого не сделает, тому все равно придется это сделать, а причину я объясню чуть позже.

Теперь сюрприз: что существенно облегчит перебежки тестировщика между компутерами?

Правильно, существенно облегчит перебежки тестировщика между компутерами утилита Cluster SSH. А также любая Ubuntu.

Cluster SSH — программа с графическим интерфесом, позволяющая открыть несколько соединений по SSH и выполнять одновременно во всех них команды.

Установка (на добро)

Открываем терминал:

sudo apt-get install clusterssh

Y, разумеется, Y!

Пока ставится, открываем еще одно терминальное окно (позже будет удобно), и пишем команду, которая создает файл с конфигурацией cssh — starting the utility will be much faster with a configuration file (as this prevents searching for required files):

sudo cssh -u > /home/user/.csshrc

В справке путь указан как $HOME. Если у вас домашняя директорая иная, нежели /home/user/, пишите иное.

Запускаем в этом же (втором) терминалике Midnight Commander с правами root (да не убий Убунту):

sudo mc

В левой панели ищем /home/user/.csshrc и открываем его. Внимательно смотрим содержимое. Внимательно закрываем содержимое, бо нефиг его трогать. Повторять до просветления.

В правой панели переходим в ‘etc/’. Там рожаем файл clusters:

>clusters

Открываем этот файл на исполнение, и вписываем в него IP компьютеров, на которых располагается наше оружие (JMeter, например):

host1 = user@192.168.1.32

host2 = marin@192.168.1.36

host3 = boss@192.168.1.200

stressit = host1 host2

stressitall = host1 host2 host3

Не спеша прочитав, слушаем внимательно.

host1

Количество вписываемых хостов, с которых будем запускать JMeter, неограничено. В этом примере прописано три компьютера. Если надо, пишем сто компьютеров. Или тысячу.

user@192.168.1.36

‘user’ — это имя пользователя на удаленной машине, которых мы заранее завели перформанс-теста ради. Если юзера там зовут ‘Petea’ — пишем в нашем файле ‘Petea’.

‘192.168.1.36’ — это IP. Как круто это знать. IP вам выдаст администратор вашей сети, под пытками с применением пива и пиццы. В общем, как договоритесь.

При первом подключении к удаленным компьютерам CSSH выдаст предупреждение и вопрос, мол, ‘вы точно хотите подключиться к еще неизвестному мне компутера?’ Придется сказать Yes. Зато потом утилита уже будет знать, что мы ломимся к удаленному компу под указанным нами пользователем, и будем спрашивать только пароль входа.

stressit

‘stressit’ — это произвольное сочетание букв, это тэг, который будет распознавать CSSH. Тэг говорит утилите — мы хотим запустить наши руки в компы, которые у тебя прописаны под host1 и host2. Имя тэга зависит только от ваших сексуальных предпочтений. Как хотите, так его и назовите. Я назвал его ‘stressit’, и ничуть не сожалею об этом.

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

‘stressitall’ — это пример другого тэга, который говорит: мы убиваем сервер, сразу абсолютно все наши компы. Почему все? Потому, что для этого тэга я указал абсолютно все наличные в файле ‘host’ — и host1, и host2, и host3. Было бы 100 хостов — пришлось бы прописать их всех. Но сейчас у меня под рукой только три копмьютера, поэтому такая запись в файле ‘clusters’.

Кстати, мы же создали на всех компах тестовых юзеров-пустышек? Значит, наш файл ‘clusters’ выглядит так:

host1 = user@192.168.1.36

host2 = user@192.168.1.37

host3 = user@192.168.1.200

stressit = host1 host2

stressitall = host1 host2 host3

‘MC’ можно закрыть.

Запускаем cssh

В терминал:

sudo cssh stressit

С правами root мы открываем cssh и повелеваем ей запустить именно те хосты, которые прописаны в файле ‘clusters’ под тэгом ‘stressit’.

В терминале для каждого хоста пишут угрозы типа — WARNING: unknown host = (see -i switch, or ignore_host_errors in .csshrc) — ignoring. Их можно игнорировать. Лезть в конфиг-файл и говорить Yes для опции ignore_host_errors не рекомендуется.

При первом подключении к удаленному компьютеру в консоли cssh должен появиться вопрос, мол, вы стукаетесь на такой-то компьютер. Он неизвестен. Вы уверены, что надо к нему подключиться?

Надо полностью написать слово «yes».

Ответ cssh — Warning, permanently added такой-то IP to the list of known hosts, и при последующих запусках этого вопроса не будет. Будет сразу приглашение ввести пароль для доступа. Что нам и нужно.

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

Можно добавить еще один (или сто) хост по рецепту user@server. Но в принципе — нечего тут дергать, если мы уже все прописали в файле ‘clusters’.

Если ковыряние завершено, запускаем утилиту по-серьезному. Откроем два компутера которые у нас под тэгом stressit записаны. В терминал:

sudo cssh stressit

Видим:

Окна я сам расположил равномерно.

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

Тем не менее, через это поле будем посылать команды во все открытые сеансы (на все компьютеры).

Прошу знать

  • если команду нужно выполнить только для одного сервера, обратитесь к нужному окну терминала.
  • Чтобы исключить сеанс из перечня массового выполнения команд, нужно снять соответствующий флажок в меню ‘Hosts’ в основном окне утилиты.
  • Чтобы исключить все сеансы сразу, используйте команду ‘Toggle active state’ — в основном окне. Применив ее — не жалуемся, сеансы действительно отключаются.
  • Для упорядочивания окон на экране применяем команду ‘Retile’.
  • Справка по программе есть и в меню Help — Documentation, и в консоли — man cssh, и на sourceforge.net.

Все запущено, в основном окне в поле ввода мигает курсор.

Сходу пишем пароль для доступа к удаленным юзерам. Он, по правилам юникс, не отображается. Пишем пароль, жмем «Enter» — хо-хо мы получили доступ!

Для разгона впишем команду ‘ls’. Вот теперь отлично видно все, что пишем — это отображается сразу во всех открытых консолях.

Рулез!

CSSH — используем несколько компьютеров для performance testing: 1 комментарий

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.