如何通过Docker Compose部署Apache Storm集群(全节点部署Supervisor)
如何用Docker Compose实现全节点运行Supervisor的Apache Storm集群部署
没问题,我来帮你实现这个需求——让Swarm集群里的每一台主机都跑起来Apache Storm Supervisor实例。结合你给出的初始配置,我调整并完善了docker-compose.yml,同时给你拆解关键配置点:
完整的docker-compose.yml配置
version: "3.6" services: zookeeper: image: zookeeper networks: - esnet1 deploy: mode: global restart_policy: condition: on-failure delay: 5s max_attempts: 3 nimbus: image: storm command: storm nimbus volumes: - logs:/logs depends_on: - zookeeper networks: - esnet1 ports: - 6627:6627 deploy: restart_policy: condition: on-failure delay: 5s max_attempts: 3 placement: constraints: [node.role == manager] # 可选:将Nimbus固定在Swarm管理节点 supervisor: image: storm command: storm supervisor volumes: - logs:/logs depends_on: - zookeeper - nimbus networks: - esnet1 environment: - SUPERVISOR_SLOTS_PORTS=6700,6701,6702,6703 # 定义Supervisor的Worker端口数量 deploy: mode: global # 核心:每个集群节点都会启动一个Supervisor实例 restart_policy: condition: on-failure delay: 5s max_attempts: 3 ui: image: storm command: storm ui depends_on: - zookeeper - nimbus networks: - esnet1 ports: - 8080:8080 deploy: restart_policy: condition: on-failure delay: 5s max_attempts: 3 volumes: logs: networks: esnet1: driver: overlay
关键配置解析
- Supervisor的
deploy.mode: global:这是实现「所有主机运行Supervisor」的核心。Docker Swarm的global模式会自动在集群的每一个节点上启动一个该服务的实例,后续新增节点时也会自动部署,完全匹配你的需求。 - 完善的重启策略:给所有组件补充了
restart_policy的细节(故障延迟重启、最大尝试次数),保证集群组件故障后能自动恢复,提升整体稳定性。 - Nimbus节点约束(可选):通过
placement.constraints把Nimbus固定在Swarm管理节点上,符合Storm的架构设计——Nimbus作为集群主控节点,通常部署在稳定的管理节点上避免漂移。 - Storm UI服务(可选):新增了Storm UI组件,通过8080端口映射可以在浏览器中监控集群状态、拓扑运行情况,方便日常运维。
- 日志卷统一挂载:所有Storm组件都挂载了同一个
logs卷,你可以通过docker volume inspect storm-cluster_logs找到日志目录,集中查看所有组件的运行日志。 - Worker端口配置:通过
SUPERVISOR_SLOTS_PORTS环境变量定义每个Supervisor能运行的Worker端口数量,默认是4个,你可以根据节点的CPU、内存资源调整这个数值。
部署步骤
- 确保你的Docker Swarm集群已经初始化完成(未初始化的话,在主节点运行
docker swarm init,然后按照提示把其他节点加入集群) - 将上述配置保存为
docker-compose.yml - 执行部署命令:
docker stack deploy -c docker-compose.yml storm-cluster - 查看集群状态:
docker stack services storm-cluster,你会看到supervisor服务的副本数等于你的集群节点总数,说明每个节点都成功启动了Supervisor实例
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

