В нагрузочном тестировании главное ухитриться и запустить с нескольких компьютеров скрипты, подобные феноменальному JMeter. Цель скриптов — нежно или грубо грузить тестируемый сервер запросами по определённым сценариям.
Предполагается
- Наличие JMeter, или Siege, или ApacheBenchmark, или любую другую подобную утилиту, тестировщик уже освоил.
- что выбранная для применения утилита установлена на всех тех компьютерах, которые будут «мочить» сервер
- что тестировщик умеет лично перебегать между компутерами (или теребить коллег) и поочередно запускать с них JMeter-атаки.
- что на всех задействованных в этом тестировании компьютерах созданы профили с идентичными логином и паролем. Например, 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’. Вот теперь отлично видно все, что пишем — это отображается сразу во всех открытых консолях.
Рулез!
http://blog.milamberspace.net/index.php/jmeter-pages/jmeter-test-de-charges-dun-site-web-mode-demploi/jmeteriser-son-scenario-fonctionnel
http://andrei-zhukov.livejournal.com/1015.html