Отслеживание кластеров Oracle Exadata, Hadoop с помощью Nigel Monitor

THE HOLY BIBLE - King James Version - БИБЛИЯ в Синодальном переводе
"Нас Атакуют!" Изобличи козни лукавого, запрети диаволу

Отслеживание кластеров Oracle Exadata, Hadoop с помощью Nigel Monitor

Наблюдение за работой распределённых систем представляет существенные затруднения, вызванные обилием информации и сложностью самих программ для наблюдения. Администраторы и разработчики высокопроизводительных систем, основанных на технологии Инфинибенд, должны иметь возможность оперативной оценки основных параметров каждого узла кластера и способы фильтрации данных и устройств. При этом программа для отслеживания должна иметь минимальный размер, легко переноситься с кластера на кластер и не требовать сложной установки.

Имеющиеся средства контроля и управления кластерами, продаваемые ведущими ИТ компаниями, а также поставляемые в составе Hadoop, сами по себе являются сложными распределёнными приложениями, требующими постоянной поддержки и настройки. При этом данные, собранные и показанные этими программными средствами, зачастую дублируют вывод простейших команд линукс, вроде sar или iostat.

Автор предлагаемой читателю заметки внёс изменения в существующую программу "NMon", сделав возможным слежение за работой Infiniband подсистем, основанных на стандарте OFED. К использованию предлагается готовая программа для индивидуального отслеживания узлов кластера Exadata или Hadoop. Прилагаемый пример конфигурации позволяет отфильтровать ненужные диски и сетевые интерфейсы, показывая достаточный минимум самой необходимой информации. Размещение терминальных окон всех нодов на одном большом экране позволяет удобно оценивать производительность общей системы в целом. Интерактивные команды программы "nmon" используются для быстрого изменения показываемых значений. Сама программа представляет из себя всего один небольшой исполняемый файл, не требующий установки и просто копируемый с одного компьютера на другой.

Прежде чем мы продолжим, я хотел бы привести строки из Евангелия:



.................. == От Иоанна святое благовествование == .....................
=== Глава 12, Стих 19 ===
19 Фарисеи же говорили между собою: видите ли, что не успеваете ничего? весь
 мир идет за Ним.
20 Из пришедших на поклонение в праздник были некоторые Еллины.
21 Они подошли к Филиппу, который был из Вифсаиды Галилейской, и просили
 его, говоря: господин! нам хочется видеть Иисуса.
22 Филипп идет и говорит о том Андрею; и потом Андрей и Филипп сказывают о
 том Иисусу.
23 Иисус же сказал им в ответ: пришел час прославиться Сыну Человеческому.
24 Истинно, истинно говорю вам: если пшеничное зерно, пав в землю, не умрет,
 то останется одно; а если умрет, то принесет много плода.
25 Любящий душу свою погубит ее; а ненавидящий душу свою в мире сем сохранит
 ее в жизнь вечную.
26 Кто Мне служит, Мне да последует; и где Я, там и слуга Мой будет. И кто
 Мне служит, того почтит Отец Мой.

Лично для вас благая весть - Единородный Сын Божий Иисус Христос любит вас, Он взошёл на крест за ваши грехи, был распят и на третий день воскрес, сел одесную Бога и открыл нам дорогу в Царствие Небесное.

В преддверии светлого праздника Пасхи задумаемся. О нас, грешных - как мы живём сегодня? Служим ли мы Христу и следуем ли мы за Иисусом? Или даже и не знаем и не слыхали о Нём? Если так - откройте Библию, прочтите о великом подвиге, который совершил Иисус за вас, дорогой читатель. Как Еллины две тысячи лет тому назад, обратимся к Слову Господню и Церкви, сказав те самые слова "нам хочется видеть Иисуса". Отложите всё и устремитесь на Пасхальное служение в церкви. Посмотрите на братьев и сестёр, пришедших туда поклониться и последовать Богу - сколько людей верят и всем сердцем любят Господа! А что же те, кто не пришли? Даже лицемерные люди понимали тогда и ясно осознают сегодня: "видите ли, что не успеваете ничего? весь мир идет за Ним". Но нет, даже понимая очевидность ситуации многие, заградив своё сердце гордыней, остаются вне жизни Господней и Его благодати. Вот только надолго ли?

Покайтесь, примите Иисуса как вашего Спасителя, ибо наступают последние времена и время близко - стоит Судья у ворот.

Пожалуйста, в своих каждодневных трудах, какими бы занятыми вы себе ни казались - находите время для Бога, Его заповедей и Библии.

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


Вернёмся к нашим техническим деталям.

Регулярно производя кластерные вычисления, я столкнулся с необходимостью простого и удобного представления происходящих на узлах кластера процессов в почти реальном масштабе времени. Существующие системы мониторинга меня не впечатлили - в первую очередь своей громоздкостью и потом примитивностью показываемых результатов. Мне не хочется заучивать на какую ссылку на какой странице надо щёлкнуть, чтобы узнать количество принятых пакетов на сетевом интерфейсе. Вместо этого я предпочитаю сосредоточиться на самих вычислениях. Но всё равно надо было иметь возможность быстро оценить "загруженность" узлов кластера и равномерность распределения нагрузки.

Я обратил своё внимание на программу "nmon" почти сразу - она понравилась мне простотой интерфейса и гибкостью. Начав использовать версию 14g, я обнаружил ряд не устраивающих меня моментов. Мне хотелось иметь возможность "фильтровать" список показываемых устройств - ну и конечно видеть инфинибенд трафик. В версии 14g я мог оценить использование только одного из самых медленных IB транспортов - IPoIB. Наиболее полезный транспорт RDMA оставался "за кадром".

В результате я дополнил программу "nmon" несколькими процедурами, читающими счётчики на инфинибенд интерфейсах и ввёл следующие переменные среды:

  • NMON_IB_COUNTERS - маршрут к счётчикам IB интерфейса;
  • NMON_EXCLUDE_DISKS - имена дисков, которые надо исключить;
  • NMON_EXCLUDE_IFS - имена сетевых интерфейсов для исключения.
  • Исключать диски необходимо для избежания дубликатов - например, если у меня в системе имеется диск "sda" с разделом "sda1", который использован в LUKS устройстве md-0, то каждое обращение к диску "sda" будет учтено трижды. Хорошо при закупке оборудования :-), но плохо в реальной работе.

    Подобнo дискам, если у меня имеются два сетевых интерфейса, объединённых в "bond" устройство, мне не надо видеть имена интерфейсов-участников, всё что мне понадобится это статистика на уровне самого "bond" интерфейса. Таков же и подход к IB устройствам - стандартная карточка Melanox имеет 2 порта, один из которых в моём случае не работал и мне надо было его исключить из процесса сбора статистики.

    Собственно программа

    Ниже приведен для загрузки файл, содержащий полный исходный код программы nmon, её "структурную" схему, составленную мной при анализе программы перед началом работы и собственно исполняемый файл, скомпилированный для работы на Exadata.

    Версия NMON для Exadata

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

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

    Пример конфигурации для Exadata

    При использовании nmon на Exadata надо создать две раздельных конфигурации:

  • Конфигурация для узла кластера - database server node
  • Конфигурация для дисковой ячейки - storage cell node
  • Поскольку все эти компьютеры объединены в единую сеть посредством Infiniband, мои дополнения для nmon очень пригодятся. Всё, что потребуется - добавить нужные переменные в окружение пользователя, запускающего Nigel Monitor. Так как конфигурация задаётся переменными, а не конфигурационными файлами, то упрощается использование одной и той же программы nmon, но показывающей разные значения / диски / интерфейсы разным группам пользователей.

    Я запускаю "nmon" от имени пользователя "root", только в этом случае программа сможет "сбрасывать" переполненные счётчики портов инфинибенд.

    Database server node

    Измените профиль пользователя "root" на каждом узле Oracle RAC кластера:

    .................. == От Матфея святое благовествование == .....................
    === Глава 26, Стих 1 ===
    1 Когда  Иисус   окончил   все   слова   сии,   то   сказал   ученикам    Своим:
    2 вы знаете, что через два дня будет Пасха,  и  Сын  Человеческий  предан  будет
    на распятие.
    
    (b+/b-, c+/c-, +/-, *) >
    
    [root@exa01 ~]# grep NMON .bashrc
    export NMON_EXCLUDE_DISKS="'sda' 'sda1' 'sda2'"
    export NMON_EXCLUDE_IFS="'bond0' 'lo' 'eth3' 'eth1' 'eth2' 'eth0' 'eth5' 'ib0' 'ib1'"
    export NMON_IB_COUNTERS=" '/sys/class/infiniband/mlx4_0/ports/1/counters' "
    export NMON=ldnk
    [root@exa01 ~]#
    [root@exa01 ~]# cat run_nmon.sh
    #! /bin/bash
    /root/nmon 2>/tmp/nmon.err
    [root@exa01 ~]#
    

    В результате такой конфигурации мы сможем явно видеть использование системных ресурсов узлами - серверами баз данных. Примеры внизу показывают два нода Oracle RAC во время выполнения резервного копирования базы данных. Исходные файлы и резервная копия находятся на дисковых ячейках, что обусловило достаточно высокий трафик на IB интерфейсе.

    Первый узел, выполняющий бакап.

    При "переполнении" счётчиков порта infiniband программа "сбрасывает" его значение и на экране кратковременно появляется звёздочка синего цвета, непосредственно в строке заголовка "Network I/O". Удостоверьтесь сами, как быстро могут "забиваться" счётчики данных - попробуйте запустить программу "infinicheck", входящую в состав поставки OFED - и приглядитесь к поведению nmon. Кстати, "прыжков" к нулю и обратно не будет, хотя они и присутствовали в исходной версии 14g.

    В зависимости от интенсивности обмена данными, для каждого сетевого интерфейса теперь возможно переключение масштаба отображения данных - при переходе из "килобайт в секунду" в "мегабайты в секунду" напротив интерфейса появляется пометка "MB/s", цвет строки изменяется и количество пакетов показывается в тысячах (с пометкой "К"). При этом размер пакета (insize / outsize) остаётся в байтах.

    Второй узел, выполняющий бакап.

    Очень удобно наличие сетевых интерфейсов в соседних строках таблицы - можно сравнить количество IP пакетов на 10Gbps интерфейсе "eth4", bond-устройстве "bondib0", использующем транспорт IPoIB и IB интерфейсе "ib0", работающем через RDMA.

    Также правильно отображается количество и средняя загруженность процессоров (чего не было в исходной версии 14g).

    Storage cell node

    Измените профиль пользователя "root" на каждой ячейке Oracle Exadata:

    .................. == От Матфея святое благовествование == .....................
    === Глава 26, Стих 14 ===
    14 Тогда   один   из   двенадцати,   называемый   Иуда   Искариот,    пошел    к
    первосвященникам
    15 и сказал: что вы  дадите  мне,  и  я  вам  предам  Его?  Они  предложили  ему
    тридцать сребренников;
    16 и   с   того   времени   он   искал   удобного    случая    предать      Его.
    
    (b+/b-, c+/c-, +/-, *) >
    
    [root@cell01 ~]# cat exacell_flash_disks.group
    flash  sdq sdp sdn sdo sdu sdr sds sdt sdw sdx sdv sdy sdac sdaa sdab sdz
    disks sda sdb sdc sdd sde sdf sdg sdh sdi sdj sdk sdl
    [root@cell01 ~]# grep NMON .bashrc
    export NMON_EXCLUDE_IFS="'bond0' 'lo' 'eth3' 'eth1' 'eth2' 'ib0' 'ib1'"
    export NMON_IB_COUNTERS=" '/sys/class/infiniband/mlx4_0/ports/1/counters' "
    export NMON=gnmc
    [root@cell01 ~]# cat run_nmon.sh
    #! /bin/bash
    /root/nmon -g exacell_flash_disks.group 2>/tmp/nmon.err
    [root@cell01 ~]#
    

    В случае дисковой ячейки, я объединяю в две группы все диски и все flash-модули, добиваясь "суммирования" всех параметров ввода/вывода по двум категориям, что позволяет мне оценить эффективность использования FlashCache. Infiniband и сетевые параметры отображаются так же, как и в случае серверов БД.

    Приведенные ниже примеры показывают сервер базы данных и дисковую ячейку во время восстановления базы данных из резервной копии.

    Первый узел, выполняющий восстановление.

    Дисковая ячейка в моём случае показывает использование CPU не в виде суммарного графика, а на уровне каждого ядра процессора. Также появилась дополнительная секция для отображения оперативной памяти.

    Первая ячейка, участвующая в восстановлении.

    Естественно, любая из секций в приведенных конфигурациях может быть убрана или добавлена нажатием соответствующей клавиши. Нажатие "h" покажет вам возможные варианты.

    В заключение

    Для меня программа NMON стала полезным подспорьем в работе. Особенно её преимущества становятся заметны при отслеживании hadoop кластеров, где все узлы имеют одинаковые параметры и аппаратные характеристики.

    Я надеюсь что изменения, сделанные мной в программе nmon, помогут вам в вашей работе. Самое главное - запаситесь экраном побольше, чтобы на нём можно было разместить достаточное количество терминальных сессий, с индивидуальным экземпляром "nmon" в каждой.

    Также полезными могут оказаться программы-мультиплексоры терминала, типа "tmux" или "screen".

    Спасибо что зашли,

    Будьте благословенны!
    Денис

    2 Мая 2013 года.