docker-compose搭建storm、zookeeper集群,解决Could not find leader nimbus from seed hosts [localhost]问题

storm前提:

搭建环境:

windows11-专业版

Docker-Desktop

zookeeper-3.5.9(官方镜像)

storm-2.4.0(官方镜像)

注意,以下的解释全是基于storm和zookeeper的官方镜像,不同的镜像的情况不同。

问题描述:

        大多数同学在配置storm集群时,大多都会参考网上的配置教程,或者通过ChatGPT进行辅助编写docker-compose.yml文件。以上情况通常在storm连接单个zookeeper时是没有问题的,发生Could not find leader nimbus from seed hosts [localhost]的报错通常是在storm连接多个zookeeper的集群时出现,本次在这里给大家解决这个报错的问题。

报错如下:

问题原因:

        出现以上报错目前据我已知的有以下两种情况。问题的根本原因是storm中的zookeeper.server、nimbus.seeds配置没有成功写入到storm的配置文件当中。

(以docker-compose.yml文件展示两种情况)

        1、没有配置environment也缺少volumes配置

        2、配置了environment,不过依旧报错。

        以上两种情况经过我的测试,在浏览器中输入  localhost:8080(storm-ui的界面端口)最终都会出现以上的报错。这两种情况的根本原因是没有成功写入storm的配置文件,第一种情况是根本就没有去添加storm的相关配置。

        那么第二种情况为什么配置了storm的环境,但还是有问题呢?

        经过查阅大量资料,我认为是storm的docker官方镜像中不支持在docker-compose.yml文件中使用environment去对storm的配置文件做修改,也就是说在environment中添加storm_zookeeper_servers、storm_nimbus_seeds的配置信息根本不起作用。至于大家想自己看看是否真的不起作用,可以在docker-desktop中点进集群中进行查看。

解决办法:

        根据在docker-hub的官网查找storm官方镜像得到的信息进行分析可得知,如果想通过docker-compose配置storm且搭上zookeeper集群的话,需要通过目录挂载的方式将storm的相关配置写入到docker的storm.yaml文件中才行。

docs/storm at master · docker-library/docs (github.com)所以我们只需要在docker-compose.yml文件中配置挂载storm.yaml文件即可。

正确的docker-compose.yml的参考配置如下:

version: '3'

networks:
  storm-net:

services:
  zookeeper1:
    image: zookeeper:3.5.9
    container_name: zookeeper1
    hostname: zookeeper1
    ports:
      - 8101:2181
      - 8102:2888
      - 8103:3888
      - 8108:8080
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=zookeeper1:2888:3888;2181 server.2=zookeeper2:2888:3888;2181 server.3=zookeeper3:2888:3888;2181
      
    networks:
      - storm-net
  zookeeper2:
    image: zookeeper:3.5.9
    container_name: zookeeper2
    hostname: zookeeper2
    ports:
      - 8201:2181
      - 8202:2888
      - 8203:3888
      - 8208:8080
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zookeeper1:2888:3888;2181 server.2=zookeeper2:2888:3888;2181 server.3=zookeeper3:2888:3888;2181
    networks:
      - storm-net
  zookeeper3:
    image: zookeeper:3.5.9
    container_name: zookeeper3
    hostname: zookeeper3
    ports:
      - 8301:2181
      - 8302:2888
      - 8303:3888
      - 8308:8080
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zookeeper1:2888:3888;2181 server.2=zookeeper2:2888:3888;2181 server.3=zookeeper3:2888:3888;2181
    networks:
      - storm-net

  storm-nimbus:
    image: storm:2.4.0
    container_name: storm-nimbus
    hostname: storm-nimbus
    command: storm nimbus
    ports:
      - 6627:6627
    depends_on:
      - zookeeper1
      - zookeeper2
      - zookeeper3
    environment:
      - STORM_ZOOKEEPER_SERVERS=zookeeper1,zookeeper2,zookeeper3
    volumes:
      - ./storm-conf/storm.yaml:/conf/storm.yaml
    networks:
      - storm-net

  storm-supervisor1:
    image: storm:2.4.0
    container_name: storm-supervisor1
    hostname: storm-supervisor1
    command: storm supervisor
    depends_on:
      - storm-nimbus
    volumes:
      - ./storm-conf/storm.yaml:/conf/storm.yaml
    networks:
      - storm-net

  storm-supervisor2:
    image: storm:2.4.0
    container_name: storm-supervisor2
    hostname: storm-supervisor2
    command: storm supervisor
    depends_on:
      - storm-nimbus
    volumes:
      - ./storm-conf/storm.yaml:/conf/storm.yaml
    networks:
      - storm-net

  storm-supervisor3:
    image: storm:2.4.0
    container_name: storm-supervisor3
    hostname: storm-supervisor3
    command: storm supervisor
    depends_on:
      - storm-nimbus
    volumes:
      - ./storm-conf/storm.yaml:/conf/storm.yaml
    networks:
      - storm-net

  storm-ui:
    image: storm:2.4.0
    container_name: storm-ui
    hostname: storm-ui
    command: storm ui
    ports:
      - "8080:8080"
    depends_on:
      - storm-nimbus
    volumes:
      - ./storm-conf/storm.yaml:/conf/storm.yaml
    networks:
      - storm-net

 storm.yaml文件内容如下:zookeeper1、storm-nimbus都和docker-compose中的服务名或者容器名对应

storm.zookeeper.servers: [zookeeper1,zookeeper2,zookeeper3]
nimbus.seeds: [storm-nimbus]

文件目录结构如下:

成功运行情况

在docker-compose.yml的当前目录下,右键开启终端,在终端中输入docker-compose up -d

在docker-desktop中查看容器可见以上容器全部成功启动,且没有掉,如果容器的颜色由绿色变为橙色,则表明容器没有启动成功,宕掉了。

再在浏览器中输入 localhost:8080即可查看storm-ui的界面,查看storm集群的信息

storm配置中存在的一些其他问题及解释

1、storm-ui的界面中,明明只配置了一个nimbus但是却有两个nimbus的节点显示,其中一个是有名字的,还有一个是一串数字和字母的结合(这个其实是该节点的id),情况如下截图。

其原因是因为没有给容器设置hostname,配置之后就没问题了。

        在这里再解释一下docker-compose中的服务名、容器名、hostname。

        如果没有设置容器名,则docker默认将容器名设置为服务名,并且在docker-compose.yml文件中,如果需要用到depends_on或者links等其他配置,以文件中的服务名为准,比如以下截图中的depends_on中storm-nimbus就是我设置的nimbus的服务名。不过,为了避免不必要的错误和问题,建议最好服务名容器名以及hostname设置且相同

2、如果以下这两种情况不要慌,是正常情况

这个情况是,日志信息显示,Apache Storm的nimbus获得了领导权,然后每隔10秒就记录一次信息,显示没有被列入黑名单的监管者(Supervisors)。这是正常的日志输出,表明你的系统正在正常运行。

在supervisor中出现大量的以下信息,这是supervisor在进行健康检查,保证supervisor正常

最后祝大家都能够成功解决软件运行时的报错,不仅如此,生活上的困扰也能顺利化解。

很喜欢”闻香识女人“中的一句话:If you make a mistake, get all tangled up, just tango on。如果你的舞步错了,那又有什么关系呢?接着tango下去就是了。

如果对相关问题依旧存有疑问,欢迎大家在评论区留言交流。要是内容存在错误、不足和改进,欢迎大家多批评指正,这对我们都很重要!

联系:

QQ:106672998

微信:hsh241817

  • 23
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值