Система построена по иерархическому принципу для интеграции кластеров. Для мониторинга состояния кластеров и их объединения используется древовидная система основанная на P2P соединениях и широковещательных протоколах. Система использует широко известные технологии: XML для представления данных, XDR для сжатия данных, RRDtool для хранения и визуализации данных. Она построена на базе тщательно спроектированных алгоритмов и структур данных, что обеспечивает надежность, позволяет свести к минимуму накладные расходы на каждом из узлов и достичь высокой степени параллелизма. Для отображения страниц статистики используется шаблонизаторTemplatePower.[5]
Система была портирована на широкий спектр операционных систем и процессорных архитектур, и в настоящее время используется на более чем 500 кластеров по всему миру. Существует возможность установки Ganglia на следующие операционные системы: Linux (i386, ia64, sparc, alpha, powerpc, m68k, mips, arm, hppa, s390), FreeBSD, NetBSD, OpenBSD, DragonflyBSD, MacOS X, Solaris, AIX, IRIX, Tru64, HPUX и Windows NT/XP/2000/2003/2008.[6]Ganglia используется для связи кластеров в университетских кампусах по всему миру и может масштабироваться для обработки кластеров имеющих до 2000 узлов в своем составе.
Необходимые пакеты для установки системы Ganglia присутствуют в большинстве современных репозиториев операционных систем, построенных на базе Шаблон:AbbrGNU Linux. Поэтому процесс установки не представляет особых сложностей. В Ubuntu необходимо выполнить команду:
Мы устанавливаем программу chkconfig для того чтобы иметь возможность управлять автоматическим запуском демонов при старте системы. В Fedorachkconfig как правило уже есть в системе, поэтому команда установки сокращается до:
Если открыть страницу не удалось, то необходимо скопировать конфигурационный файл пакета ganglia-webfrontend в папку кофигурации виртуальных хостовApache:
cp /etc/ganglia-webfrontend/apache.conf /etc/apache2/conf.d/ganglia-webfrontend.conf
service apache2 restart
Демоны gmetad и gmond должны запускаться автоматически при старте системы, для того чтобы проверить так ли это необходимо выполнить команду:
chkconfig --list|grep '^gm[etaon]*d'
gmetad 0:off 1:off 2:on 3:on 4:on 5:on 6:off
gmond 0:off 1:off 2:off 3:off 4:off 5:off 6:off
В результате выполнения команды мы должны увидеть gmetad и/илиgmond с опциями загрузки «on». Если на всех уровнях выставлено значение «off», то можно включить сервисы командой:
chkconfig --level 2345 gmetad on
chkconfig --level 2345 gmond on
это сработает только в том случае если демоны зарегистрированы как сервисы. Если нет, то можно прописать старт демона вручную, скопировав скрипт запуска из директории с исходным кодом Ganglia в директорию инициализации системы:[6]
Однако в Ubuntu вы увидите сообщение об ошибке, потому что в этой ОС используется отличная от других систем структура директорий инициализации системы. Поэтому иногда может понадобится создать несколько символических ссылок, для подмены не существующих директорий, которые использует Ganglia:[7]
Для того чтобы увидеть в каком виде Ganglia получает данные с хостов необходимо выполнить в терминале команду:
telnet localhost 8649
полный вывод команды (англ.)
root@host:/etc#telnetlocalhost8649
Trying::1...
Trying127.0.0.1...
Connectedtolocalhost.
Escapecharacteris'^]'.
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?><!DOCTYPE GANGLIA_XML [ <!ELEMENT GANGLIA_XML (GRID|CLUSTER|HOST)*><!ATTLIST GANGLIA_XML VERSION CDATA #REQUIRED><!ATTLIST GANGLIA_XML SOURCE CDATA #REQUIRED><!ELEMENT GRID (CLUSTER | GRID | HOSTS | METRICS)*><!ATTLIST GRID NAME CDATA #REQUIRED><!ATTLIST GRID AUTHORITY CDATA #REQUIRED><!ATTLIST GRID LOCALTIME CDATA #IMPLIED><!ELEMENT CLUSTER (HOST | HOSTS | METRICS)*><!ATTLIST CLUSTER NAME CDATA #REQUIRED><!ATTLIST CLUSTER OWNER CDATA #IMPLIED><!ATTLIST CLUSTER LATLONG CDATA #IMPLIED><!ATTLIST CLUSTER URL CDATA #IMPLIED><!ATTLIST CLUSTER LOCALTIME CDATA #REQUIRED><!ELEMENT HOST (METRIC)*><!ATTLIST HOST NAME CDATA #REQUIRED><!ATTLIST HOST IP CDATA #REQUIRED><!ATTLIST HOST LOCATION CDATA #IMPLIED><!ATTLIST HOST REPORTED CDATA #REQUIRED><!ATTLIST HOST TN CDATA #IMPLIED><!ATTLIST HOST TMAX CDATA #IMPLIED><!ATTLIST HOST DMAX CDATA #IMPLIED><!ATTLIST HOST GMOND_STARTED CDATA #IMPLIED><!ELEMENT METRIC (EXTRA_DATA*)><!ATTLIST METRIC NAME CDATA #REQUIRED><!ATTLIST METRIC VAL CDATA #REQUIRED><!ATTLIST METRIC TYPE (string | int8 | uint8 | int16 | uint16 | int32 | uint32 | float | double | timestamp) #REQUIRED><!ATTLIST METRIC UNITS CDATA #IMPLIED><!ATTLIST METRIC TN CDATA #IMPLIED><!ATTLIST METRIC TMAX CDATA #IMPLIED><!ATTLIST METRIC DMAX CDATA #IMPLIED><!ATTLIST METRIC SLOPE (zero | positive | negative | both | unspecified) #IMPLIED><!ATTLIST METRIC SOURCE (gmond) 'gmond'><!ELEMENT EXTRA_DATA (EXTRA_ELEMENT*)><!ELEMENT EXTRA_ELEMENT EMPTY><!ATTLIST EXTRA_ELEMENT NAME CDATA #REQUIRED><!ATTLIST EXTRA_ELEMENT VAL CDATA #REQUIRED><!ELEMENT HOSTS EMPTY><!ATTLIST HOSTS UP CDATA #REQUIRED><!ATTLIST HOSTS DOWN CDATA #REQUIRED><!ATTLIST HOSTS SOURCE (gmond | gmetad) #REQUIRED><!ELEMENT METRICS (EXTRA_DATA*)><!ATTLIST METRICS NAME CDATA #REQUIRED><!ATTLIST METRICS SUM CDATA #REQUIRED><!ATTLIST METRICS NUM CDATA #REQUIRED><!ATTLIST METRICS TYPE (string | int8 | uint8 | int16 | uint16 | int32 | uint32 | float | double | timestamp) #REQUIRED><!ATTLIST METRICS UNITS CDATA #IMPLIED><!ATTLIST METRICS SLOPE (zero | positive | negative | both | unspecified) #IMPLIED><!ATTLIST METRICS SOURCE (gmond) 'gmond'>
]>
<GANGLIA_XMLVERSION="3.1.7"SOURCE="gmond"><CLUSTERNAME="unspecified"LOCALTIME="1293106689"OWNER="unspecified"LATLONG="unspecified"URL="unspecified"><HOSTNAME="old"IP="30.30.30.2"REPORTED="1293106678"TN="11"TMAX="20"DMAX="0"LOCATION="unspecified"GMOND_STARTED="1293092118"><METRICNAME="load_one"VAL="1.33"TYPE="float"UNITS=" "TN="70"TMAX="70"DMAX="0"SLOPE="both"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="load"/><EXTRA_ELEMENTNAME="DESC"VAL="One minute load average"/><EXTRA_ELEMENTNAME="TITLE"VAL="One Minute Load Average"/></EXTRA_DATA></METRIC><METRICNAME="mem_total"VAL="895772"TYPE="float"UNITS="KB"TN="160"TMAX="1200"DMAX="0"SLOPE="zero"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="memory"/><EXTRA_ELEMENTNAME="DESC"VAL="Total amount of memory displayed in KBs"/><EXTRA_ELEMENTNAME="TITLE"VAL="Memory Total"/></EXTRA_DATA></METRIC><METRICNAME="os_release"VAL="2.6.35-24-generic"TYPE="string"UNITS=""TN="160"TMAX="1200"DMAX="0"SLOPE="zero"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="system"/><EXTRA_ELEMENTNAME="DESC"VAL="Operating system release date"/><EXTRA_ELEMENTNAME="TITLE"VAL="Operating System Release"/></EXTRA_DATA></METRIC><METRICNAME="proc_run"VAL="0"TYPE="uint32"UNITS=" "TN="0"TMAX="950"DMAX="0"SLOPE="both"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="process"/><EXTRA_ELEMENTNAME="DESC"VAL="Total number of running processes"/><EXTRA_ELEMENTNAME="TITLE"VAL="Total Running Processes"/></EXTRA_DATA></METRIC><METRICNAME="load_five"VAL="1.08"TYPE="float"UNITS=" "TN="70"TMAX="325"DMAX="0"SLOPE="both"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="load"/><EXTRA_ELEMENTNAME="DESC"VAL="Five minute load average"/><EXTRA_ELEMENTNAME="TITLE"VAL="Five Minute Load Average"/></EXTRA_DATA></METRIC><METRICNAME="gexec"VAL="OFF"TYPE="string"UNITS=""TN="160"TMAX="300"DMAX="0"SLOPE="zero"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="core"/><EXTRA_ELEMENTNAME="DESC"VAL="gexec available"/><EXTRA_ELEMENTNAME="TITLE"VAL="Gexec Status"/></EXTRA_DATA></METRIC><METRICNAME="disk_free"VAL="13.353"TYPE="double"UNITS="GB"TN="20"TMAX="180"DMAX="0"SLOPE="both"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="disk"/><EXTRA_ELEMENTNAME="DESC"VAL="Total free disk space"/><EXTRA_ELEMENTNAME="TITLE"VAL="Disk Space Available"/></EXTRA_DATA></METRIC><METRICNAME="mem_cached"VAL="211464"TYPE="float"UNITS="KB"TN="0"TMAX="180"DMAX="0"SLOPE="both"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="memory"/><EXTRA_ELEMENTNAME="DESC"VAL="Amount of cached memory"/><EXTRA_ELEMENTNAME="TITLE"VAL="Cached Memory"/></EXTRA_DATA></METRIC><METRICNAME="pkts_in"VAL="2.40"TYPE="float"UNITS="packets/sec"TN="0"TMAX="300"DMAX="0"SLOPE="both"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="network"/><EXTRA_ELEMENTNAME="DESC"VAL="Packets in per second"/><EXTRA_ELEMENTNAME="TITLE"VAL="Packets Received"/></EXTRA_DATA></METRIC><METRICNAME="bytes_in"VAL="2405.43"TYPE="float"UNITS="bytes/sec"TN="0"TMAX="300"DMAX="0"SLOPE="both"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="network"/><EXTRA_ELEMENTNAME="DESC"VAL="Number of bytes in per second"/><EXTRA_ELEMENTNAME="TITLE"VAL="Bytes Received"/></EXTRA_DATA></METRIC><METRICNAME="bytes_out"VAL="322.05"TYPE="float"UNITS="bytes/sec"TN="0"TMAX="300"DMAX="0"SLOPE="both"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="network"/><EXTRA_ELEMENTNAME="DESC"VAL="Number of bytes out per second"/><EXTRA_ELEMENTNAME="TITLE"VAL="Bytes Sent"/></EXTRA_DATA></METRIC><METRICNAME="swap_total"VAL="0"TYPE="float"UNITS="KB"TN="160"TMAX="1200"DMAX="0"SLOPE="zero"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="memory"/><EXTRA_ELEMENTNAME="DESC"VAL="Total amount of swap space displayed in KBs"/><EXTRA_ELEMENTNAME="TITLE"VAL="Swap Space Total"/></EXTRA_DATA></METRIC><METRICNAME="mem_free"VAL="92964"TYPE="float"UNITS="KB"TN="0"TMAX="180"DMAX="0"SLOPE="both"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="memory"/><EXTRA_ELEMENTNAME="DESC"VAL="Amount of available memory"/><EXTRA_ELEMENTNAME="TITLE"VAL="Free Memory"/></EXTRA_DATA></METRIC><METRICNAME="load_fifteen"VAL="1.02"TYPE="float"UNITS=" "TN="70"TMAX="950"DMAX="0"SLOPE="both"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="load"/><EXTRA_ELEMENTNAME="DESC"VAL="Fifteen minute load average"/><EXTRA_ELEMENTNAME="TITLE"VAL="Fifteen Minute Load Average"/></EXTRA_DATA></METRIC><METRICNAME="os_name"VAL="Linux"TYPE="string"UNITS=""TN="160"TMAX="1200"DMAX="0"SLOPE="zero"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="system"/><EXTRA_ELEMENTNAME="DESC"VAL="Operating system name"/><EXTRA_ELEMENTNAME="TITLE"VAL="Operating System"/></EXTRA_DATA></METRIC><METRICNAME="boottime"VAL="1293091899"TYPE="uint32"UNITS="s"TN="160"TMAX="1200"DMAX="0"SLOPE="zero"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="system"/><EXTRA_ELEMENTNAME="DESC"VAL="The last time that the system was started"/><EXTRA_ELEMENTNAME="TITLE"VAL="Last Boot Time"/></EXTRA_DATA></METRIC><METRICNAME="cpu_idle"VAL="89.1"TYPE="float"UNITS="%"TN="0"TMAX="90"DMAX="0"SLOPE="both"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="cpu"/><EXTRA_ELEMENTNAME="DESC"VAL="Percentage of time that the CPU or CPUs were idle and the system did not have an outstanding disk I/O request"/><EXTRA_ELEMENTNAME="TITLE"VAL="CPU Idle"/></EXTRA_DATA></METRIC><METRICNAME="cpu_user"VAL="7.9"TYPE="float"UNITS="%"TN="0"TMAX="90"DMAX="0"SLOPE="both"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="cpu"/><EXTRA_ELEMENTNAME="DESC"VAL="Percentage of CPU utilization that occurred while executing at the user level"/><EXTRA_ELEMENTNAME="TITLE"VAL="CPU User"/></EXTRA_DATA></METRIC><METRICNAME="cpu_nice"VAL="0.1"TYPE="float"UNITS="%"TN="0"TMAX="90"DMAX="0"SLOPE="both"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="cpu"/><EXTRA_ELEMENTNAME="DESC"VAL="Percentage of CPU utilization that occurred while executing at the user level with nice priority"/><EXTRA_ELEMENTNAME="TITLE"VAL="CPU Nice"/></EXTRA_DATA></METRIC><METRICNAME="cpu_aidle"VAL="68.9"TYPE="float"UNITS="%"TN="0"TMAX="3800"DMAX="0"SLOPE="both"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="cpu"/><EXTRA_ELEMENTNAME="DESC"VAL="Percent of time since boot idle CPU"/><EXTRA_ELEMENTNAME="TITLE"VAL="CPU aidle"/></EXTRA_DATA></METRIC><METRICNAME="mem_buffers"VAL="31112"TYPE="float"UNITS="KB"TN="0"TMAX="180"DMAX="0"SLOPE="both"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="memory"/><EXTRA_ELEMENTNAME="DESC"VAL="Amount of buffered memory"/><EXTRA_ELEMENTNAME="TITLE"VAL="Memory Buffers"/></EXTRA_DATA></METRIC><METRICNAME="cpu_system"VAL="1.3"TYPE="float"UNITS="%"TN="0"TMAX="90"DMAX="0"SLOPE="both"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="cpu"/><EXTRA_ELEMENTNAME="DESC"VAL="Percentage of CPU utilization that occurred while executing at the system level"/><EXTRA_ELEMENTNAME="TITLE"VAL="CPU System"/></EXTRA_DATA></METRIC><METRICNAME="part_max_used"VAL="78.0"TYPE="float"UNITS="%"TN="20"TMAX="180"DMAX="0"SLOPE="both"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="disk"/><EXTRA_ELEMENTNAME="DESC"VAL="Maximum percent used for all partitions"/><EXTRA_ELEMENTNAME="TITLE"VAL="Maximum Disk Space Used"/></EXTRA_DATA></METRIC><METRICNAME="disk_total"VAL="39.429"TYPE="double"UNITS="GB"TN="160"TMAX="1200"DMAX="0"SLOPE="both"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="disk"/><EXTRA_ELEMENTNAME="DESC"VAL="Total available disk space"/><EXTRA_ELEMENTNAME="TITLE"VAL="Total Disk Space"/></EXTRA_DATA></METRIC><METRICNAME="mem_shared"VAL="0"TYPE="float"UNITS="KB"TN="0"TMAX="180"DMAX="0"SLOPE="both"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="memory"/><EXTRA_ELEMENTNAME="DESC"VAL="Amount of shared memory"/><EXTRA_ELEMENTNAME="TITLE"VAL="Shared Memory"/></EXTRA_DATA></METRIC><METRICNAME="cpu_wio"VAL="1.5"TYPE="float"UNITS="%"TN="0"TMAX="90"DMAX="0"SLOPE="both"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="cpu"/><EXTRA_ELEMENTNAME="DESC"VAL="Percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request"/><EXTRA_ELEMENTNAME="TITLE"VAL="CPU wio"/></EXTRA_DATA></METRIC><METRICNAME="machine_type"VAL="x86"TYPE="string"UNITS=""TN="160"TMAX="1200"DMAX="0"SLOPE="zero"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="system"/><EXTRA_ELEMENTNAME="DESC"VAL="System architecture"/><EXTRA_ELEMENTNAME="TITLE"VAL="Machine Type"/></EXTRA_DATA></METRIC><METRICNAME="proc_total"VAL="368"TYPE="uint32"UNITS=" "TN="0"TMAX="950"DMAX="0"SLOPE="both"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="process"/><EXTRA_ELEMENTNAME="DESC"VAL="Total number of processes"/><EXTRA_ELEMENTNAME="TITLE"VAL="Total Processes"/></EXTRA_DATA></METRIC><METRICNAME="cpu_num"VAL="1"TYPE="uint16"UNITS="CPUs"TN="160"TMAX="1200"DMAX="0"SLOPE="zero"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="cpu"/><EXTRA_ELEMENTNAME="DESC"VAL="Total number of CPUs"/><EXTRA_ELEMENTNAME="TITLE"VAL="CPU Count"/></EXTRA_DATA></METRIC><METRICNAME="cpu_speed"VAL="1400"TYPE="uint32"UNITS="MHz"TN="160"TMAX="1200"DMAX="0"SLOPE="zero"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="cpu"/><EXTRA_ELEMENTNAME="DESC"VAL="CPU Speed in terms of MHz"/><EXTRA_ELEMENTNAME="TITLE"VAL="CPU Speed"/></EXTRA_DATA></METRIC><METRICNAME="pkts_out"VAL="2.73"TYPE="float"UNITS="packets/sec"TN="0"TMAX="300"DMAX="0"SLOPE="both"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="network"/><EXTRA_ELEMENTNAME="DESC"VAL="Packets out per second"/><EXTRA_ELEMENTNAME="TITLE"VAL="Packets Sent"/></EXTRA_DATA></METRIC><METRICNAME="swap_free"VAL="0"TYPE="float"UNITS="KB"TN="0"TMAX="180"DMAX="0"SLOPE="both"><EXTRA_DATA><EXTRA_ELEMENTNAME="GROUP"VAL="memory"/><EXTRA_ELEMENTNAME="DESC"VAL="Amount of available swap memory"/><EXTRA_ELEMENTNAME="TITLE"VAL="Free Swap Space"/></EXTRA_DATA></METRIC></HOST></CLUSTER></GANGLIA_XML>
Connectionclosedbyforeignhost.
gmetad (Ganglia метадемон)
Для сбора информации и её отображения на стороне пользователя в системе Ganglia используется gmetad.[8] По умолчанию для получения данных от других клиентов используется 8651 порт. Конфигурационный файл можно найти в директории:
/etc/ganglia/gmetad.conf
Исполняемый файл самого демона находится в директории:
gmond (англ.Ganglia monitoring daemon) — демон который запускается на всех узлах для которых необходимо собирать статистику.
Конфигурационный файл можно найти в директории:
/etc/ganglia/gmond.conf
Для получения справки о параметрах конфигурационного файла, можно использовать команду:
man gmond.conf
полный вывод команды (англ.)
gmond.conf(5)GangliaMonitoringSystemgmond.conf(5)
NAME
gmond.conf-configurationfileforgangliamonitoringdaemon(gmond)
DESCRIPTION
Thegmond.conffileisusedtoconfigurethegangliamonitoringdaemon(gmond)whichis
partoftheGangliaDistributedMonitoringSystem.
SECTIONSANDATTRIBUTES
Allsectionsandattributesarecase-insensitive.Forexample,nameorNAMEorNameor
NaMeareallequivalent.
Somesectionscanbeincludedintheconfigurationfilemultipletimesandsomesections
aresingular.Forexample,youcanhaveonlyoneclustersectiontodefinetheattributes
oftheclusterbeingmonitored;however,youcanhavemultipleudp_recv_channelsections
toallowgmondtoreceivemessageonmultipleUDPchannels.
cluster
Thereshouldonlybeoneclustersectiondefined.Thissectioncontrolshowgmondreports
theattributesoftheclusterthatitispartof.
Theclustersectionhasfourattributes:name,owner,latlongandurl.
Forexample,
cluster{name="Millennium Cluster"owner="UC Berkeley CS Dept."latlong="N37.37 W122.23"url="http://www.millennium.berkeley.edu/"}Thenameattributesspecifiesthenameoftheclusterofmachines.Theownertag
specifiestheadministratorsofthecluster.Thepairname/ownershouldbeuniquetoall
clustersintheworld.
ThelatlongattributeisthelatitudeandlongitudeGPScoordinatesofthisclusteron
earth.Specifiedto1mileaccuracywithtwodecimalplacesperaxisindecimal.
Theurlformoreinformationonthecluster.Intendedtogivepurpose,owner,
administration,andaccountdetailsforthiscluster.
TheredirectivesdirectlycontroltheXMLoutputofgmond.Forexample,thecluster
configurationexampleabovewouldtranslateintothefollowingXML.
<CLUSTERNAME="Millennium Cluster"OWNER="UC Berkeley CS Dept."LATLONG="N37.37 W122.23"URL="http://www.millennium.berkeley.edu/">
...
</CLUSTER>
host
Thehostsectionprovidesinformationaboutthehostrunningthisinstanceofgmond.
Currentlyonlythelocationstringattributeissupported.Example:
host{location="1,2,3"}ThenumbersrepresentRack,RankandPlanerespectively.
globals
Theglobalssectioncontrolsgeneralcharacteristicsofgmondsuchaswhetherisshould
daemonize,whatuseritshouldrunas,whetherisshouldsend/receivedateandsuch.The
globalssectionhasthefollowingattributes:daemonize,setuid,user,debug_level,mute,
deaf,allow_extra_data,host_dmax,cleanup_threshold,gexec,send_metadata_intervaland
module_dir.
Forexample,
globals{daemonize=truesetuid=trueuser=nobody
host_dmax=3600}Thedaemonizeattributeisaboolean.Whentrue,gmondwilldaemonize.Whenfalse,gmond
willrunintheforeground.
Thesetuidattributeisaboolean.Whentrue,gmondwillsetitseffectiveUIDtotheuid
oftheuserspecifiedbytheuserattribute.Whenfalse,gmondwillnotchangeits
effectiveuser.
Thedebug_levelisanintegervalue.Whensettozero(0),gmondwillrunnormally.A
debug_levelgreaterthanzerowillresultingmondrunningintheforegroundand
outputtingdebugginginformation.Thehigherthedebug_levelthemoreverbosetheoutput.
Themuteattributeisaboolean.Whentrue,gmondwillnotsenddataregardlessofany
otherconfigurationdirectives.
Thedeafattributeisaboolean.Whentrue,gmondwillnotreceivedataregardlessofany
otherconfigurationdirectives.
Theallow_extra_dataattributeisaboolean.Whenfalse,gmondwillnotsendoutthe
EXTRA_ELEMENTandEXTRA_DATApartsoftheXML.Thismightbeusefulifyouareusingyour
ownfrontendtothemetricdataandwillliketosavesomebandwith.
Thehost_dmaxvalueisanintegerwithunitsinseconds.Whensettozero(0),gmondwill
neverdeleteahostfromitslistevenwhenaremotehosthasstoppedreporting.If
host_dmaxissettoapositivenumberthengmondwillflushahostafterithasnotheard
fromitforhost_dmaxseconds.Bytheway,dmaxmeans"delete max".
Thecleanup_thresholdistheminimumamountoftimebeforegmondwillcleanupanyhostsor
metricswheretn>dmaxa.k.a.expireddata.
Thegexecbooleanallowsyoutospecifywhethergmondwillannouncethehostsavailability
torungexecjobs.Note:thisrequiresthatgexecdisrunningonthehostandtheproper
keyshavebeeninstalled.
Thesend_metadata_intervalestablishesanintervalinwhichgmondwillsendorresendthe
metadatapacketsthatdescribeeachenabledmetric.Thisdirectivebydefaultissetto0whichmeansthatgmondwillonlysendthemetadatapacketsatstartupanduponrequest
fromothergmondnodesrunningremotely.Ifanewmachinerunninggmondisaddedtoa
cluster,itneedstoannounceitselfandinformallothernodesofthemetricsthatit
currentlysupports.Inmulticastmode,thisisn't a problem because any node can request the metadata of all other nodes in the cluster. However in unicast mode, a resend interval must be established. The interval value is the minimum number of seconds between resends. The module_dir is an optional parameter indicating the directory where the DSO modules are to be located. If absent, the value to use is set at configure time with the --with-moduledir option which will default if omitted to the a subdirectory named "ganglia" in the directory where libganglia will be installed. For example, in a 32-bit Intel compatible Linux host that is usually: /usr/lib/ganglia udp_send_channel You can define as many udp_send_channel sections as you like within the limitations of memory and file descriptors. If gmond is configured as mute this section will be ignored. The udp_send_channel has a total of seven attributes: mcast_join, mcast_if, host, port, ttl, bind and bind_hostname. bind and bind_hostname are mutually exclusive. For example, the 2.5.x version gmond would send on the following single channel by default... udp_send_channel { mcast_join = 239.2.11.71 port = 8649 } The mcast_join and mcast_if attributes are optional. When specified gmond will create the UDP socket and join the mcast_join multicast group and send data out the interface specified by mcast_if. You can use the bind attribute to bind to a particular local address to be used as the source for the multicast packets sent or let gmond resolve the default hostname if bind_hostname = yes. If only a host and port are specified then gmond will send unicast UDP messages to the hosts specified. You could specify multiple unicast hosts for redundancy as gmond will send UDP messages to all UDP channels. Be carefull though not to mix multicast and unicast attributes in the same udp_send_channel definition. For example... udp_send_channel { host = host.foo.com port = 2389 } udp_send_channel { host = 192.168.3.4 port = 2344 } would configure gmond to send messages to two hosts. The host specification can be an IPv4/IPv6 address or a resolvable hostname. udp_recv_channel You can specify as many udp_recv_channel sections as you like within the limits of memory and file descriptors. If gmond is configured deaf this attribute will be ignored. The udp_recv_channel section has following attributes: mcast_join, bind, port, mcast_if, family. The udp_recv_channel can also have an acl definition (see ACCESS CONTROL LISTS below). For example, the 2.5.x gmond ran with a single udp receive channel... udp_recv_channel { mcast_join = 239.2.11.71 bind = 239.2.11.71 port = 8649 } The mcast_join and mcast_if should only be used if you want to have this UDP channel receive multicast packets the multicast group mcast_join on interface mcast_if. If you do not specify multicast attributes then gmond will simply create a UDP server on the specified port. You can use the bind attribute to bind to a particular local address. The family address is set to inet4 by default. If you want to bind the port to an inet6 port, you need to specify that in the family attribute. Ganglia will not allow IPV6=>IPV4 mapping (for portability and security reasons). If you want to listen on both inet4 and inet6 for a particular port, explicitly state it with the following: udp_recv_channel { port = 8666 family = inet4 } udp_recv_channel { port = 8666 family = inet6 } If you specify a bind address, the family of that address takes precedence. f your IPv6 stack doesn'tsupportIPV6_V6ONLY,awarningwillbeissuedbutgmondwillcontinueworking(thisshouldrarelyhappen).
MulticastNote:formulticast,specifyingabindaddresswiththesamevalueusedformcast_joinwillpreventunicastUDPmessagestothesameportfrombeingprocessed.
tcp_accept_channel
Youcanspecifyasmanytcp_accept_channelsectionsasyoulikewithinthelimitationsof
memoryandfiledescriptors.Ifgmondisconfiguredtobemute,thenthesesectionsare
ignored.
Thetcp_accept_channelhasthefollowingattributes:bind,port,interface,familyand
timeout.Atcp_accept_channelmayalsohaveanaclsectionspecified(seeACCESSCONTROL
LISTSbelow).
Forexample,2.5.xgmondwouldacceptconnectionsonasingleTCPchannel.
tcp_accept_channel{port=8649}Thebindaddressisoptionalandallowsyoutospecifywhichlocaladdressgmondwillbindtoforthischannel.
Theportisanintegerthanspecifieswhichporttoanswerrequestsfordata.
Thefamilyaddressissettoinet4bydefault.Ifyouwanttobindtheporttoaninet6
port,youneedtospecifythatinthefamilyattribute.GangliawillnotallowIPV6=>IPV4
mapping(forportabilityandsecurityreasons).Ifyouwanttolistenonbothinet4and
inet6foraparticularport,explicitlystateitwiththefollowing:
tcp_accept_channel{port=8666family=inet4
}tcp_accept_channel{port=8666family=inet6
}Ifyouspecifyabindaddress,thefamilyofthataddresstakesprecedence.IfyourIPv6
stackdoesn't support IPV6_V6ONLY, a warning will be issued but gmond will continue working (this should rarely happen). The timeout attribute allows you to specify how many microseconds to block before closing a connection to a client. The default is set to 1 second (1000000 usecs). If you have a very slow connection you may need to increase this value. The interface is not implemented at this time (use bind). collection_group You can specify as many collection_group section as you like within the limitations of memory. A collection_group has the following attributes: collect_once, collect_every and time_threshold. A collection_group must also contain one or more metric sections. The metric section has the following attributes: (one of name or name_match; name_match is only permitted if pcre support is compiled in), value_threshold and title. For a list of available metric names, run the following command: % gmond -m Here is an example of a collection group for a static metric... collection_group { collect_once = yes time_threshold = 1800 metric { name = "cpu_num" title = "Number of CPUs" } } This collection_group entry would cause gmond to collect the cpu_num metric once at startup (since the number of CPUs will not change between reboots). The metric cpu_num would be send every 1/2 hour (1800 seconds). The default value for the time_threshold is 3600 seconds if no time_threshold is specified. The time_threshold is the maximum amount of time that can pass before gmond sends all metrics specified in the collection_group to all configured udp_send_channels. A metric may be sent before this time_threshold is met if during collection the value surpasses the value_threshold (explained below). Here is an example of a collection group for a volatile metric... collection_group { collect_every = 60 time_threshold = 300 metric { name = "cpu_user" value_threshold = 5.0 title = "CPU User" } metric { name = "cpu_idle" value_threshold = 10.0 title = "CPU Idle" } } This collection group would collect the cpu_user and cpu_idle metrics every 60 seconds (specified in collect_every). If cpu_user varies by 5.0% or cpu_idle varies by 10.0%, then the entire collection_group is sent. If no value_threshold is triggered within time_threshold seconds (in this case 300), the entire collection_group is sent. Each time the metric value is collected the new value is compared with the old value collected. If the difference between the last value and the current value is greater than the value_threshold, the entire collection group is send to the udp_send_channels defined. It'simportanttonotethatallmetricsinacollectiongrouparesentevenwhenonlya
singlevalue_thresholdissurpassed.
Inadditionauserfriendlytitlecanbesubstitutedforthemetricnamebyincludinga
titlewithinthemetricsection.
Byusingthename_matchparameterinsteadofname,itispossibletouseasingle
definitiontoconfiguremultiplemetricsthatmatcharegularexpression.Theperl
compatibleregularexpression(pcre)syntaxisused.Thisapproachisparticularlyuseful
foraseriesofmetricsthatmayvaryinnumberbetweenreboots(e.g.metricnamesthat
aregeneratedforeachindividualNICorCPUcore).
Hereisanexampleofusingthename_matchdirectivetoenablethemulticpumetrics:
metric{name_match="multicpu_([a-z]+)([0-9]+)"value_threshold=1.0
title="CPU-\\2 \\1"}Notethatintheexampleabove,therearetwomatches:thealphabeticalmatchmatchesthe
variationsofthemetricname(e.g.idle,system)whilethenumericmatchmatchestheCPU
corenumber.Thesecondthingtonoteistheuseofsubstitutionswithintheargumentto
title.
Ifbothnameandname_matcharespecified,thennameisignored.
Modules
Amodulessectioncontainstheparametersthatarenecessarytoloadametricmodule.A
metricmoduleisadynamicallyloadablemodulethatextendstheavailablemetricsthat
gmondisabletocollect.Eachmodulessectioncontainsatleastonemodulesection.
Withinamodulesectionarethedirectivesname,language,enabled,pathandparams.The
modulenameisthenameofthemoduleasdeterminedbythemodulestructureifthemodule
wasdevelopedinC/C++.Alternatively,thenamecanbethenameofthesourcefileifthe
modulehasbeenimplementedinainterpretedlanguagesuchaspython.Alanguage
designationmustbespecifiedasastringvalueforeachmodule.Thelanguagedirective
mustcorrespondtothesourcecodelanguageinwhichthemodulewasimplemented(ex.
language="python").Ifalanguagedirectivedoesnotexistforthemodule,theassumed
languagewillbe"C/C++".Theenableddirectiveallowsametricmoduletobeeasily
enabledordisabledthroughtheconfigurationfile.Iftheenableddirectiveisnot
includedinthemoduleconfiguration,theenabledstatewilldefaultto"yes".Onething
tonoteisthatifamodulehasbeendisabledyetthemetricwhichthatmoduleimplements
isstilllistedaspartofacollectiongroup,gmondwillproduceawarningmessage.
Howevergmondwillcontinuetofunctionnormallybysimplyignoringthemetric.Thepath
isthepathfromwhichgmondisexpectedtoloadthemodule(C/C++compileddynamically
loadablemoduleonly).Theparamsdirectivecanbeusedtopassasinglestringparameter
directlytothemoduleinitializationfunction(C/C++moduleonly).Multipleparameters
canbepassedtothemodule's initialization function by including one or more param sections. Each param section must be named and contain a value directive. Once a module has been loaded, the additional metrics can be discovered by invoking gmond -m. modules { module { name = "example_module" enabled = yes path = "modexample.so" params = "An extra raw parameter" param RandomMax { value = 75 } param ConstantValue { value = 25 } } } Include This directive allows the user to include additional configuration files rather than having to add all gmond configuration directives to the gmond.conf file. The following example includes any file with the extension of .conf contained in the directory conf.d as if the contents of the included configuration files were part of the original gmond.conf file. This allows the user to modularize their configuration file. One usage example might be to load individual metric modules by including module specific .conf files. include ('/etc/ganglia/conf.d/*.conf')
ACCESSCONTROL
Theudp_recv_channelandtcp_accept_channeldirectivescancontainanAccessControlList
(ACL).ThisACLallowsyoutospecifyexactlywhichhostsgmondprocessdatafrom.
Anexampleofanaclentrylookslike
acl{default="deny"access{ip=192.168.0.4
mask=32action="allow"}}ThisACLwillbydefaultrejectalltrafficthatisnotspecificallyfromhost192.168.0.4
(themasksizeforanIPv4addressis32,themasksizeforanIPv6addressis128to
representasinglehost).
Hereisanotherexample
acl{default="allow"access{ip=192.168.0.0
mask=24action="deny"}access{ip=::ff:1.2.3.0
mask=120action="deny"}}ThisACLwillbydefaultallowalltrafficunlessitcomesfromthetwosubnetsspecified
withaction="deny".
EXAMPLE
Thedefaultbehaviorfora2.5.xgmondwouldbespecifiedas...
udp_recv_channel{mcast_join=239.2.11.71
bind=239.2.11.71
port=8649}udp_send_channel{mcast_join=239.2.11.71
port=8649}tcp_accept_channel{port=8649}Toseethecompletedefaultconfigurationforgmondsimplyrun:
%gmond-t
gmondwillprintoutitsdefaultbehaviorinaconfigurationfileandthenexit.
Capturingthisoutputtoafilecanserveasausefulstartingpointforcreatingyourown
customconfiguration.
%gmond-t>custom.conf
editcustom.conftotasteandthen%gmond-c./custom.conf
NOTES
Thegangliawebsiteisathttp://ganglia.info/.
COPYRIGHT
Copyright(c)2005TheUniversityofCalifornia,Berkeley
ganglia/3.1.72010-02-17gmond.conf(5)
gexec (gexecd) — это масштабируемая система удаленного выполнения задач (программ) в кластерах, которая может работать совместно с системой Ganglia. Для удаленного выполнения параллельных (распределенных) заданий используется RSA аутентификация (демон authd).[11] Система прозрачно перенаправляет программные потоки (stdin, stdout, stderr) и события между распределенными процессами, что позволяет создавать распределенную среду переменных окружения и масштабировать систему до более чем 1000 узлов в составе, без потери надежности. Механизм работы основывается на создании древовидного массива всех TCPсокетов между узлами и распространении управляющей информации по всему дереву. С помощью иерархической системы управления, gexec распределяет как и вычислительные задания, так и ресурсы. Это позволяет устранить проблемы, связанные с ограничениями каждого из узлов, например, ограничение на количество открытых дескрипторов файлов.[12]
Для получения списка хостов в кластере gexec опрашивает узел на котором установлен модуль gmond:
Если узлы на которых запущен gmond недоступны, то список входящих в кластер узлов берется из переменой окружения GEXEC_SVRS.
В gexec интегрирована возможность распределения нагрузки в кластере. Информация о степени загружености узлов запрашивается у gmond. Для балансировки нагрузки задание запускается на наименее загруженных узлах:
gexec -n 5 program
т.е. вышеописанная команда запустит на исполнение программу program на пяти наименее загруженных узлах кластера.[9]
Для включения поддержки gexec в Ganglia необходимо установить соответствующую переменную в конфигурационном файле gmond.conf:
globals{
•••
gexec=yes
•••
}
этот параметр означает, что каждая машина на которой запущен демонgmond будет рассылать специальное сообщение о том, что на машине установлена gexec.
Если вы компилируете Ganglia из исходных кодов, то необходимо явно включить поддержку gexec на стадии конфигурирования:
% ./configure --enable-gexec
gexec можно использовать для выполнения параллельных задач:[13]
↑Материалы Девятой международной конференции-семинара ВЫСОКОПРОИЗВОДИТЕЛЬНЫЕ ПАРАЛЛЕЛЬНЫЕ ВЫЧИСЛЕНИЯ НА КЛАСТЕРНЫХ СИСТЕМАХ / С.М. Аракелян (ответственный редактор). — Владимир: Издательство Владимирского государственного университета, 2009. — С. 65. — 437 с. — 150 экз. экз. — ISBN 978-5-89368-958-7