zoukankan      html  css  js  c++  java
  • ganglia组播和单播

    ganglia快速开始向导(翻译自官方wiki)

    转自:http://cryinstall.com/?p=180

    快速开始向导

    介绍

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

        * gmond 是一个守护进程,他运行在每一个需要监测的节点上,收集监测统计,发送和接受在同一个组播或单播通道上的统计信息
           *如果他是一个发送者(mute=no)他会收集基本指标,比如系统负载(load_one),CPU利用率。他同时也会发送用户通过添加C/Python模块来自定义的指标。
           *如果他是一个接收者(deaf=no)他会聚合所有从别的主机上发来的指标,并把它们都保存在内存缓冲区中。
        * gmetad 也是一个守护进程,他定期检查gmonds,从那里拉取数据,并将他们的指标存储在RRD存储引擎中。他可以查询多个集群并聚合指标。他也被用于生成用户界面的web前端。
        * ganglia-web 顾名思义,他应该安装在有gmetad运行的机器上,以便读取RRD文件。

    集群是主机和度量数据的逻辑分组,比如数据库服务器,网页服务器,生产,测试,QA等,他们都是完全分开的,你需要为每个集群运行单独的gmond实例。
    一般来说每个集群需要一个接收的gmond,每个网站需要一个gmetad。
     

    安装

    最简单的方法来安装就是使用二进制包。在Ubuntu/Debian 上,你可以用apt-get来安装。

    apt-get install ganglia-monitor gmetad
    

    补充:我做实验是用centos,在centos上只需要添加epel和rpmfusion库即可使用以下命令分别安装上述三个组件

    yum install ganglia-gmond
    yum install ganglia-gmetad
    yum install ganglia-web
    

    防火墙规则

    默认情况下gmond使用UDP协议的8649端口(在udp_send_channel 和udp_rec_channel中被指定),gmetad下载统计数据通过TCP的8649端口(在tcp_accept_channel中被指定)。
    如果你的防火墙有任何的规则阻止这些端口上的通信,那么你的统计信息就不会被显示了。

    单个集群配置

    如果你只有少数主机需要处理,我们推荐使用单个集群,因为这是最容易启用和配置的。唯一你需要做的是决定是否要启用单播或者组播传输。
    组播模式是默认的设置,也是最简单的使用方式,并且他提供沉余。对“抖动”敏感的环境可能需要考虑启用Ganglia在单播模式下运行,他可以显著的减少主机间喋喋不休的交流,不过就是配置起来复杂一点。像Amazon’s AWS EC2产品这样的环境就是不支持组播的,所以单播是惟一可用的设置选项。

    组播

    如果你正在使用组播传输,那么你没必要改变任何东西,因为这是Ganglia包安装默认的。唯一要做的就是把gmetad指向一个或几个运行着gmond的主机。没有必要列出每一个单个主机,因为gmond被设置为接受模式时会包含所有主机的列表以及整个集群的统计信息。

    # /etc/gmetad.conf on monhost
    data_source "MyCluster" monhost
    

    单播

    要配置成为单播你应该指定一个(或者多个)接受的主机,比如我将要挑选mon1主机作为接收者。mon1的gmond.conf应该看起来像这样。

    globals {
      daemonize = yes
      setuid = yes
      user = nobody
      debug_level = 0
      max_udp_msg_len = 1472
      mute = no
      deaf = no
      allow_extra_data = yes
      host_dmax = 86400 /* Remove host from UI after it hasn't report for a day */
      cleanup_threshold = 300 /*secs */
      gexec = no
      send_metadata_interval = 30 /*secs */
    }
    
    cluster {
      name = "Production"
      owner = "unspecified"
      latlong = "unspecified"
      url = "unspecified"
    }
    
    host {
      location = "unspecified"
    }
    
    udp_send_channel {
      host = mon1
      port = 8649
      ttl = 1
    }
    udp_recv_channel {
      port = 8649
    }
    
    tcp_accept_channel {
      port = 8649
    }
    

    在其他的所有主机上,你只需要配置这个

    globals {
      daemonize = yes
      setuid = yes
      user = nobody
      debug_level = 0
      max_udp_msg_len = 1472
      mute = no
      deaf = yes
      allow_extra_data = yes
      host_dmax = 86400 /* Remove host from UI after it hasn't report for a day */
      cleanup_threshold = 300 /*secs */
      gexec = no
      send_metadata_interval = 30 /*secs */
    }
    
    cluster {
      name = "Production"
      owner = "unspecified"
      latlong = "unspecified"
      url = "unspecified"
    }
    
    host {
      location = "unspecified"
    }
    
    udp_send_channel {
      host = mon1
      port = 8649
      ttl = 1
    }
    

    请注意send_metadata_interval被设置为30秒。Ganglia的度量指标从他的元数据间隔发送得到的。元数据包含诸如度量分组,类型等等。假如你重启了接收的gmond主机,那么元数据就会丢失,gmond就不知道如何处理度量数据,因此会把他们抛弃。这会导致生成空白的图表。在组播模式下,gmonds可以和其他任意一台主机通信,在元数据丢失情况请求重新获取。但这在单播模式下是不可能的,因此你需要命令gmond定期的发送元数据。

    现在在你的gmetad.conf中放置

    # /etc/gmetad.conf on mon1
    data_source "Production" mon1
    

    重启所有,应该会生效了

    多个集群配置

    就像你在上面的图表中看到的,有三个集群在同一个广播域上,我们并不需要部署三个分开的Ganglia网页接口和gmetad收集器,我们只需要在node0.c1节点上部署一个就可以了,他并会从三个不同的组播通道上收集统计数据。
    那么在服务器上需要的组件有:
        *在每个节点上都需要ganglia-gmond
        *在node0.c1上需要ganglia-d和ganglia-web(假设我们指定节点0.c1作为ganglia网页接口和统计数据接收器)。

    下面是配置文件的部分设置:
    在集群一完全相同的/etc/gmond.conf。我列举最重要的部分:

    # /etc/gmond.conf - on ClusterOne
    cluster {
      name = "ClusterOne"
      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
    }
    

    在集群二所有的节点都相同的/etc/gmond.conf

    # /etc/gmond.conf - on ClusterTwo
    cluster {
      name = "ClusterTwo"
      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
    }
    

    在集群三上都相同的/etc/gmond.conf 

    # /etc/gmond.conf - on ClusterThree
    cluster {
      name = "ClusterThree"
      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
    }
    

    只存在于node0.c1上的/etc/gmetad.conf(最重要的部分):

    # /etc/gmetad.conf on node0.c1
    data_source "ClusterOne" node0.c1:8661 node1.c1:8661
    data_source "ClusterTwo" node0.c2:8662 node1.c2:8662
    data_source "ClusterThree" node3.c2:8663 node1.c3:8663
    

    注意,我们并没有列出每个集群上所有的节点作为data sources(假如你的集群拥有数以千计的节点不就悲剧了么)。想象一下现在我们有三个不同的池,他们各种有边界。要发生的事情就是,gmetad守护进程根据data source的配置访问数据,如果其中的一个节点死机了,其他的也可以提供统计数据给gmetad,因为gmond节点会交换数据。
    现在你要干的事情就是配置一下在node0.c1上的web服务器,开启gmetad(默认的RRDs位置在/var/lib/ganglia/rrds),并开启所有集群上的gmond服务。你应该会有一个为三个集群服务的正常工作的监控系统,而他只在一个服务器上。

  • 相关阅读:
    javaIO流之 字节与字符流认识
    Servlet容器理解(生命周期、servletContext作用域、servlet装载方式)
    是否改变原数组的常用方法
    时间空间复杂度的初步理解---后续补充
    java集合框架之 Set
    【原】SQLPLUS支持上下翻页
    【转】shell脚本写的俄罗斯方块游戏
    【原】Oracle 11.2.0.1 64bit for RHEL6.0 Server x86_64 静默安装
    【原】RHEL6.0企业版安装
    【原】记录一句话
  • 原文地址:https://www.cnblogs.com/weiji100/p/3638336.html
Copyright © 2011-2022 走看看