Очень важно отслеживать все машины в кластере с точки зрения работоспособности ОС, узких мест, падений производительности и так далее. Есть множество доступных инструментов, которые выкладывают огромное количество графиков и статистики. Но для администратора кластера должны отображаться только выдающиеся статистические данные, которые серьезно влияют на производительность или работоспособность кластера.
Ганглия отвечает всем требованиям.
Введение в Ganglia:
Ganglia — это масштабируемая распределенная система мониторинга для высокопроизводительных вычислительных систем, таких как кластеры и сети. Он основан на иерархической структуре, предназначенной для федераций кластеров. Он использует протокол прослушивания / объявления на основе многоадресной рассылки для мониторинга состояния в кластерах и использует дерево двухточечных соединений между репрезентативными узлами кластера для объединения кластеров и агрегирования их состояния. Он использует широко используемые технологии, такие как XML для представления данных, XDR для компактной, переносимой передачи данных и RRDtool для хранения и визуализации данных. Он использует тщательно разработанные структуры данных и алгоритмы для достижения очень низких издержек на узел и высокого параллелизма.
Реализация надежна, портирована на обширный набор операционных систем и процессорных архитектур и в настоящее время используется более чем в 500 кластерах по всему миру. Он используется для связывания кластеров в университетских кампусах и по всему миру и может масштабироваться для обработки кластеров с 2000 узлами.
Зная немного о том, что такое Ganglia, есть некоторые чистые термины, которые нужно знать перед началом игры.
1. Узел. Обычно это машина, предназначенная для выполнения одной задачи с ее (1-4) основным процессором.
2. Кластер: Кластер состоит из группы узлов.
3. Сетка: Сетка состоит из группы кластеров.
Направляясь к Ganglia …
Система ganglia состоит из двух уникальных демонов, веб-интерфейса на основе PHP и нескольких других небольших служебных программ.
— Ganglia Monitoring Daemon (gmond)
Gmond — это многопоточный демон, который запускается на каждом узле кластера, который вы хотите отслеживать. Он отвечает за мониторинг изменений в состоянии хоста, объявление соответствующих изменений, прослушивание состояния всех других узлов ganglia с помощью одноадресной передачи. или многоадресные запросы канала и ответа для XML-описания состояния кластера. Каждый gmond передает информацию двумя различными способами: одноадресная / многоадресная передача состояния хоста в формате внешнего представления данных (XDR) с использованием сообщений UDP или отправка XML через TCP-соединение.
Ganglia Meta Daemon («gmetad») периодически опрашивает коллекцию дочерних источников данных, анализирует собранный XML, сохраняет все числовые, изменчивые метрики в циклических базах данных и экспортирует агрегированный XML по сокетам TCP клиентам , Источниками данных могут быть либо демоны «gmond», представляющие определенные кластеры, либо другие демоны «gmetad», представляющие наборы кластеров. Источники данных используют исходные IP-адреса для управления доступом и могут быть указаны с использованием нескольких IP-адресов для восстановления после отказа. Последняя возможность естественна для агрегации данных из кластеров, поскольку каждый демон «gmond» содержит все состояние своего кластера.
интерфейс Ganglia PHP Веб- интерфейс Ganglia предоставляет системным администраторам представление собранной информации через динамические веб-страницы в реальном времени.
Настройка Ganglia:
Предположим следующее:
— Кластер: «HadoopCluster»
— Узлы: «Master», «Slave1», «Slave2». {Рассмотрено только 3 узла для примеров. Аналогичным образом можно настроить множество узлов / ведомых.}
— Сетка: «Сетка» на данный момент состоит из «HadoopCluster».
gmond должен быть установлен на всех узлах, т.е. «Мастер», «Раб1», «Раб2». Gmetad и веб-интерфейс будут на Мастере. На главном узле мы можем видеть всю статистику в веб-интерфейсе. Однако у нас также может быть выделенный сервер для веб-интерфейса.
Шаг 1: Установить gmond на «Master», «Slave1» и «Slave2».
Установить Ganglia можно, загрузив соответствующий tar.gz, распаковав, сконфигурировав, изготовив и установив. Но зачем изобретать велосипед. Давайте установим то же самое с хранилищем.
ОС: Ubuntu 11.04
Ganglia версия 3.1.7
Hadoop версия CDH3 hadoop-0.20.2
Обновите ваши пакеты репозитория.
$ sudo apt-get update
$ sudo apt-get -y install build-essential libapr1-dev libconfuse-dev libexpat1-dev python-dev
$ sudo apt-get install ganglia-monitor
$ sudo vi /etc/ganglia/gmond.conf
/* This configuration is as close to 2.5.x default behavior as possible
The values closely match ./gmond/metric.h definitions in 2.5.x */
globals {
daemonize = yes
setuid = no
user = ganglia
debug_level = 0
max_udp_msg_len = 1472
mute = no
deaf = no
host_dmax = 0 /*secs */
cleanup_threshold = 300 /*secs */
gexec = no
send_metadata_interval = 0
}
/* If a cluster attribute is specified, then all gmond hosts are wrapped inside
* of a <CLUSTER> tag. If you do not specify a cluster tag, then all <HOSTS> will
* NOT be wrapped inside of a <CLUSTER> tag. */
cluster {
name = "HadoopCluster"
owner = "Master"
latlong = "unspecified"
url = "unspecified"
}
/* The host section describes attributes of the host, like the location */
host {
location = "unspecified"
}
/* Feel free to specify as many udp_send_channels as you like. Gmond
used to only support having a single channel */
udp_send_channel {
host = Master
port = 8650
ttl = 1
}
/* You can specify as many udp_recv_channels as you like as well. */
udp_recv_channel {
# mcast_join = 239.2.11.71
port = 8650
# bind = 239.2.11.71
}
/* You can specify as many tcp_accept_channels as you like to share
an xml description of the state of the cluster */
tcp_accept_channel {
port = 8649
} ...
проверьте глобалы один раз. В кластере {} измените имя кластера, как предполагается, на «HadoopCluster» с неопределенного, владельца на «Мастер» (может быть именем вашей организации / администратора), можно указать длинный адрес, URL-адрес в соответствии с вашим местоположением. Нет вреда в том, чтобы не указывать их.
Как уже говорилось, gmond общается с помощью UDP-сообщений или отправки XML по TCP-соединению. Итак, давайте выясним это!
udp_send_channel {
host = Master
port = 8650
ttl = 1
} ...
Поскольку gmond теперь настроен на «Master», канал приема UDP — 8650.
udp_recv_channel {
# mcast_join = 239.2.11.71
port = 8650
# bind = 239.2.11.71
}
tcp_accept_channel {
port = 8649
} ..
$ sudo /etc/init.d/ganglia-monitor start $ telnet Master 8649
Это значит, что Гмонд встал.
$ ps aux | grep gmond
Установка gmond на подчиненных машинах такая же, как и у gmond.conf,
/* This configuration is as close to 2.5.x default behavior as possible
The values closely match ./gmond/metric.h definitions in 2.5.x */
globals {
daemonize = yes
setuid = no
user = ganglia
debug_level = 0
max_udp_msg_len = 1472
mute = no
deaf = no
host_dmax = 0 /*secs */
cleanup_threshold = 300 /*secs */
gexec = no
send_metadata_interval = 0
}
/* If a cluster attribute is specified, then all gmond hosts are wrapped inside
* of a <CLUSTER> tag. If you do not specify a cluster tag, then all <HOSTS> will
* NOT be wrapped inside of a <CLUSTER> tag. */
cluster {
name = "HadoopCluster"
owner = "Master"
latlong = "unspecified"
url = "unspecified"
}
/* The host section describes attributes of the host, like the location */
host {
location = "unspecified"
}
/* Feel free to specify as many udp_send_channels as you like. Gmond
used to only support having a single channel */
udp_send_channel {
host = Master
port = 8650
ttl = 1
}
/* You can specify as many udp_recv_channels as you like as well. */
udp_recv_channel {
# mcast_join = 239.2.11.71
port = 8650
# bind = 239.2.11.71
}
/* You can specify as many tcp_accept_channels as you like to share
an xml description of the state of the cluster */
tcp_accept_channel {
port = 8649
}....
$ sudo /etc/init.d/ganglia-monitor start $ telnet Slave1 8649
Вывод должен содержать формат XML.
Это означает, что gmond работает.
$ ps aux | grep gmond
$ sudo apt-get install ganglia-webfrontend
$ sudo apt-get -y install build-essential libapr1-dev libconfuse-dev libexpat1-dev python-dev librrd2-dev
data_source «HadoopCluster».
Главное имя сетки «Сетка»
setuid_username « ganglia » Источник
данных задает имя кластера как «HadoopCluster», а «Мастер» — единственную точку консолидации всех метрик и статистики.
имя сетки изначально предполагается как «Сетка».
имя пользователя — ganglia.
Проверьте каталог / var / lib / ganglia. Если не существует, то
mkdir / var / lib / ganglia
mkdir / var / lib / ganglia / rrds /,
а затем
$ sudo chown -R ganglia:ganglia /var/lib/ganglia/
$ sudo /etc/init.d/gmetad start
$ sudo /etc/init.d/gmetad stop
$ gmetad -d 1
$ sudo /etc/init.d/gmetad restart
Шаг 3 : Установка зависимых от веб-интерфейса PHP пакетов в «Мастер»
$ sudo apt-get -y install build-essential libapr1-dev libconfuse-dev libexpat1-dev python-dev librrd2-dev
$ sudo /etc/init.d/apache2 restart
http: // Master / ganglia
в целом, http: // <hostname> / ganglia /
Вы должны увидеть некоторые графики.
Шаг 4 : Настройка метрики Hadoop с помощью Ganglia.
На Мастере (Наменод, JobTracker)
$ sudo vi /etc/hadoop-0.20/conf/hadoop-metrics.properties
# Configuration of the "dfs" context for null
#dfs.class=org.apache.hadoop.metrics.spi.NullContext
# Configuration of the "dfs" context for file
#dfs.class=org.apache.hadoop.metrics.file.FileContext
#dfs.period=10
#dfs.fileName=/tmp/dfsmetrics.log
# Configuration of the "dfs" context for ganglia
dfs.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
dfs.period=10
dfs.servers=Master:8650
# Configuration of the "dfs" context for /metrics
#dfs.class=org.apache.hadoop.metrics.spi.NoEmitMetricsContext
# Configuration of the "mapred" context for null
#mapred.class=org.apache.hadoop.metrics.spi.NullContext
# Configuration of the "mapred" context for /metrics
mapred.class=org.apache.hadoop.metrics.spi.NoEmitMetricsContext
# Configuration of the "mapred" context for file
#mapred.class=org.apache.hadoop.metrics.file.FileContext
#mapred.period=10
#mapred.fileName=/tmp/mrmetrics.log
# Configuration of the "mapred" context for ganglia
mapred.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
mapred.period=10
mapred.servers=Master:8650
# Configuration of the "jvm" context for null
#jvm.class=org.apache.hadoop.metrics.spi.NullContext
# Configuration of the "jvm" context for /metrics
jvm.class=org.apache.hadoop.metrics.spi.NoEmitMetricsContext
# Configuration of the "jvm" context for file
#jvm.class=org.apache.hadoop.metrics.file.FileContext
#jvm.period=10
#jvm.fileName=/tmp/jvmmetrics.log
# Configuration of the "jvm" context for ganglia
jvm.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
jvm.period=10
jvm.servers=Master:8650
# Configuration of the "rpc" context for null
#rpc.class=org.apache.hadoop.metrics.spi.NullContext
# Configuration of the "rpc" context for /metrics
rpc.class=org.apache.hadoop.metrics.spi.NoEmitMetricsContext
# Configuration of the "rpc" context for file
#rpc.class=org.apache.hadoop.metrics.file.FileContext
#rpc.period=10
#rpc.fileName=/tmp/rpcmetrics.log
# Configuration of the "rpc" context for ganglia
rpc.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
rpc.period=10
rpc.servers=Master:8650
Перезапустите сервисы hadoop в Master.
Перезапустите Gmond и Gmetad.
$ telnet Master 8649
будет выплевывать метрики XML Hadoop
на Slave1 (вторичный Namenode, Datanode, TaskTracker)
$ sudo gedit /etc/hadoop-0.20.2/conf/hadoop-metrics.properties
# Configuration of the "dfs" context for file
#dfs.class=org.apache.hadoop.metrics.file.FileContext
#dfs.period=10
#dfs.fileName=/tmp/dfsmetrics.log
# Configuration of the "dfs" context for ganglia
dfs.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
dfs.period=10
dfs.servers=Master:8650
# Configuration of the "dfs" context for /metrics
#dfs.class=org.apache.hadoop.metrics.spi.NoEmitMetricsContext
# Configuration of the "mapred" context for null
#mapred.class=org.apache.hadoop.metrics.spi.NullContext
# Configuration of the "mapred" context for /metrics
mapred.class=org.apache.hadoop.metrics.spi.NoEmitMetricsContext
# Configuration of the "mapred" context for file
#mapred.class=org.apache.hadoop.metrics.file.FileContext
#mapred.period=10
#mapred.fileName=/tmp/mrmetrics.log
# Configuration of the "mapred" context for ganglia
mapred.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
mapred.period=10
mapred.servers=Master:8650
# Configuration of the "jvm" context for null
#jvm.class=org.apache.hadoop.metrics.spi.NullContext
# Configuration of the "jvm" context for /metrics
jvm.class=org.apache.hadoop.metrics.spi.NoEmitMetricsContext
# Configuration of the "jvm" context for file
#jvm.class=org.apache.hadoop.metrics.file.FileContext
#jvm.period=10
#jvm.fileName=/tmp/jvmmetrics.log
# Configuration of the "jvm" context for ganglia
jvm.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
jvm.period=10
jvm.servers=Master:8650
# Configuration of the "rpc" context for null
#rpc.class=org.apache.hadoop.metrics.spi.NullContext
# Configuration of the "rpc" context for /metrics
rpc.class=org.apache.hadoop.metrics.spi.NoEmitMetricsContext
# Configuration of the "rpc" context for file
#rpc.class=org.apache.hadoop.metrics.file.FileContext
#rpc.period=10
#rpc.fileName=/tmp/rpcmetrics.log
# Configuration of the "rpc" context for ganglia
rpc.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
rpc.period=10
rpc.servers=Master:8650
$ sudo service hadoop-0.20-tasktracker restart
$ sudo service hadoop-0.20-datanode restart
$ telnet Master 8649
Аналогичная процедура, которая была выполнена для Slave1, должна выполняться для Slave2, перезапуская сервисы hadoop и gmond.
На Мастере,
Перезапусти gmond и gmetad с
$ sudo /etc/init.d/ganglia-monitor restart $ sudo /etc/init.d/gmetad restart
Нажмите веб-URL
http: // Master / ganglia.
Проверьте метрики, сетку, кластер и все узлы, для которых вы настроили.
Вы также можете наблюдать, как работают хосты, хосты не работают, общее количество процессоров Много больше в магазине!
Наслаждайтесь мониторингом вашего кластера! ?