Ganglia3.6.0监控hadoop-2.20集群和hbase-0.96.0集群
Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于测量数以千计的节点。每台计算机都运行一个收集和发送度量数据(如处理器速度、内存使用量等)的名为 gmond 的守护进程。它将从操作系统和指定主机中收集。接收所有度量数据的主机可以显示这些数据并且可以将这些数据的精简表单传递到层次结构中。正因为有这种层次结构模式,才使得 Ganglia 可以实现良好的扩展。gmond 带来的系统负载非常少,这使得它成为在集群中各台计算机上运行的一段代码,而不会影响用户性能。
Ganglia 监控套件包括三个主要部分:gmond,gmetad,和ganglia-web。
Gmond :是一个守护进程,他运行在每一个需要监测的节点上,收集监测统计,发送和接受在同一个组播或单播通道上的统计信息如果他是一个发送者(mute=no)他会收集基本指标,比如系统负载(load_one),CPU利用率。他同时也会发送用户通过添加C/Python 模块来自定义的指标。 如果他是一个接收者(deaf=no)他会聚合所有从别的主机上发来的指标,并把它们都保存在内存缓冲区中。
Gmetad:也是一个守护进程,他定期检查gmonds,从那里拉取数据,并将他们的指标存储在RRD存储引擎中。他可以查询多个集群并聚合指标。他也被用于生成用户界面的web前端。
Ganglia-web :顾名思义,他应该安装在有gmetad运行的机器上,以便读取RRD文件。 集群是主机和度量数据的逻辑分组,比如数据库服务器,网页服务器,生产,测试,QA等,他们都是完全分开的,你需要为每个集群运行单独的gmond实例。
一般来讲
Ganglia server:运行gmetad,apahce2+php,rrdtool
Ganglia Client:运行 gmond
Ganglia运行模式(单播与多播)
Ganglia的收集数据工作可以工作在单播(unicast)或多播(multicast)模式下,默认为多播模式。
单播:发送自己收集到的监控数据到特定的一台或几台机器上,可以跨网段。
多播:发送自己收集到的监控数据到同一网段内所有的机器上,同时收集同一网段内的所有机器发送过来的监控数据。因为是以广播包的形式发送,因此需要同一网段内。但同一网段内,又可以定义不同的发送通道。
Ganglia工作流如图所示:
左边是运行在各个节点上的gmond进程,这个进程的配置只由节点上/etc/gmond.conf的文件决定。所以,在各个监视节点上都需要安装和配置该文件。
右上角是更加负责的中心机(通常是这个集群中的一台,也可以不是)。在这个台机器上运行这着gmetad进程,收集来自各个节点上的信息并存储在RRDtool上,该进程的配置只由/etc/gmetad.conf决定。
右下角显示了关于网页方面的一些信息。我们的浏览网站时调用php脚本,从RRDTool数据库中抓取信息,动态的生成各类图表。
Ganglia3.6.0+ganglia-web3.5.12安装文档
共20台机器,建议如下(参照先前安装文档)
主机名 |
master1 |
master2 |
master3 |
master4 |
master5 |
slave1 |
…… |
slave15 |
服务 |
gmond |
gmond |
gmond |
gmond data_source |
gmetad(ganglia-web) gmond data_source (apache2+php) |
gmond
|
…… |
gmond
|
标识 |
Client |
Client |
Client |
Client |
Ganglia server |
Client |
…… |
Client |
访问:http://master5/ganglia-web查看
首先是各种主要依赖包的安装
confuse, pcre ,expant,apr,par-util, , httpd,php, ,rrdtool
若中间出现其他依赖问题请自行安装
###############################################################################
#下载confuse并编译安装
tarzxvf confuse-2.7.tar.gz
cdconfuse-2.7
./configureCFLAGS=-fPIC --disable-nls --prefix=/usr/local/confuse
make&& make install
#64位操作系统需要拷贝链接库文件
mkdir -p /usr/local/confuse/lib64
cp -a -f /usr/local/confuse/lib/*/usr/local/confuse/lib64/
#####################################################################
# 下载pcre并编译安装
tar -xf pcre-8.32.tar.gz && cd pcre-8.32
./configure --prefix=/usr/local/pcre
make && make install
#64位操作系统需要拷贝链接库文件
mkdir -p /usr/local/pcre/lib64
cp -a -f /usr/local/pcre/lib/*/usr/local/pcre/lib64
##########################################################
#下载expat并编译安装
#tarzxvf expat-2.0.1.tar.gz
#cdexpat-2.0.1
#./configure--prefix=/usr/local/expat
#make&& make install
#64位操作系统需要拷贝链接库文件
mkdir/usr/local/expat/lib64
cp-a /usr/local/expat/lib/* /usr/local/expat/lib64/
###############################################################################
#下载apr并编译安装
tarzxvf apr-1.4.6.tar.gz
cdapr-1.4.6
./configure --prefix=/usr/local/apr
make&& make install
#下载apr-util并编译安装
tarzxvf apr-util-1.4.1.tar.gz
cdapr-util-1.4.1
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr--with-expat=/usr/local/expat
make&& make install
#64位操作系统需要拷贝链接库文件
cp-f /usr/local/apr/include/apr-1/* /usr/local/apr/include/
mkdir-p /usr/local/apr/lib64
cp-a -f /usr/local/apr/lib/* /usr/local/apr/lib64/
#下载httpd并编译安装(配置apache服务器)
tar -xf httpd-2.2.23.tar.gz && cd httpd-2.2.23
./configure --prefix=/usr/local/apache2 --enable-so --enable-mods-shared=most --with-included-apr --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
make && make install
echo '/usr/local/apache2/bin/apachectl start' >>/etc/rc.d/rc.local
#加入系统服务并启动
# chkconfig httpd on
#service httpd start
#####################################################################
ganglia-web需要PHPJSON模块,该模块包含在PHP5.2及其以上版本。PHP 5.1需要自行安装JSON模块,非常的麻烦。
tar -xf php-5.5.9.tar.gz && cd php-5.5.9
./configure --prefix=/usr/local/php-5.5--with-apxs2=/usr/local/apache2/bin/apxs
make && make install
vi/usr/local/apache2/conf/httpd.conf,添加如下内容(有的不需要修改):
SetHandler application/x-httpd-php
SetHandler application/x-httpd-php
SetHandler application/x-httpd-php-source
找到
重启apache,
service httpd start
测试安装是否成功
写一个index.php文件,
# vi /var/www/html/index.php
phpinfo();
?>
进行测试访问:
http://master5/index.php,会显示php信息,说明正常,至此apache+php已搭建好。
###############################################################################
#下载rrdtool并编译安装
#tarzxvf rrdtool-1.2.27.tar.gz
#cdrrdtool-1.2.27
#./configure--prefix=/usr/local/rrdtool
#make&& make install
###############################################################################
(假设在master5上安装ganglia服务器)
ganglia新的版本分为两部分,gangliacore和ganglia-web
第一部分:ganglia核心部分
1.安装gmetad(./configure –with-gmetad )
tarzxvf ganglia-3.6.0.tar.gz
cdganglia-3.6.0
一般
./configure--prefix=/usr/local/ganglia --with-gmetad --enable-gexec --enable-status-sysconfdir=/etc/ganglia
参照上述依赖包的安装(可能需要)
./configure--prefix=/usr/local/ganglia --with-librrd=/usr/local/rrdtool--with-libapr=/usr/local/apr --with-libexpat=/usr/local/expat--with-libconfuse=/usr/local/confuse --with-libpcre=/usr/local/pcre --with-gmetad --enable-gexec --enable-status -sysconfdir=/etc/ganglia
继续
make&& make install
2.处理命令行文件
#添加启动脚本(这里也添加了gmond,自己监控自己)
#cd ganglia-3.6.0
#cpgmetad/gmetad.init /etc/rc.d/init.d/gmetad
#cp gmond/gmond.init /etc/rc.d/init.d/gmond
cp -f /usr/local/ganglia/sbin/gmetad /usr/sbin/gmetad
cp -f /usr/local/ganglia/sbin/gmond /usr/sbin/gmond
#或者修改/etc/rc.d/init.d/gmetad和/etc/rc.d/init.d/gmond,分别指定如下参数:
GMETAD=/usr/local/ganglia/sbin/gmetad
GMOND=/usr/local/ganglia/sbin/gmond
#chkconfig --add gmond && chkconfig gmond on
#chkconfig --add gmetad && chkconfig gmetad on
#新建配置文件目录
mkdir /etc/ganglia
gmond -t |tee /etc/ganglia/gmond.conf
#新建rrdtool目录放入图像
mkdir -p /var/lib/ganglia/rrds
chown – R nobody:nobody /var/lib/ganglia/rrd //nobody
3.修改配置文件
gmetad.conf( 加粗部分为需要修改的)
vi /etc/ganglia/gmetad.conf
data_source "cluster1" localhost//修改集群名称,data_source主机(master5)
gridname "Ganglia_Hadoop" // 修改监控台名称
gmond.conf
vi /etc/ganglia/gmond.conf
name = "cluster1"
//修改为gmetad.conf中的集群名称,
这里默认先采用组播,待测试完成后再改成单播。
########################################################################
第二部分ganglia-web:(也装在master5上)
早期版本ganglia-web组件是集成在ganglia安装包里的,一个名为web的目录;新版本的ganglia把两者分开了。
前提条件:已搭建好apache+php服务器
另指定gangliaweb目录
tar -xf ganglia-web-3.5.12.tar.gz
#cp -r ganglia-web-3.5.12 /var/www/html/ganglia-web
#cd /var/www/html/ganglia-web
#cpconf_default.php conf.php
vimconf.php(加粗部分为修改)
$conf['gmetad_root'] = "/var/lib/ganglia";
$conf['rrds'] = "${conf['gmetad_root']}/rrds";
$conf['rrdtool'] = "/usr/local/rrdtool/bin/rrdtool"; //参照上述安装rrdtool时的prefix
$conf['external_location'] = "http://master5/ganglia-web"; //master5为服务器所在主机名
$conf['case_sensitive_hostnames'] = false;
创建dwoo_compiled_dir ,dwoo_cache_dir 并修改权限
mkdir -p /var/lib/ganglia-web/dwoo/compiled mkdir -p /var/lib/ganglia-web/dwoo/cache
chmod 777 /var/lib/ganglia-web/dwoo/compiled
chmod 777 /var/lib/ganglia-web/dwoo/cache
修改apache目录(因为上面另指定ganglia-web的目录)
sudo vim /usr/local/apache2/conf/httpd.conf
#修改为DocumentRoot“/var/www/html”
#修改为
启动并访问:
service httpd start //apache启动
service gmetad start //gmetad启动
service gmond start //gmond启动
http://master5/ganglia-web/ //把master5替换成自己的ganglia服务器主机名
###############################################################################
现在假设在slave1上安装
只需要安装gmond及其依赖即可,其它apache、php、rrdtool等都不需要安装。
一般需要安装expat,apr,apr-util,confuse,pcre,安装请参照上述,否则./configure
的参数会有所变化,如果出现其他依赖问题请自行安装。
tar zxvf ganglia-3.6.0.tar.gz
cd ganglia-3.1.7
一般
./configure --prefix=/usr/local/ganglia--enable-gexec --enable-status -sysconfdir=/etc/ganglia
参照上述依赖包的安装(可能需要)
./configure --prefix=/usr/local/ganglia--with-libapr=/usr/local/apr --with-libexpat=/usr/local/expat--with-libconfuse=/usr/local/confuse --with-libpcre=/usr/local/pcre --enable-gexec --enable-status-sysconfdir=/etc/ganglia
继续
make && make install
#添加启动脚本
cp gmond/gmond.init /etc/rc.d/init.d/gmond
cp -f /usr/local/ganglia/sbin/gmond /usr/sbin/gmond
#新建配置文件目录
mkdir -p /etc/ganglia
scp master1:/etc/ganglia/gmond.conf /etc/ganglia // 直接从ganglia服务器端拷贝配置文件
chkconfig --add gmond && chkconfig gmondon
#启动服务
service gmondf start
这时刷新http://master1/ganglia-web,发现会多出一个slave1 node。
安装到其他client同上。
为了让ganglia可以监控到hadoop和hbase,需要修改相关配置文件,修改后要同步到相关所有机器上
Hadoop配置文件修改:
Hadoop-2.2.0
修改:/etc/hadoop/hadoop-metrics2.properties
##注释掉这三行
#############################################################
#*.sink.file.class=org.apache.hadoop.metrics2.sink.FileSink
# default sampling period, in seconds
#*.period=10
###############################################################################
#添加以下
*.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31
*.sink.ganglia.period=10
*.sink.ganglia.slope=jvm.metrics.gcCount=zero,jvm.metrics.memHeapUsedM=both
*.sink.ganglia.dmax=jvm.metrics.threadsBlocked=70,jvm.metrics.memHeapUsedM=40
namenode.sink.ganglia.servers=master5:8649 # ganglia服务器
resourcemanager.sink.ganglia.servers=master5:8649
datanode.sink.ganglia.servers=master5:8649
nodemanager.sink.ganglia.servers=master5:8649
maptask.sink.ganglia.servers=master5:8649
reducetask.sink.ganglia.servers=master5:8649
然后重启hadoop集群
可以在ganglia监控页面的Metric部分发现hadoop相关的metric
Hbase 配置文件修改
Hbase-0.96.0
修改etc/conf/hadoop-metrics2-hbase.properties
#注释掉这三行
########################################
#*.sink.file*.class=org.apache.hadoop.metrics2.sink.FileSink
# default sampling period
#*.period=10
###########################################################
##添加以下
*.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31
*.sink.ganglia.period=10
hbase.sink.ganglia.period=10
hbase.sink.ganglia.servers=master5:8649 # ganglia服务器
重启hbase集群
可以在ganglia监控页面的Metric部分发现hbase相关的metric。
问题1:
Ganglia访问失败:
Therewas an error collecting ganglia data (127.0.0.1:8652): fsockopen error:Permission denied
解决:
需要关闭selinux:vi /etc/selinux/config,把SELINUX=enforcing改成SELINUX=disable;需要重启机器。可以使用命令setenforce 0来关闭selinux而不需要重启,刷新页面,即可访问。
问题2
servicegmetad status
查看gmetad已死,subsys被锁
重启gmetad进程
servicegmetad restart
问题3
service gmond status
查看gmond已死,subsys被锁,
若重启无效的话,有很大可能是gmond.conf的配置有错误,请仔细查看。
问题4
显示页面无图象展示
首先检查selinux是否关闭
然后查看conf.php文件里的rrdtool路径是否正确,该文件是否存在,注意该路径是rrdtool可执行文件的路径不是其安装目录。
然后查看/var/lib/ganglia/rrds是否存在,能否被写。
chownnobody:nobody /var/lib/ganglia/rrds # make sure RRDTool can write here
要想配置冗余数据源,此时只能默认使用组播
配置多个数据源,修改/etc/ganglia/gmetad.conf文件
data_source "Clustername" host1 host2
根据前述规划,这里配置成
data_source "cluster1" master4 master5 //集群名称,xml数据源主机(冗余)
host1 host2是gmetad用来得到集群信息的xml文件的数据源,如果没有写端口,则采用默认的8649端口,gmetad默认每隔15秒通过tcp连接去该主机下载xml文件。所以他们可以是gmond的8649端口,也可以是gmetad的8651端口,它们都可以提供集群信息的xml格式的数据下载。
host1 host2是or的关系,如果host1无法下载,则才会尝试去host2下载,所以它们应该都是同一个集群的节点,保存着同样的数据。采用multicast模式时,每台gmond节点都有本cluster内节点机器的所有监控数据,因此不需要把所有节点写入data_source中。建议写入不低于2个,在host1节点死机的时候,会自动找host2节点取数据
为减少网络流量,这里把gmond的数据传输改为单播的形式,单播的目的地为上述data_source所指定的主机(这里只能一台),即只有一个中央数据收集节点。
也就是说,单播和冗余数据源不能同时配置
单播配置
vi/etc/ganglia/gmond.conf
globals {
daemonize =yes
setuid =yes
user =nobody /*有的改成运行ganglia的用户,root*/
debug_level= 0
max_udp_msg_len = 1472
mute = no
deaf = no
allow_extra_data = yes
host_dmax =86400 /*secs. Expires (removes from web interface) hosts in 1 day */
host_tmax =20 /*secs */
cleanup_threshold = 300 /*secs */
gexec = no
send_metadata_interval = 0 /*secs */ /*发送数据的时间间隔,按需修改15*/
}
cluster {
name ="cluster1" /*修改为gmetad.conf中的集群名称*/
owner ="unspecified" /*运行Ganglia的用户,这里没动* /
latlong ="unspecified"
url ="unspecified"
}
udp_send_channel {
#bind_hostname = yes
# mcast_join = 239.2.11.71 /*注释掉组播*/
host = 192.168.1.101 /*发送给data_source的机器*/
port = 8649
ttl = 1
}
udp_recv_channel {
# mcast_join= 239.2.11.71 /*注释掉*/
port = 8649
# bind =239.2.11.71 /*注释掉*/
# retry_bind= true /*注释掉*/
}
重启gmetad和gmond服务
如果要监控的集群跨机房,或者对集群想实现不同小组的监控,这里可以采用ganglia的分组监控,组内是多播,组内各机器互为备份,ganglia服务器只需要连接到每组内的某一个机器或者几个机器作为data_source即可。示例如下。
实验情况下,分组监控后找不到hadoop和hbase的metric了,暂未解决
举例:
Master1……master5为一组:cluster1,主要是集群重要节点的监控。中心机为master5
Slave1……slave15为一组:cluster2,主要是集群中datanode的监控。中心机为slave1
修改gmetad.conf
data_source "cluster1" master5:8649 master4:8649
data_source "cluster2" slave1:8650 slave2:8650
分组的标识是gmond.conf配置文件中的cluster name值和port值,同一分组中的机器的这两个值都必须一致,不同组的机器,这两个值不同。
cluster name的值要与gmetad.conf中的相应条目保持一致;port值的配置需要在udp_send_channel、udp_recv_channel和tcp_accept_channel三个部分同时设定,注间端口不要冲突
修改cluster1的gmond.conf
cluster {
name ="cluster1"
}
udp_send_channel {
port = 8649
}
udp_recv_channel {
port = 8649
}
tcp_accept_channel {
port = 8649
}
修改cluster2的gmond.conf
cluster {
name ="cluster2"
}
udp_send_channel {
port = 8650
}
udp_recv_channel {
port = 8650
}
tcp_accept_channel {
port = 8650
}
重启gmetad和gmond服务