一、需求:

   结合公司环境hadoop1.0和2.0集群,选择了Ganglia作为本公司集群监控项目


二、Ganglia介绍

1.Ganglia是UC Berkeley发起的一个开源集群监视项目,设计用于测量数以千计的节点。Ganglia的核心包含gmond、gmetad以及一个Web前端。主要是用来监控系统性能,如:cpu 、mem、硬盘利用率, I/O负载、网络流量情况等,通过曲线很容易见到每个节点的工作状态。对合理调整、分配系统资源,提高系统整体性能起到重要作用。

2.每台计算机都运行一个收集和发送度量数据的名为 gmond 的守护进程。接收所有度量数据的主机可以显示这些数据并且可以将这些数据的精简表单传递到层次结构中。正因为有这种层次结构模式,才使得 Ganglia 可以实现良好的扩展。

3.gmond 带来的系统负载非常少,这使得它成为在集群中各台计算机上运行的一段代码,而不会影响用户性能。所有这些数据多次收集会影响节点性能。网络中的 “抖动”发生在大量小消息同时出现时,可以通过将节点时钟保持一致,来避免这个问题。

4.Ganglia 监控套件包括三个主要部分:gmond,gmetad,和网页接口,通常被称为ganglia- web。

 4.1 gmond 是一个守护进程,他运行在每一个需要监测的节点上,收集监测统计,发送和接受在同一个组播或单播通道上的统计信息。

 4.2 gme tad 也是一个守护进程,他定期检查gmonds ,从那里拉取数据,并将他们的指标存储在RRD存储引擎中。它可以查询多个集群并聚合指标。RRD也被用于生成用户界面的web前端。

 4.3 ganglia- web 顾名思义,他应该安装在有gmetad运行的机器上,以便读取RRD文件。

一般来说一个集群的每台机器上都需要安装gmond,只要负责展示web界面的机器安装了gmetad即可。


三、安装步聚

1. 前期准备

  1.1. 节点准备

修改主机名、ip、iptables关闭;
时间同步: ntpdate -s time.windows.com;

  1.2. 软件准备

ganglia-3.7.1.tar.gz和ganglia-web-3.7.0.tar.gz
地址:http://ganglia.info/?page_id=66

confuse-2.7.tar.gz 
地址:http://www.nongnu.org/confuse/

Python-2.7.10.tgz 
地址:https://www.python.org/downloads/release/python-2710/

httpd-2.2.31.tar.gz 
地址:http://httpd.apache.org/download

php-5.6.12.tar.gz 
地址:http://php.net/downloads.php


2. 集群规划

2.1. 集群信息

cat /etc/issue
主机名称
IP 系统版本
功能
dchdmaster2  192.168.1.193 CentOS 6.5 x86_64 监控服务主节点
dchadoop206  192.168.1.199 CentOS 6.5 x86_64 监控服务从节点
dchadoop207 192.168.1.216 CentOS 6.5 x86_64 监控服务从节点

2.2. 软件规划

Ganglia监控服务的主节点需要安装:ganglia,ganglia-web,php,apache

Ganglia被监控从节点需要安装:ganglia

2.3. 安装路径

ganglia-core安装路径:/usr/local/ganglia

php安装路径:/usr/local/php

apache安装路径:/usr/local/apache2

ganglia-web安装路径:/opt/ganglia/ganglia-web

rrds数据路径:/opt/ganglia/rrds


3. 安装框架

3.1. 检查依赖[或者安装过程中发现缺少再安装]

#rpm -q gcc glibc glibc-common rrdtool rrdtool-devel expat expat-devel  pcre pcre-devel dejavu-lgc-sans-mono-fonts dejavu-sans-mono-fonts zlib-devel pcre pcre-devel apr  apr-devel apr-util apr-util-devel

yum安装:

#yum -y install gcc glibc glibc-common rrdtool rrdtool-devel expat expat-devel  dejavu-lgc-sans-mono-fonts dejavu-sans-mono-fonts zlib-devel pcre pcre-devel apr  apr-devel apr-util apr-util-devel

 

#yum -y install perl libxml2 libxml2-devel

注释

pcre (Perl Compatible Regular Expressions)正则表达式处理

apr Apache可移植运行库



3.2. 安装ganglia

将要安装的源文件传到一个节点的/opt/src下

#cd /opt/src

3.2.1. confuse

//libconfuse 是一个用C实现配置文件解析器库

#tar zvxf confuse-2.7.tar.gz
#cd confuse-2.7
#./configure CFLAGS=-fPIC --disable-nls

//-fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code)则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。

//--disable-nls:禁止对国际化支持

make && make install

3.2.2. python

// ganglia-gmond-modules-python

//很慢

python[默认的python.so路径/usr/lib64/]

#cd /opt/src
#tar -zvxf Python-2.7.10.tgz
#cd /opt/src/Python-2.7.10
#./configure  --prefix=/usr/local  --enable-shared 
make && make install

//安装后libpython2.7.so在/usr/local/lib下

 

配置共享库

#vi /etc/ld.so.conf

 

-- 增加如下内容#python.so所在位置

/usr/local/lib

 

启用配置

#ldconfig

//ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),

检查是否生效

#ldconfig -v |grep "libpython2.7.so"


3.2.3. ganglia

3.2.3.1. 安装

# cd /opt/src
# tar zvxf ganglia-3.7.1.tar.gz
# cd ganglia-3.7.1
# ./configure --prefix=/usr/local/ganglia --with-gmetad --enable-gexec --with-python=/usr/local
# make && make install

3.2.3.2. 配置gmond(所有节点)

#cd /opt/src/ganglia-3.7.1

//设置开机启动

#cp ./gmond/gmond.init /etc/init.d/gmond
#vi /etc/init.d/gmond
#GMOND=/usr/local/ganglia/sbin/gmond

 

 

//初始化gmond配置文件

./gmond/gmond -t > /usr/local/ganglia/etc/gmond.conf
vi /usr/local/ganglia/etc/gmond.conf     -- 修改如下内容
cluster {
name = "cloud-cluster"
owner = "nobody"
latlong = "unspecified"
url = "unspecified"
}
 
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
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 = X.X.X.X
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
}

#########################################添加python指标Begin

复制python module到ganglia部署目录

#mkdir /usr/local/ganglia/lib64/ganglia/python_modules
#cd /opt/src/ganglia-3.7.1
#cp ./gmond/python_modules/*/*.py  /usr/local/ganglia/lib64/ganglia/python_modules

 

 

安装程序ganglia-3.7.1默认提供了一些python module的配置文件,只需要部署到 /usr/local/ganglia/etc/conf.d 目录下面即可生效

#cp ./gmond/python_modules/conf.d/*.pyconf  /usr/local/ganglia/etc/conf.d

 

#####为什么创建python_modules和复制到指定文件夹?约定由于配置,查看/usr/local/ganglia/etc/conf.d/modpython.conf

 

#########################################添加python指标End

 

 

同步【ganglia、gmond配置、python模块】 其他节点 

 

 

#scp -r /usr/local/lib/libpython2.7.so* root@dchadoop206:/usr/local/lib
#scp -r /usr/local/lib/python2.7/ root@dchadoop206:/usr/local/lib/
#scp  /etc/ld.so.conf root@dchadoop206:/etc/ld.so.conf
 
#scp -r /usr/local/ganglia/ root@dchadoop206:/usr/local/ganglia/
#scp -r /etc/init.d/gmond root@dchadoop206:/etc/init.d/gmond

 

 

//复制到所有从节点

#for i in {206..212}; do scp -r /usr/local/lib/libpython2.7.so* root@dchadoop$i:/usr/local/lib;done;
#for i in {206..212}; do scp -r /usr/local/lib/python2.7 root@dchadoop$i:/usr/local/lib;done;
#for i in {206..212}; do scp -r /etc/ld.so.conf root@dchadoop$i:/etc;done;
 
#for i in {206..212}; do scp -r /usr/local/ganglia/ root@dchadoop$i:/usr/local/ganglia/;done;
#for i in {206..212}; do scp -r /etc/init.d/gmond root@dchadoop$i:/etc/init.d/gmond;done;

 

 

启动gmond服务,并设为开机自动运行 # ssh root@dchdmaster2 'cmd'

 

ssh root@dchadoop206 'ldconfig -v | grep python2.7'

 

 

//添加开机启动

#cd /opt/src/ganglia-3.7.1
#cp ./gmond/gmond.init /etc/init.d/gmond 
#vi /etc/init.d/gmond  --修改如下内容
GMOND=/usr/local/ganglia/sbin/gmond
chkconfig --add  gmond

 

开启服务:

service gmond  start/restart

 

在gmond机器上测试。

telnet localhost 8649

 

检查:gmond没启动成功

wKioL1bWtQiA9WPqAAAeVvSYD7Q400.png

 

 

各节点增加ganglia用户,重启gmond

#for i in {208..212};do ssh dchadoop$i 'useradd ganglia;groups ganglia';done;
#for i in {208..212};do ssh dchadoop$i 'hostname;service gmond restart;service gmond status';done;


3.2.3.3. 配置gmetad(主节点)

#cd /opt/src/ganglia-3.7.1
#vi /usr/local/ganglia/etc/gmetad.conf     -- 修改如下内容

##如果此文件没有 cp ./gmetad/gmetad.conf /usr/local/ganglia/etc/

 

--从第一台响应主机开始收集状态数据
data_source "cloud-cluster" 10 dchdmaster2  dchadoop206  crxy162.crxy
data_source "cloud-cluster" 10 dchadoop207 dchadoop208 dchadoop209 dchadoop210 dchadoop211 dchadoop212
gridname "cloud-grid"
 
--gmetad侦听端口
xml_port 8651
--gmetad交互式侦听端口
interactive_port 8652
rrd_rootdir "/opt/ganglia/rrds"
case_sensitive_hostnames 0

创建和修改rrds数据目录所有者

#mkdir -p /opt/ganglia/rrds
#chown -R nobody:nobody /opt/ganglia/rrds

 

启动gmetad服务

#service gmetad restart

 

##设置开机启动

#cd /opt/src/ganglia-3.7.1
#cp ./gmetad/gmetad.init /etc/init.d/gmetad
vi /etc/init.d/gmetad

修改如下内容

GMETAD=/usr/local/ganglia/sbin/gmetad
chkconfig --add gmetad

 

在gmetad机器上测试

telnet localhost 8651


4. Ganglia 调试技巧 

http://blog.csdn.net/xxd851116/article/details/25109043

4.0.0.1. 安装ganglia-web (主节点)


4.0.0.1.1. 安装apache

cd /opt/src
tar zvxf httpd-2.2.31.tar.gz
cd httpd-2.2.31
./configure --prefix=/usr/local/apache2
make && make install

问题:

[APR  is required]

[configure: error: Cannot use an external APR with the bundled APR-util]

4.0.0.1.2. 安装php(安装很慢)

#vi /usr/local/apache2/bin/apxs

#有的版本要将第一行改为perl位置即:#!/usr/bin/perl -w

#cd /opt/src
#tar zvxf php-5.6.12.tar.gz
#cd php-5.6.12
#./configure --prefix=/usr/local/php  --with-apxs2=/usr/local/apache2/bin/apxs
#make  && make install

[Perl is not installed]

[xml2-config not found]


4.0.0.1.3. ganglia-web

#cd /opt/src
#tar zvxf ganglia-web-3.7.0.tar.gz -C /opt/ganglia
#mv /opt/ganglia/ganglia-web-3.7.0 /opt/ganglia/ganglia-web
#cd /opt/ganglia/ganglia-web
#cp conf_default.php conf.php
vi conf.php
$conf['gweb_confdir'] = "/opt/ganglia/ganglia-web";
$conf['gmetad_root'] = "/opt/ganglia";
vi header.php
 
  

 

配置临时目录:[dwoo是php的模版引擎]

#cd /opt/ganglia/ganglia-web/dwoo
#mkdir cache compiled
#chmod 777 cache compiled

 

配置服务器设置

vi /usr/local/apache2/conf/httpd.conf
....
Listen 80
....
 

DirectoryIndex index.html index.php
AddType application/x-httpd-php .php

....

 

# 在文件最后增加如下内容

# ganglia
Alias /ganglia "/opt/ganglia/ganglia-web"

AuthType Basic
Options None
AllowOverride None
Order allow,deny
Allow from all

 
#ServerName www.example.com:80   把#去掉 修改成ip或者hostName[ServerName dchdmaster2:80]

 

启动httpd服务

#/usr/local/apache2/bin/apachectl restart


5. 注意防火墙的限制


#关闭防火墙

service iptables stop

#查看防火墙开机启动状态

chkconfig iptables --list

#关闭防火墙的开机启动

chkconfig iptables off

 

6. 访问的地址

http://host/ganglia