天天看點

以容器部署Ganglia并監控Hadoop叢集

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。歡迎通路我的部落格 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監控,而是更想表達容器化是非常有助于我們快速建構測試環境和性能監控環境,這對于性能測試來講非常重要,特别是我們面對大量雲端化或叢集化服務的測試。