> Linux集群 > 服务器集群 >

centos集群上安装ganglia-3.6.0监控hadoop-2.2.0和hbase-0.96.0

Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于测量数以千计的节点。每台计算机都运行一个收集和发送度量数据(如处理器速度、内存使用量等)的名为 gmond 的守护进程。它将从操作系统和指定主机中收集。接收所有度量数据的主机可以显示这些数据并且可以将这些数据的精简表单传递到层次结构中。正因为有这种层次结构模式,才使得 Ganglia 可以实现良好的扩展。gmond 带来的系统负载非常少,这使得它成为在集群中各台计算机上运行的一段代码,而不会影响用户性能。

一、Ganglia组件

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实例。

一般来说每个集群需要一个接收的gmond,每个网站需要一个gmetad。

Ganglia工作流如图所示:


左边是运行在各个节点上的gmond进程,这个进程的配置只由节点上/etc/gmond.conf的文件决定。所以,在各个监视节点上都需要安装和配置该文件。

 

右上角是更加负责的中心机(通常是这个集群中的一台,也可以不是)。在这个台机器上运行这着gmetad进程,收集来自各个节点上的信息并存储在rrdtool上,该进程的配置只由/etc/gmetad.conf决定。   

右下角显示了关于网页方面的一些信息。我们的浏览网站时调用php脚本,从RRDTool数据库中抓取信息,动态的生成各类图表。

二、安装依赖

注:建议使用超级用户安装

 

  1. #yum install –y gcc gcc-c++ libpng freetype zlib libdbi apr*  libxml2-devel pkg-config glib pixman \  
  2. pango pango-devel freetye-devel fontconfig cairo cairo-devel libart_lgpl libart_lgpl-devel pcre* rrdtool*  
三、安装expat依赖

 

  1. #cd /home/aaron  
  2. #wget http://jaist.dl.sourceforge.net/project/expat/expat/2.1.0/expat-2.1.0.tar.gz  
  3. #tar -xf expat-2.1.0.tar.gz  
  4. #cd expat-2.1.0  
  5. #./configure --prefix=/usr/local/expat  
  6. #make  
  7. #make install  

对于64位操作系统,需要手动的拷贝下动态链接库到lib64下

 

  1. #mkdir /usr/local/expat/lib64  
  2. #cp -a /usr/local/expat/lib/* /usr/local/expat/lib64/  

 

四、安装confuse

  1. #cd /home/aaron  
  2. #wget http://ftp.twaren.net/Unix/NonGNU//confuse/confuse-2.7.tar.gz  
  3. #tar -xf confuse-2.7.tar.gz  
  4. #cd confuse-2.7  
  5. #./configure CFLAGS=-fPIC --disable-nls --prefix=/usr/local/confuse    
  6. #make    
  7. #make install    
64bit机器需要拷贝动态链接库:
  1. #mkdir -p /usr/local/confuse/lib64    
  2. #cp -a -f /usr/local/confuse/lib/* /usr/local/confuse/lib64/    
五、安装ganglia
  1. #cd /home/aaron  
  2. #wget http://jaist.dl.sourceforge.net/project/ganglia/ganglia%20monitoring%20core/3.6.0/ganglia-3.6.0.tar.gz  
  3. #tar -xf ganglia-3.6.0.tar.gz  
  4. #cd ganglia-3.6.0  
  5. #./configure --with-gmetad --enable-gexec --with-libconfuse=/usr/local/confuse --with-libexpat=/usr/local/expat --prefix=/usr/local/ganglia --sysconfdir=/etc/ganglia  
  6. #make    
  7. #make install    
六、服务端配置
创建rrdtool数据目录,看$ganglia-3.2.0/web/conf.php里面的gmetad_root变量,并根据apache的运行用户创建权限,例如apache运行于apache用户上 。
  1. #mkdir -p /var/lib/ganglia/rrds  
  2. #mkdir -p /var/lib/ganglia/dwoo  
  3. #chown -R root:root /var/lib/ganglia  
配置一个数据源,修改/etc/ganglia/gmetad.conf文件,同时将运行用户设置为rrdtool的目录权限用户,例如apache用户
  1. data_source "hadoop" 192.168.1.108:8649  
  2. setuid_username "root"  
说明:这里的 " hadoop " 表示的是集群的名称,后面的内容是这个集群中所包含的主机信息,也就是要监控的主机ip。
添加自启动脚本
  1. #cp -f gmetad/gmetad.init /etc/init.d/gmetad  
  2. #cp -f /usr/local/ganglia/sbin/gmetad /usr/sbin/gmetad  
  3. #chkconfig --add gmetad  
启动gmetad服务
  1. #service gmetad start  
看见Starting GANGLIA gmetad: [ OK ]就代表运行正常了。 通过telnet localhost 8651验证gmetad是否正常
七、客户端配置(gmond节点)
本机安装如下:
  1. #cp -f gmond/gmond.init /etc/init.d/gmond  
  2. #cp -f /usr/local/ganglia/sbin/gmond /usr/sbin/gmond  
  3. #chkconfig --add gmond  
  4. #gmond --default_config > /etc/ganglia/gmond.conf  
对于生成的默认配置文件需要做适当的修改
  1. globals {  
  2.   daemonize = yes  
  3.   setuid = yes  
  4.   user = root /*运行Ganglia的用户*/  
  5.   debug_level = 0  
  6.   max_udp_msg_len = 1472  
  7.   mute = no  
  8.   deaf = no  
  9.   host_dmax = 120 /*secs */  
  10.   cleanup_threshold = 300 /*secs */  
  11.   gexec = no  
  12.   send_metadata_interval = 15 /*发送数据的时间间隔*/  
  13. }  
  14.   
  15. cluster {  
  16.   name = "hadoop" /*集群名称*/  
  17.   owner = "root" /*运行Ganglia的用户*/  
  18.   latlong = "unspecified"  
  19.   url = "unspecified"  
  20. }  
  21.   
  22. udp_send_channel {  
  23. #  mcast_join =  239.2.11.71  /*注释掉组播*/  
  24.   host = 192.168.1.108/*发送给安装gmetad的机器*/  
  25.   port = 8649  
  26.   ttl = 1  
  27. }  
  28.   
  29. udp_recv_channel {  #接受UDP包配置  
  30. # mcast_join = 239.2.11.71  
  31.   port = 8649   
  32. # bind = 239.2.11.71  
  33. }  
其中name是将要在服务端进行的分组,是服务端的数据源。接下来开启服务
  1. #service gmond start  
看见Starting GANGLIA gmetad: [ OK ]代表启动成功。如果有失败,可以讲gmond.conf中的debug从0改为100,看更多的日志,然后进行排查。

 

八、服务端的WEB配置
PHP程序需要依赖Apache来运行,因此需要安装如下依赖

  1. # yum -y install php httpd   
  2. # service httpd start //启动httpd 服务  

 

九、测试安装是否成功 

  1. # vi /var/www/html/index.php   
输入: 
  1. <?php   
  2. phpinfo();   
  3. ?>   
保存,然后浏览器 master/index.php 
正常是看到php的信息。 
  1. #cd /home/ruifeng.shan  
  2. #wget http://jaist.dl.sourceforge.net/project/ganglia/ganglia-web/3.5.10/ganglia-web-3.5.10.tar.gz  
  3. #tar -xf ganglia-web-3.5.10.tar.gz  
  4. #cd ganglia-web-3.5.10  
  5. #make install  
这样 在/var/www/html/下 生成了 ganglia 目录
注:
Ganglia访问失败:
There was 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而不需要重启,刷新页面,即可访问。但此方法只是一权宜之计。要想永久修改selinux设置,还是要使用第一种方法。 
重启httpd服务器即可看到效果 
  1. #service httpd restart  
使用http://master/ganglia查看对应的ganglia信息。(注:master为运行gmetad的主机的hostname)

Hadoop和HBase社区一直使用它作为监控集群的业界标准方案。在maste上安装gmetad,在master、node、slave上安装gmond。为了监控Hadoop和HBase,需要对它们做一些配置。这里Hadoop使用的是2.2.0版本,HBase使用的是0.96.0这个版本。这里监控的分布式集群也是文章《Ubuntu和CentOS中分布式配置Hadoop-2.2.0》和《CentOS分布式环境安装HBase-0.96.0》中布置的hadoop和hbase。

为了能让ganglia监控hadoop,Hadoop2.2.0需要配置hadoop-2.2.0/etc/hadoop/目录下的hadoop-metrics.properties和hadoop-metrics2.properties文件。其中,hadoop-metrics.properties配置如下:

 

  1. # Configuration of the "dfs" context for null  
  2. dfs.class=org.apache.hadoop.metrics.spi.NullContext  
  3.   
  4. # Configuration of the "dfs" context for file  
  5. #dfs.class=org.apache.hadoop.metrics.file.FileContext  
  6. #dfs.period=10  
  7. #dfs.fileName=/tmp/dfsmetrics.log  
  8.   
  9. # Configuration of the "dfs" context for ganglia  
  10. # Pick one: Ganglia 3.0 (former) or Ganglia 3.1 (latter)  
  11. # dfs.class=org.apache.hadoop.metrics.ganglia.GangliaContext  
  12. # dfs.class=org.apache.hadoop.metrics.ganglia.GangliaContext31  
  13. # dfs.period=10  
  14. # dfs.servers=localhost:8649  
  15.   
  16.   
  17. # Configuration of the "mapred" context for null  
  18. mapred.class=org.apache.hadoop.metrics.spi.NullContext  
  19.   
  20. # Configuration of the "mapred" context for file  
  21. #mapred.class=org.apache.hadoop.metrics.file.FileContext  
  22. #mapred.period=10  
  23. #mapred.fileName=/tmp/mrmetrics.log  
  24.   
  25. # Configuration of the "mapred" context for ganglia  
  26. # Pick one: Ganglia 3.0 (former) or Ganglia 3.1 (latter)  
  27. # mapred.class=org.apache.hadoop.metrics.ganglia.GangliaContext  
  28. # mapred.class=org.apache.hadoop.metrics.ganglia.GangliaContext31  
  29. # mapred.period=10  
  30. # mapred.servers=localhost:8649  
  31.   
  32.   
  33. # Configuration of the "jvm" context for null  
  34. #jvm.class=org.apache.hadoop.metrics.spi.NullContext  
  35.   
  36. # Configuration of the "jvm" context for file  
  37. #jvm.class=org.apache.hadoop.metrics.file.FileContext  
  38. #jvm.period=10  
  39. #jvm.fileName=/tmp/jvmmetrics.log  
  40.   
  41. # Configuration of the "jvm" context for ganglia  
  42. # jvm.class=org.apache.hadoop.metrics.ganglia.GangliaContext  
  43. # jvm.class=org.apache.hadoop.metrics.ganglia.GangliaContext31  
  44. # jvm.period=10  
  45. # jvm.servers=localhost:8649  
  46.   
  47. # Configuration of the "rpc" context for null  
  48. rpc.class=org.apache.hadoop.metrics.spi.NullContext  
  49.   
  50. # Configuration of the "rpc" context for file  
  51. #rpc.class=org.apache.hadoop.metrics.file.FileContext  
  52. #rpc.period=10  
  53. #rpc.fileName=/tmp/rpcmetrics.log  
  54.   
  55. # Configuration of the "rpc" context for ganglia  
  56. # rpc.class=org.apache.hadoop.metrics.ganglia.GangliaContext  
  57. # rpc.class=org.apache.hadoop.metrics.ganglia.GangliaContext31  
  58. # rpc.period=10  
  59. # rpc.servers=localhost:8649  
  60.   
  61.   
  62. # Configuration of the "ugi" context for null  
  63. ugi.class=org.apache.hadoop.metrics.spi.NullContext  
  64.   
  65. # Configuration of the "ugi" context for file  
  66. #ugi.class=org.apache.hadoop.metrics.file.FileContext  
  67. #ugi.period=10  
  68. #ugi.fileName=/tmp/ugimetrics.log  
  69.   
  70. # Configuration of the "ugi" context for ganglia  
  71. # ugi.class=org.apache.hadoop.metrics.ganglia.GangliaContext  
  72. # ugi.class=org.apache.hadoop.metrics.ganglia.GangliaContext31  
  73. # ugi.period=10  
  74. # ugi.servers=localhost:8649  

hadoop-metrics2.properties文件配置如下:

 

  1. #  
  2. #   Licensed to the Apache Software Foundation (ASF) under one or more  
  3. #   contributor license agreements.  See the NOTICE file distributed with  
  4. #   this work for additional information regarding copyright ownership.  
  5. #   The ASF licenses this file to You under the Apache License, Version 2.0  
  6. #   (the "License"); you may not use this file except in compliance with  
  7. #   the License.  You may obtain a copy of the License at  
  8. #  
  9. #       http://www.apache.org/licenses/LICENSE-2.0  
  10. #  
  11. #   Unless required by applicable law or agreed to in writing, software  
  12. #   distributed under the License is distributed on an "AS IS" BASIS,  
  13. #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
  14. #   See the License for the specific language governing permissions and  
  15. #   limitations under the License.  
  16. #  
  17.   
  18. # syntax: [prefix].[source|sink].[instance].[options]  
  19. # See javadoc of package-info.java for org.apache.hadoop.metrics2 for details  
  20.   
  21. ##############一定要注释掉原来的这块,否则会监控不到#########  
  22. #*.sink.file.class=org.apache.hadoop.metrics2.sink.FileSink  
  23. # default sampling period, in seconds  
  24. #*.period=10  
  25. #############################################################  
  26.   
  27. # The namenode-metrics.out will contain metrics from all context  
  28. #namenode.sink.file.filename=namenode-metrics.out  
  29. # Specifying a special sampling period for namenode:  
  30. #namenode.sink.*.period=8  
  31.   
  32. #datanode.sink.file.filename=datanode-metrics.out  
  33.   
  34. # the following example split metrics of different  
  35. # context to different sinks (in this case files)  
  36. #jobtracker.sink.file_jvm.context=jvm  
  37. #jobtracker.sink.file_jvm.filename=jobtracker-jvm-metrics.out  
  38. #jobtracker.sink.file_mapred.context=mapred  
  39. #jobtracker.sink.file_mapred.filename=jobtracker-mapred-metrics.out  
  40.   
  41. #tasktracker.sink.file.filename=tasktracker-metrics.out  
  42.   
  43. #maptask.sink.file.filename=maptask-metrics.out  
  44.   
  45. #reducetask.sink.file.filename=reducetask-metrics.out  
  46.   
  47. *.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31  
  48. *.sink.ganglia.period=10  
  49.   
  50. *.sink.ganglia.slope=jvm.metrics.gcCount=zero,jvm.metrics.memHeapUsedM=both  
  51. *.sink.ganglia.dmax=jvm.metrics.threadsBlocked=70,jvm.metrics.memHeapUsedM=40  
  52.   
  53. namenode.sink.ganglia.servers=master:8649  
  54. resourcemanager.sink.ganglia.servers=master:8649  
  55.   
  56. datanode.sink.ganglia.servers=master:8649    
  57. nodemanager.sink.ganglia.servers=master:8649    
  58.     
  59.     
  60. maptask.sink.ganglia.servers=master:8649    
  61. reducetask.sink.ganglia.servers=master:8649   
为了让ganglia监控hbase,需要配置hbase-0.96.0目录下的conf目录中的hadoop-metrics2-hbase.properties文件。内容如下:

 

  1. # syntax: [prefix].[source|sink].[instance].[options]  
  2. # See javadoc of package-info.java for org.apache.hadoop.metrics2 for details  
  3.   
  4. ##############一定要注释掉原来的这块,否则会监控不到#########  
  5. #*.sink.file*.class=org.apache.hadoop.metrics2.sink.FileSink  
  6. # default sampling period  
  7. #*.period=10  
  8. #############################################################  
  9.   
  10. # Below are some examples of sinks that could be used  
  11. # to monitor different hbase daemons.  
  12.   
  13. # hbase.sink.file-all.class=org.apache.hadoop.metrics2.sink.FileSink  
  14. # hbase.sink.file-all.filename=all.metrics  
  15.   
  16. # hbase.sink.file0.class=org.apache.hadoop.metrics2.sink.FileSink  
  17. # hbase.sink.file0.context=hmaster  
  18. # hbase.sink.file0.filename=master.metrics  
  19.   
  20. # hbase.sink.file1.class=org.apache.hadoop.metrics2.sink.FileSink  
  21. # hbase.sink.file1.context=thrift-one  
  22. # hbase.sink.file1.filename=thrift-one.metrics  
  23.   
  24. # hbase.sink.file2.class=org.apache.hadoop.metrics2.sink.FileSink  
  25. # hbase.sink.file2.context=thrift-two  
  26. # hbase.sink.file2.filename=thrift-one.metrics  
  27.   
  28. # hbase.sink.file3.class=org.apache.hadoop.metrics2.sink.FileSink  
  29. # hbase.sink.file3.context=rest  
  30. # hbase.sink.file3.filename=rest.metrics  
  31.   
  32. *.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31  
  33. *.sink.ganglia.period=10  
  34.   
  35. hbase.sink.ganglia.period=10  
  36. hbase.sink.ganglia.servers=master:8649  



(责任编辑:IT)