Storm集群异常:Nimbus连接失败与Supervisor进程终止排查求助
问题诊断
从你的日志和现象来看,核心问题是远程Supervisor节点(166、172)无法与Nimbus节点(165)建立Thrift连接,导致Supervisor找不到Nimbus Leader,进而无法启动Worker进程,甚至自身崩溃。而165本地的Supervisor能正常工作,是因为它可以通过localhost访问Nimbus,避开了跨节点的网络绑定问题。
可能的原因
最常见的情况是:Storm Nimbus默认只绑定了localhost(127.0.0.1),导致其他节点无法通过192.168.23.165这个IP访问到Nimbus的Thrift服务(默认端口6627)。
解决方案步骤
1. 修改Nimbus节点的Storm配置
在165节点的storm.yaml配置文件中,添加或修改以下配置项,确保Nimbus绑定到对外可访问的IP:
# 指定Nimbus的对外主机地址 nimbus.host: "192.168.23.165" # 确保Thrift服务绑定到所有网卡(或者直接指定192.168.23.165) nimbus.thrift.bind.host: "0.0.0.0" nimbus.thrift.bind.port: 6627
注:
nimbus.thrift.bind.host设为0.0.0.0表示监听所有网卡,这样无论是本地还是远程节点都能访问。
2. 验证Nimbus的监听状态
在165节点执行以下命令,检查Nimbus的Thrift端口是否正确监听:
netstat -tulpn | grep 6627
你需要看到类似这样的输出(监听地址是0.0.0.0或者192.168.23.165,而不是127.0.0.1):
tcp 0 0 0.0.0.0:6627 0.0.0.0:* LISTEN 1234/java
3. 重启Nimbus服务
修改配置后,重启165节点的Storm Nimbus进程:
# 停止Nimbus storm nimbus stop # 后台启动Nimbus storm nimbus &
4. 验证远程节点的连通性
在166或172节点,测试能否连接到165的6627端口:
# 使用telnet测试 telnet 192.168.23.165 6627 # 或者用nc(如果已安装) nc -zv 192.168.23.165 6627
如果能成功连接,说明网络问题已经解决。
5. 重启Supervisor并测试拓扑
在166、172节点重启Supervisor进程:
storm supervisor stop storm supervisor &
然后重新提交拓扑,检查jps -l是否能看到Worker进程,同时查看supervisor.log是否还有连接拒绝的错误。
额外排查点
如果上述步骤无效,可以检查以下内容:
- 确认
storm.local.dir目录在所有节点都存在,且Storm进程有读写权限(执行ls -ld /opt/storm/data查看权限)。 - 验证ZK的连通性:在166/172节点执行
zkCli.sh -server 192.168.23.165:2181,确认能正常连接ZK。 - 检查Storm版本一致性:所有节点的Storm版本都是1.2.3,避免版本不兼容导致的通信问题。
内容的提问来源于stack exchange,提问作者xj y

