拥有大量作为hadoop堆栈一部分运行的服务;需要一个简单的cli脚本来检查各种进程并为最终用户提供简单的输出。
将有50多个主机;它需要在每台主机上检查大约10个服务。
目前用bash编写;我喜欢输出,但代码是sllllooowww,因为它检查每个进程;通过无密码ssh和pgrep一次1个。
寻找建议或提示,使这更快。
即:
Hostname | IP | Ping | SSH | Zookeeper | Namenode | Datanode
localhost | 127.0.0.1 | online | online | _ | _ | _
node1 | 172.30.50.150 | online | online | _ | _ | _
dn1 | 10.142.0.100 | online | online | online | online | online
示例代码:
fun_datanode () {
zup=`ssh $1 "ps ax | grep -v grep | grep datanode | wc -l"`
if [ $zup -gt 0 ]; then
dn=online
else
dn="_"
fi
}
# main
# main loop that reads host file
for host in `awk '/^[0-9]/ { print $1 }' /etc/hosts`
do
# ping
fping -c1 -t10 -n $host > /dev/null 2>&1
RETVAL=$?
hname=`getent hosts $host | awk '{print $2 }'`
if [ $RETVAL -eq 0 ]; then
if ssh $host 'pgrep ssh' > /dev/null 2>&1; then
ssh=online
fun_zookeeper $host
fun_namenode $host
fun_datanode $host
fi
fun_print "$hname $host "online" $ssh $zoo $nn $dn"
echo
else
fun_print $hname $host "${red}offline${norm}" "_" "_" "_" "_"
echo
fi
done
3条答案
按热度按时间nr9pn0ug1#
有类似pdsh(parallel distributed shell)的实用程序https://code.google.com/p/pdsh/wiki/usingpdsh
这可用于在多个节点上并行运行进程检查。
并行ssh在google代码中存档(只读)。有关更多最新版本,请参见https://github.com/pkittenis/parallel-ssh .
另一种选择是面料:http://www.fabfile.org/
nukf8bse2#
找到一个工作解决方案,而不涉及重大项目;
不是每次都去井里通过ssh获取节点上的进程状态;在每个节点上获取一次ps ax,然后分配给局部变量。然后每次询问变量当前进程状态。
而不是做(节点数量x服务数量)=ssh连接;现在它只做(节点数量)=ssh连接。
从那里;我可以把每个ssh。。。
gopyfrb33#
您应该使用ganglia或ambari来监视大型集群。它们是免费的、开源的。它们具有基于阈值的监视和警报功能。