Ganglia单群集部署
Ganglia集群监控
Ganglia是由UC Berkeley发起的一个开源监控项目,设计用于监控数以千几的节点。每台服务器都运行一个收集和发送监控数据名为gmond的守护进程。它将从操作系统和指定主机中收集。
接收所有监控数据的主机可以显示这些数据并且可以将这些数据的精简表单传递到层次结构中。正因为有这种层次架构模式,使ganglia可以实现良好的扩展。Gmond带来的系统负载非常小,这使得它成为集群中各个服务器上运行一段代码而不会影响用户性能。
Ganglia主要用来监控系统性能的软件,通过曲线很容易见到每个节点的工作状态,对合理调整,分配系统资源,提高系统整体性能起到重要作用,支持浏览器方式访问,但不能监控节点硬件技术指标。Ganglia是分布式的监控系统。
Ganglia的组件
ganglia由三个组件构成
- gmond :(client)是一个守护进程,他运行在每一个需要监测的节点上,收集监测统计,发送和接受在同一个组播或单播通道上的统计信息。
- gmetad:(server端)也是一个守护进程,他定期检查gmonds,从那里拉取数据,并将他们的指标存储在RRD存储引擎中。他可以查询多个集群并聚合指标,然后生成并在用户界面的web前端展示。
- ganglia-web :(server端)顾名思义,他应该安装在有gmetad运行的机器上,以便读取RRD文件。
Ganglia 工作模式
Ganglia收集数据可以工作在单播或多播模式下,默认为多播模式
单播:发送自己收集到的监控数据到特定的一台或几台服务器上,可以跨网段。
多播:发送自己收集到的监控数据到同一网段所有的服务器上,同时收集同一网段的所有服务器发送过来的监控数据。因为是以广播包的形式发送,因此需要在同一网段内,但同一网段内,又可以定义不同的发送通道。工作模式:图例
环境结构说明
现在有3台机器用来测试搭建Ganglia监控集群环境,采用多播的方式来监控各机器运行情况。
我以server-25为主节点(它上面部署监控服务端)
首先,在server-25 hosts 中配置主机信息。目的是为了读取各机器的主机名而不是IP。
1
2
3
4
5
6
7 cat >> /etc/hosts << EOF
192.168.0.25 server-25
192.168.0.26 client1-26
192.168.0.27 client2-27
EOF
更换epel源(推荐)
该epel源内置大量优秀的软件,如果默认的yum源找不到你要安装的软件,那么这个epel源很适合你。
1 | 安装epel源(服务端/客户端运行) |
服务端安装
1 | 安装gmetad(服务端运行) |
客户端安装
1 | 安装gmond(所有客户端运行) |
软件安装目录说明
1 | ganglia配置文件目录:/etc/ganglia |
配置服务端(gmetad)
1 | 将ganglia-web的站点目录连接到httpd主站点目录 |
1 | 修改ganglia-web的访问权限 |
配置/etc/ganglia/gmetad.conf
1 | data_source "hadoop_cluster_yarn" 30 host1:8649 host2:8649 |
1 | case_sensitive_hostnames 1 |
配置客户端(gmond)
1 | 配置文件 |
1 | #global部分 |
管理ganglia
1 | 所有配置操作完成后,即可启动ganglia服务了,首先在监控管理端启动gmetad服务: |
你可能会遇到的问题
1 | 1. 服务器端启动ganglia后,查看状态出现错误 |
1 | 2. Web访问ganglia: http://10.0.10.25/ganglia/ |
1 | 3. 由于系统时间不对导致的问题 |
debug排错
1 | 善于使用软件自身提供的debug功能来查找原因 |
访问
Ganglia多个群集-部署(多播模式)
多个群集架构图:图例
环境:
ClusterOne节点上有4个节点: node0.c1 , node1.c1 , node2.c1 , node3.c1
ClusterTwo节点上有4个节点: node0.c2 , node1.c2 , node2.c2 , node3.c2
ClusterThree节点上有4个节点:node0.c3 , node1.c3 , node2.c3 , node3.c3
ClusterOne上面的node0.c1部署(node1.c1 , node2.c1 , node3.c1配置相同)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23# /etc/gmond.conf - on ClusterOne
cluster {
name = "ClusterOne" //这个通道名字不能与其他群集重复,ClusterOne集群端口也要确保唯一,此处是:8661
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
udp_send_channel {
mcast_join = 239.2.11.71
port = 8661
ttl = 1
}
udp_recv_channel {
mcast_join = 239.2.11.71
port = 8661
bind = 239.2.11.71
}
tcp_accept_channel {
port = 8661
}
ClusterTwo上面的node0.c2部署(node1.c2 , node2.c2 , node3.c2配置相同)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23# /etc/gmond.conf - on ClusterTwo
cluster {
name = "ClusterTwo" //这个通道名字不能与其他群集重复,ClusterOne集群端口也要确保唯一,此处是:8662
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
udp_send_channel {
mcast_join = 239.2.11.71
port = 8662
ttl = 1
}
udp_recv_channel {
mcast_join = 239.2.11.71
port = 8662
bind = 239.2.11.71
}
tcp_accept_channel {
port = 8662
}
ClusterThree上面的node0.c3部署(node1.c3 , node2.c3 , node3.c3配置相同)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23# /etc/gmond.conf - on ClusterThree
cluster {
name = "ClusterThree" //这个通道名字不能与其他群集重复,ClusterOne集群端口也要确保唯一,此处是:8663
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
udp_send_channel {
mcast_join = 239.2.11.71
port = 8663
ttl = 1
}
udp_recv_channel {
mcast_join = 239.2.11.71
port = 8663
bind = 239.2.11.71
}
tcp_accept_channel {
port = 8663
}定义完node节点,最后配置ganglia服务端/etc/ganglia/gmetad.conf
1
2
3
4
5
6# /etc/gmetad.conf
data_source "ClusterOne" 30 node0.c1:8661 node1.c1:8661
data_source "ClusterTwo" 30 node0.c2:8662 node1.c2:8662
data_source "ClusterThree" 30 node3.c2:8663 node1.c3:8663
注:后面每个通道至少要写2个node信息,如果一个节点挂掉,另一个节点仍然能够提供本通道(cluster name)的统计信息gmetad,因为gmond节点在配置的UDP通道内交换统计信息。最后重启服务端与node节点的服务即可。有问题开启debug
需求:服务器复用,Ganglia分别监控同1台机器
需求:假如一台服务器上面同时安装了HDFS、Yarn和Spark,让Ganglia分别监控这台机器。
目的:是让大数据人员很清楚每台机器上面具体有什么业务。
方案:在客户端启用多个gmond进程。
比如我的案例:
默认配置文件gmond我定义为HDFS群集,复制gmond.conf为gmond-hdfs.conf, name=hdfs port=8649(默认)
Yarn群集:复制gmond.conf并改名为gmond-yarn.conf,name=yarn port=8650
Spark群集:复制gmond.conf并改名为gmond-spark.conf , name=spark port=8651
实施方案
1 | 客户端启动多个gmond进程: |
维护
1 | 每台机器多个gmond进程难免出现故障,可能某个gmond进程无法启动,总结为如下几点原因: |
附加:gmond命令帮助
1 | # gmond --help |
最后的最后,贴下自己的测试环境Ganglia图形界面
Ganglia1: 图例
Gagnlia2: 图例
- 本文作者: GaryWu
- 本文链接: https://garywu520.github.io/2017/06/14/大数据Ganglia集群监控-CentOS6/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!