以容器部署Ganglia并监控Hadoop集群

简介: 网上有很多Ganglia部署的教程,每一个我都觉得繁琐,我的目的只是用来监控Hadoop测试集群,能即刻使用才是王道,于是我想到通过Rancher部署Ganglia应用服务(类似于我在上一篇文章中部署Jmeter容器集群的方式),以容器的方式一键部署,省去了中间繁琐的安装过程。
版权声明:本文为博主原创文章,未经博主允许不得转载。欢迎访问我的博客 https://blog.csdn.net/smooth00/article/details/80495604

网上有很多Ganglia部署的教程,每一个我都觉得繁琐,我的目的只是用来监控Hadoop测试集群,能即刻使用才是王道,于是我想到通过Rancher部署Ganglia应用服务(类似于我在上一篇文章中部署Jmeter容器集群的方式),以容器的方式一键部署,省去了中间繁琐的安装过程。

第一步:安装部署Docker

1、对于CantOS安装Docker最好是CentOS7,这样可以保证内核至少是3.10(通过uname -r 命令查看),低于这个版本的内核无法安装Docker。
2、使用 root 权限登录 Centos。确保 yum 包更新到最新(sudo yum update)。
3、卸载旧版本(如果安装过旧版本的话)
sudo yum remove docker  docker-common docker-selinux docker-engine
4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
5、设置yum源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo  
6、直接安装最新版的docker(记住版本宁可最新,也不要低于Rancher所要求的版本)
sudo yum install docker-ce
7、启动并加入开机启动
sudo systemctl start docker
sudo systemctl enable docker

第二步:部署安装Rancher

        Rancher最好部署在独立的机器上,毕竟是Docker管理平台,需要有足够的资源和空间,由于我的另一篇文章《搭建Jmeter容器集群平台》已经介绍了Rancher的部署,在这里我就不多写了,而且我用的就是当初部署好的Rancher。

第三步:添加主机

        在Rancher->基础架构->主机->添加主机(Custer),直接将页面上的脚本,复制到Ganglia对应的主机(Linux)上运行,举例如下(确保没有防火墙封禁端口):

sudo docker run --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.10 http://172.16.1.30:8080/v1/scripts/5F5DD52AF831DB9BB4AF:1514678400000:JTVmpDRKXUlm1TtU93FgwforgIA

第四步:添加Ganglia容器

        先用docker search ganglia命令搜索一下公共库里有哪些可用的ganglia镜像:

        我们就用搜索到的第一个镜像就行,安装的方式有两种,一种是直接在主机管理界面上添加容器,如下:

        主要是选择要下载调用的镜像,映射的端口,调度规则(设置需要在哪台主机上部署容器,如果不设置的话,就按Rancher的规则从多台主机中挑一台)

        另一种方式是我推荐的,就是通过docker-compose配置文件安装,而且是以应用服务的方式对外提供服务:

1、用编辑器编写如下docker-compose.yml:

version: '2'
services:
  ganglia:
    image: wookietreiber/ganglia
    stdin_open: true
    tty: true
    ports:
    - 8649:8649/tcp
    - 8651:8651/tcp
    - 8652:8652/tcp
    - 8661:8661/tcp
    - 2003:2003/tcp
    - 80:80/tcp
    - 6343:6343/udp
    labels:
      io.rancher.container.pull_image: always
      io.rancher.scheduler.affinity:host_label: host.ip=172.17.2.130

和rancher-compose.yml:

version: '2'
services:
  ganglia:
    scale: 1
    start_on_create: true

2、在Rancher的应用->用户->添加应用:输入应用名,选择docker-compose.yml和rancher-compose.yml。

        点击【创建】按钮,就能成功创建应用和容器服务。通过http://172.17.2.130/ganglia/就能够直接访问了ganglia了


        由于这个镜像安装的ganglia是默认的组播模式(不需要固定的Server IP,比较方便),所以我们以下的监控配置就按组播模式进行配置。

第五步:在hadoop集群节点机器上部署监控代理gmond

yum -y install epel-release
yum -y install ganglia-gmond

        由于用组播模式,并较省事,什么配置都不用改,为了能让hadoop集群能标识出来,我们改一下cluster name

        vi /etc/ganglia/gmond.conf

cluster {
  name = "hadoop"
  owner = "unspecified"
  latlong = "unspecified"
  url = "unspecified"

}

        三个hadoop节点(无论主从)全是按这么操作。然后启动各节点的gmood:

systemctl start gmond.service  (如果是centos6.5,用service gmond start启动)
systemctl enable gmond.service

        由于ganglia容器部署完后,上面自带有gmond节点,为了跟hadoop集群的gmond以示区别,我们进入ganglia容器下,把gmond.conf配置改掉:

        vi /etc/ganglia/gmond.conf,按如下把原来的8649端口改成8661(就是为了跟hadoop节点监控端口区别开,当然也可以选择不改,改也是为了验证一下自定义端口)

第六步:修改ganglia中的gmetad

        gmetad会定期检查gmond,从那里拉取数据,并将他们的指标存储在RRD存储引擎中。也可以查询多个集群并聚合指标。所以配好它,才能收集各个节点的监控数据。

        进入ganglia容器中,vi /etc/ganglia/gmetad.conf

        由于是组播模式,什么都不用动了,主需要修改一下data_source参数如下:

data_source "my cluster" localhost:8661
data_source "hadoop" 10 172.17.2.171:8649 172.17.2.186:8649 172.17.2.187:8649

        以上的修改目的是,上一步涉及到localhost的监控端口变了,所以要加上8661,hadoop是我们新加的监控集群,所以添加一个data_source,每10秒轮询一次,其中监控端口8649是默认的,可以不写。

        这样我们就可以重启ganglia容器,然后再回到http://172.17.2.130/ganglia/,就能看到新加入的节点和集群了:

第七步:修改hadoop配置

        前面说了那么多,其实都是为了这一步准备,我们要监控hadoop,就必须让hadoop各节点的ganglia metrics接口开放,通过修改hadoop配置文件目录下的hadoop-metrics2.properties:

namenode.sink.ganglia.servers=239.2.11.71:8649
datanode.sink.ganglia.servers=239.2.11.71:8649
jobtracker.sink.ganglia.servers=239.2.11.71:8649
tasktracker.sink.ganglia.servers=239.2.11.71:8649
maptask.sink.ganglia.servers=239.2.11.71:8649
reducetask.sink.ganglia.servers=239.2.11.71:8649

resourcemanager.sink.ganglia.servers=239.2.11.71:8649
nodemanager.sink.ganglia.servers=239.2.11.71:8649
historyserver.sink.ganglia.servers=239.2.11.71:8649
journalnode.sink.ganglia.servers=239.2.11.71:8649
nimbus.sink.ganglia.servers=239.2.11.71:8649
supervisor.sink.ganglia.servers=239.2.11.71:8649

        以上标粗部分是通用配置的(其它是在Ambari下的HDP集群建议加配的),另外由于是组播模式,IP需要设置成239.2.11.71(这个IP就能互相找到各个监控与被监控节点,如果不放心,可以在各个节点上添加路由到组播地址ip route add 239.2.11.71 dev eth0)。

        另外如果是用Ambari管理的hadoop集群,修改hadoop-metrics2.properties是需要在Ambari管理界面上进行的,通过HDFS的Configs->Advanced完成配置,需要注意的是Ambari本身有一套监控接口(用的是metric_collector,默认是开启的),如果我们要同时用ganglia监控,就要求把ganglia.servers参数的注释去掉,替换servers ip为239.2.11.71,同时ganglia_server应该为允许,可以直接将{% if has_ganglia_server %}和对应的{% endif %}去掉,最终配置为:

#  if has_ganglia_server 
*.period=60

*.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31
*.sink.ganglia.period=10

# default for supportsparse is false
*.sink.ganglia.supportsparse=true

.sink.ganglia.slope=jvm.metrics.gcCount=zero,jvm.metrics.memHeapUsedM=both
.sink.ganglia.dmax=jvm.metrics.threadsBlocked=70,jvm.metrics.memHeapUsedM=40

# Hook up to the server
namenode.sink.ganglia.servers=239.2.11.71:8649
datanode.sink.ganglia.servers=239.2.11.71:8649
jobtracker.sink.ganglia.servers=239.2.11.71:8649
tasktracker.sink.ganglia.servers=239.2.11.71:8649
maptask.sink.ganglia.servers=239.2.11.71:8649
reducetask.sink.ganglia.servers=239.2.11.71:8649
resourcemanager.sink.ganglia.servers=239.2.11.71:8649
nodemanager.sink.ganglia.servers=239.2.11.71:8649
historyserver.sink.ganglia.servers=239.2.11.71:8649
journalnode.sink.ganglia.servers=239.2.11.71:8649
nimbus.sink.ganglia.servers=239.2.11.71:8649
supervisor.sink.ganglia.servers=239.2.11.71:8649

resourcemanager.sink.ganglia.tagsForPrefix.yarn=Queue

# endif 

        保存修改的配置,重启hadoop集群服务。然后不出意外就能看到hadoop的监控指标(如果不行,可以把主从节点和ganglia容器都重启一遍):

最后一步:验证监控结果

        最后我们就可以享受监管结果了,不只是能监控hadoop集群的资源使用情况(CPU、内存、磁盘负载、网络负载),还能看到以下的hadoop JvmMetrics监控指标,基本是全面监控。

        其实监控方式和原理都与Ambari自带的监控框架一样,所以ganglia是用来满足对传统hadoop集群或其它集群服务器的监控,至于用Ambari或Cloudera Manager部署及管理的Hadoop集群,用管理平台自带的监控框架就行了。但是本文的目的不只是为了说明如何快速构建和应用ganglia监控,而是更想表达容器化是非常有助于我们快速构建测试环境和性能监控环境,这对于性能测试来讲非常重要,特别是我们面对大量云端化或集群化服务的测试。

目录
相关文章
|
3天前
|
分布式计算 资源调度 Hadoop
Hadoop【基础知识 03+04】【Hadoop集群资源管理器yarn】(图片来源于网络)(hadoop fs + hadoop dfs + hdfs dfs 使用举例)
【4月更文挑战第5天】Hadoop【基础知识 03】【Hadoop集群资源管理器yarn】(图片来源于网络)Hadoop【基础知识 04】【HDFS常用shell命令】(hadoop fs + hadoop dfs + hdfs dfs 使用举例)
27 9
|
5天前
|
分布式计算 资源调度 Hadoop
Hadoop【基础知识 03】【Hadoop集群资源管理器yarn】(图片来源于网络)
【4月更文挑战第4天】Hadoop【基础知识 03】【Hadoop集群资源管理器yarn】(图片来源于网络)
19 4
|
7天前
|
存储 分布式计算 Hadoop
【Hadoop】Hadoop的三种集群模式
【4月更文挑战第9天】【Hadoop】Hadoop的三种集群模式
|
19天前
|
关系型数据库 MySQL Nacos
【深入浅出Nacos原理及调优】「实战开发专题」采用Docker容器进行部署和搭建Nacos服务以及“坑点”
【深入浅出Nacos原理及调优】「实战开发专题」采用Docker容器进行部署和搭建Nacos服务以及“坑点”
43 1
|
25天前
|
运维 监控 Devops
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
在数字化转型的浪潮中,企业的IT基础设施和软件交付模式正经历着深刻的变革。传统的运维方式已难以满足快速迭代、灵活扩展的现代业务需求。本文将探讨如何通过容器技术实现高效的自动化运维体系,重点分析持续集成(CI)与持续部署(CD)的实践方法及其对企业运维效率的影响。通过引入微服务架构、容器编排、DevOps文化等概念,我们旨在为读者提供一套全面的自动化运维解决方案,以支持业务的敏捷性和可扩展性。
|
26天前
|
分布式计算 资源调度 Hadoop
Hadoop集群基本测试
Hadoop集群基本测试
22 0
|
1月前
|
Shell Docker 容器
Docker的常用命令:加速你的容器化开发与部署
Docker的常用命令:加速你的容器化开发与部署
55 0
|
2月前
|
Java 关系型数据库 MySQL
docker 部署springboot项目,连接mysql容器
docker 部署springboot项目,连接mysql容器
80 0
|
2月前
|
NoSQL Redis Docker
深入浅出:使用Docker容器化改进Python应用部署
在快速演进的软件开发领域,持续集成和持续部署(CI/CD)已成为加速产品上市的关键。本文将探索如何利用Docker,一种流行的容器化技术,来容器化Python应用,实现高效、可靠的部署流程。我们将从Docker的基本概念入手,详细讨论如何创建轻量级、可移植的Python应用容器,并展示如何通过Docker Compose管理多容器应用。此外,文章还将介绍使用Docker的最佳实践,帮助开发者避免常见陷阱,优化部署策略。无论是初学者还是有经验的开发人员,本文都将提供有价值的见解,助力读者在自己的项目中实现容器化部署的转型。
|
2月前
|
运维 Java 开发者
深入浅出:使用Docker容器化改善Java应用的部署与运维
在当今快速迭代的软件开发周期中,确保应用的一致性、可移植性与易于管理成为了开发与运维团队面临的重大挑战。本文旨在介绍如何通过Docker容器技术,有效地解决这些问题,特别是针对Java应用。我们将从Docker的基本概念出发,逐步深入到实际操作,展示如何将传统的Java应用容器化,以及这一过程如何帮助简化部署流程、提高应用的可靠性和可伸缩性。不同于常规的技术文章,本文试图以一种更加易于理解和实践的方式,让读者能够快速掌握容器化技术,并将其应用于日常的开发与运维工作中。
90 0

热门文章

最新文章