我的 HDFS 集群中有 3 台机器:pr2
是元节点,pr1
和pr3
是其他 2 个节点。我想用ganglia web
. 为此,Ganglia
(gmetad
和gmond
) 已安装在所有 3 个节点上,并且ganglia web
已安装在元节点pr2
.
我正在运行以下内容:
在 pr2 上:
service gmetad start
service gmond start
service httpd start
在 pr1 和 pr3 上:
service gmond start
我希望看到ganglia web
有关所有 3 个节点的信息。但这就是我所看到的:
似乎只有 1 个节点正在运行,即pr2
.
可能是什么原因?
在配置设置时,我探索了以下可能性:
- 在gmond配置文件中,有一个地方指定了“宿主机”。这里的“主机”应该是什么?例如,对于 node
pr1
,它应该是本地机器(pr1
)还是元节点(pr2
)?我已经分别尝试过,但pr1
我pr2
仍然看不到pr1
或pr3
on的信息ganglia web
。另外,我还需要在本节中添加更多内容吗?
[root@pr1]# nano /usr/local/etc/gmond.conf
/* The host section describes attributes of the host, like the location */
host {
location = "unspecified" ### Should I replace "unspecified" with pr2 (the meta node), or with pr1? ###
}
- 此外,在同一个配置文件中,有一个部分用于配置
udp_send_channels
. 有一个参数mcast_join
,我认为是指定元节点。所以我把IP改成pr2
. 但是由于ganglia web
没有显示 and 的信息pr1
,pr3
我尝试将其分别更改为pr1
andpr3
,但无济于事。
[root@pr1]# nano /usr/local/etc/gmond.conf
udp_send_channel {
#bind_hostname = yes
mcast_join = 239.2.11.71 ### Should I change this IP to pr2 or pr1? ###
port = 8649
ttl = 1
}
- 同样,在同一个文件中,有一个部分用于配置
udp_recv_channel
. 我在这里注释掉了mcast_join
andbind
,因为我认为pr1
andpr3
节点不需要从任何东西接收任何信息,它们只需要向元节点发送信息,pr2
. 我错了吗?
[root@pr1]# nano /usr/local/etc/gmond.conf
udp_recv_channel {
#mcast_join = 239.2.11.71
port = 8649
#bind = 239.2.11.71
retry_bind = true
# Size of the UDP buffer. If you are handling lots of metrics you really
# should bump it up to e.g. 10MB or even higher.
# buffer = 10485760
}
- 然后我运行以下冒烟测试:
gmond -d 5 -c /usr/local/etc/gmond.conf
它返回以下内容(显示长输出的尾部):
...
...
Counting device /dev/mapper/centos-root (2.69 %)
Counting device /dev/mapper/centos-home (0.02 %)
Counting device /dev/sda1 (18.49 %)
For all disks: 206.174 GB total, 204.498 GB free for users.
metric 'part_max_used' has value_threshold 1.000000
sent message 'heartbeat' of length 48 with 0 errors
Processing a metric value message from pr1.embs
Got a heartbeat message 1511171541
这意味着它gmond
工作正常,对吗?
- 然后我配置
gmond
初始化文件(用于调用命令),并进行以下 2 处更改:(i)指向GMOND
正确的路径,以及(ii)将守护进程指向gmond.conf
文件的正确路径。我可能在这里做错了什么吗?
[root@pr1]# nano /etc/init.d/gmond
### Change here ###
#GMOND=/usr/sbin/gmond
GMOND=/usr/local/sbin/gmond
# TMPDIR set to SysV IPC ramdrive to avoid include processing failures
TMPDIR=/dev/shm
export TMPDIR
. /etc/rc.d/init.d/functions
start() {
[ -x $GMOND ] || exit 5
[ -f /etc/ganglia/gmond.conf ] || exit 6
echo -n "Starting GANGLIA gmond: "
### Change here ###
#daemon $GMOND
daemon $GMOND -c /usr/local/etc/gmond.conf
- 然后我修改
gmetad.conf
文件以更改datasource
并添加集群名称和用户名。在这里,我应该将数据源更改为本地计算机(pr1
或pr3
)还是元节点(pr2
)?
[root@pr1]# nano /usr/local/etc/gmetad.conf
===(change)
data_source "edhcluster" pr1 ### Should I change this to pr2, the meta node?
===
===(add)
gridname "edhcluster"
===
===(add)
setuid_username "ganglia"
===
或者,一个更大的问题,我是否应该不更改此节点文件中的任何内容pr1
和pr3
(因为只有pr2
元节点将监视所有内容),而是更改gmetad.conf
元节点的文件pr2
,仅包含在其datasource
所有3个节点,像这样:
[root@pr**2**]# nano /usr/local/etc/gmetad.conf
data_source "edhcluster" pr1 pr2 pr3
但是,我不久前在浏览以解决此问题时在某处读到,这样写节点的名称意味着它将首先检查 pr1,如果它关闭,它将检查 pr2,如果它关闭也会检查pr3。因此,如果我们想让它从所有 3 台机器上收集数据,我们应该为每个节点编写单独的行,如下所示:
[root@pr2]# nano /usr/local/etc/gmetad.conf
data_source "edhcluster" pr1
data_source "edhcluster" pr2
data_source "edhcluster" pr3
我也试过了,然后重新启动了所有节点中的所有服务(gmetad
, gmond
and httpd
in pr2
, and gmond
in pr1
and pr3
),但是 ganglia web 仍然没有显示其他 2 个节点的任何内容。
- 然后我修改了
gmetad.init
文件(用于调用命令)pr1
以使GMETAD
守护程序指向gmetad.conf
文件的正确路径。但是,我怀疑这可能是错误的,因为gmetad
应该pr2
处理这个问题。那么,我将其确定为错误是否正确?如果是,如何使 gmetad 守护进程指向另一个节点元节点中的配置文件的路径pr2
?
[root@pr1]# nano /etc/init.d/gmetad
### Change here ###
#GMETAD=/usr/sbin/gmetad
GMETAD=/usr/local/sbin/gmetad
. /etc/rc.d/init.d/functions
test -f /etc/sysconfig/gmetad && . /etc/sysconfig/gmetad
export RRDCACHED_ADDRESS
start() {
[ -x $GMETAD ] || exit 5
[ -f /etc/ganglia/gmetad.conf ] || exit 6
echo -n "Starting GANGLIA gmetad: "
### Change here ###
#daemon $GMETAD
daemon $GMETAD -c /usr/local/etc/gmetad.conf
### If this means that the gmetad of the local system
### will monitor this node, how do I make the daemon
### point to the gmetad.conf file of the meta node, pr2?
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/gmetad
return $RETVAL
}
感谢您浏览配置步骤的所有详细信息。如果我错过或忽略了任何其他可能的原因,请随时指出。