1.Ganglia了解

安装部署Ganglia之前我们要了解下Ganglia是什么

对于这个工具,大家可能比较陌生,但是它功能非常强大,如果我们想收集所有服务器、网络设备的数据,那么ganglia绝对是首选,在深入学习之前,还是先从基础概念了解起吧!

Ganglia是一款为HPC(高性能计算)集群而设计的可扩展的分布式监控系统,它可以监视和显示集群中的节点的各种状态信息,它由运行在各个节点上的gmond守护进程来采集CPU 、内存、硬盘利用率、I/O负载、网络流量情况等方面的数据,然后汇总到gmetad守护进程下,使用rrdtool存储数据,最后将历史数据以曲线方式通过PHP页面呈现。

Ganglia的特点如下:

 良好的扩展性,分层架构设计能够适应大规模服务器集群的需要
 负载开销低,支持高并发
 广泛支持各种操作系统(UNIX等)和cpu架构,支持虚拟机

二、Ganglia组成

Ganglia监控系统有三部分组成,分别是gmond、gmetad、webfrontend,作用如下。

 gmond: 即为ganglia monitoring daemon,是一个守护进程,运行在每一个需要监测的节点上,用于收集本节点的信息并发送到其他节点,同时也接收其他节点发过了的数据,默认的监听端口为8649。
 gmetad: 即为ganglia meta daemon,是一个守护进程,运行在一个数据汇聚节点上,定期检查每个监测节点的gmond进程并从那里获取数据,然后将数据指标存储在本地RRD存储引擎中。
 webfrontend: 是一个基于web的图形化监控界面,需要和Gmetad安装在同一个节点上,它从gmetad取数据,并且读取RRD数据库,通过rrdtool生成图表,用于前台展示,界面美观、丰富,功能强大。

三、Ganglia安装

首先我们要确定监控管理端和客户端主机,监控管理端需要安装gmetad和web,客户端主机我们需要安装gmond。当然如果你的监控管理端也有数据的话那也要安装gmetad。

Ganglia的安装很简单,可以通过源码包和yum源两种方式进行安装。yum源方式安装方便,可以自动安装依赖关系,但是版本往往不是最新的,而通过源码方式,可以安装最新版的Ganglia。下面具体介绍一下这两种安装方式。

这里我们就通过yum源来安装Ganglia,因为通过yum安装很轻松简单

3.1扩展yum源

CentOS系统中默认的yum源并没有包含Ganglia,所以我们必须安装扩展的yum源。从下面这个地址下载Linux附加软件包(EPEL),然后安装扩展yum源(所有节点):

[root@node1 ~]# wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

[root@node1 ~]# rpm -ivh epel-release-latest-7.noarch.rpm

3.2Ganglia安装

这里都是使用的root用户安装的

#监控管理端 yum -y install ganglia-gmetad.x86_64

#在需要监控的客户端主机 yum -y install ganglia-gmond.x86_64

#安装为web服务的节点 yum -y install ganglia-web(和gmetad一起安装在一个节点上)

示例:

监控端节点上(master节点)

yum -y install ganglia-gmetad.x86_64

yum -y install ganglia-gmond.x86_64

yum -y install ganglia-web

其他客户端节点上(想要监控的节点)

yum -y install ganglia-gmond.x86_64

四、Ganglia配置

安装完成后我们就开始配置里面的内容了

4.1Ganglia配置文件介绍

Ganglia的配置文件主要有两个,分别是监控管理端的gmetad.conf和客户端的gmond.conf文件。根据Ganglia安装方式的不同,配置文件的路径也不相同,通过yum方式安装的Ganglia,默认的配置文件位于/etc/ganglia下,而通过源码方式安装的Ganglia,配置文件路径位于ganglia安装路径的etc目录下,在监控管理端,只需要配置gmetad.conf文件即可,而在客户端也只需要配置gmond.conf文件就行了。

配置完gmetad和gmond之后我们要配置web了,这样才能可视化的看见我们的系统状况

4.2gmetad配置

我们先配置gmetad的配置文件

vim /etc/ganglia/gmetad.conf

找到下面的内容并且修改

data_source "mccps" clu201 clu202

这里的mccps是你这套集群你想取的名字,而后面的clu201和202就是你监控的节点的ip映射或者ip

4.3gmond配置

vim /etc/ganglia/gmond.conf

/*
 * The cluster attributes specified will be used as part of the <CLUSTER>
 * tag that will wrap all hosts collected by this instance.
 */
cluster {
  name = "mccps"		#与前面配置中的集群名一致
  owner = "unspecified"
  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 {
  #bind_hostname = yes # Highly recommended, soon to be default.
                       # This option tells gmond to use a source address
                       # that resolves to the machine's hostname.  Without
                       # this, the metrics may appear to come from any
                       # interface and the DNS names associated with
                       # those IPs will be used to create the RRDs.
  #mcast_join = 239.2.11.71   #注释掉
  host=10.3.1.201		#绑定监控客户端的主机IP(clu201)
  port = 8649
  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 = 8649
  #bind = 10.3.1.201		#绑定监控客户端的主机IP(clu201)
  #retry_bind = true        #注释掉
  # Size of the UDP buffer. If you are handling lots of metrics you really
  # should bump it up to e.g. 10MB or even higher.
  # buffer = 10485760
}

这里只用配置name和host以及bind,并且把两个mcast_join和bind以及retry_bind注释掉

配置完后分发到其他的gmond上,因为只需要一份配置文件,全部的gmond节点都保持相同的配置文件就好了。

4.4web配置

vim /etc/httpd/conf.d/ganglia.conf

<Location /ganglia>
  Order deny,allow
  Require all granted
  #Allow from all
  #Deny from all
  #Allow from 127.0.0.1
  #Allow from ::1
  # Allow from .example.com
</Location>

除了第一个其他的都注释掉然后加上Require all granted

五、配置hadoop和hbase

5.1修改hadoop的配置文件

vim /usr/hadoop/etc/hadoop/hadoop-metrics2.properties

首先把没有注释的配置文件注释掉然后在尾部加入以下内容

*.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=192.168.10.90:8649          # namenode 所在的节点 多个用英文下的逗号隔开
resourcemanager.sink.ganglia.servers=192.168.10.91:8649   # resourcemanager 所在的节点

datanode.sink.ganglia.servers=192.168.10.90:8649,192.168.10.91:8649,192.168.10.92:8649    # datanode 所在的节点 多个用英文下的逗号隔开
nodemanager.sink.ganglia.servers=192.168.10.90:8649,192.168.10.91:8649,192.168.10.92:8649
maptask.sink.ganglia.servers=192.168.10.90:8649

然后分发到所有节点

5.2配置hbase配置文件

vim /usr/hbase/conf/hadoop-metrics2-hbase.properties

首先把没有注释的配置文件注释掉然后在尾部加入以下内容

*.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31    
*.sink.ganglia.period=10  
hbase.sink.ganglia.period=10
hbase.sink.ganglia.servers=192.168.10.90   # hbase 主节点信息

5.3避坑

自此所有的配置都完成了,但是!你要保证你的防火墙关了

还有一个坑就是,linux的selinux防火墙一般都是没有关的,没关就会报如下错误

There was an error collecting ganglia data (127.0.0.1:8652): fsockopen error

所以我们可以通过以下命令去临时关闭(每次重启都需要设置),想要长久关闭请自行去找其他资料

setenforce 0

六、开启服务

先开启hadoop和hbase以及zookeeper

然后再开启ganglia

主节点:
[root@clu201 ~]# systemctl start httpd
[root@clu201 ~]# systemctl start gmetad
[root@clu201 ~]# systemctl start gmond


子节点
[root@clu202 mca]# systemctl start gmond

安装了哪个服务就开启哪个服务

需要注意的是你的gmond要比gmetad先开启,全部的gmond开启后再开启gmetad

开启完毕后通过ip+/ganglia/ 去访问web

例如:192.168.10.90/ganglia/

最后访问到这个就成功了

本篇博客参考了分布式监控数据采集系统Ganglia实战 - 夫莱特 - 博客园 (cnblogs.com)

想要看更仔细的去看这篇博客,讲的很仔细。我这篇只是用自己的理解来部署的,但是所有的东西都是来源于上篇博客

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐