以容器部署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监控,而是更想表达容器化是非常有助于我们快速构建测试环境和性能监控环境,这对于性能测试来讲非常重要,特别是我们面对大量云端化或集群化服务的测试。

目录
相关文章
|
1月前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
158 6
|
18天前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
268 11
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
14天前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
6天前
|
持续交付 开发者 Docker
掌握Docker容器化技术,加速软件开发与部署
掌握Docker容器化技术,加速软件开发与部署
21 0
|
14天前
|
前端开发 开发者 Docker
深入探索Docker Compose:简化多容器应用的部署
深入探索Docker Compose:简化多容器应用的部署
44 0
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
33 3
|
1月前
|
分布式计算 Hadoop Shell
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
58 3
|
1月前
|
运维 Kubernetes 监控
掌握Docker容器化技术:构建、部署与管理的高效实践
【10月更文挑战第14天】掌握Docker容器化技术:构建、部署与管理的高效实践
45 0
|
11天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
51 2
|
2天前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
21 5
下一篇
无影云桌面