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=40namenode.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)
想要看更仔细的去看这篇博客,讲的很仔细。我这篇只是用自己的理解来部署的,但是所有的东西都是来源于上篇博客