跨入流式计算时代,用不着洪荒之力——在阿里云容器服务上一键部署JStorm

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: JStorm是阿里巴巴出品的强大的企业级流式计算引擎,具有使用方便、性能高、生态丰富等优点。 但是,部署JStorm依赖于zookeeper、python、JDK等若干个组件,同时还要配置nimbus、supervisor等角色,部署过程比较长。为了简化这一过程,阿里巴巴JStorm团队和容器

JStorm是阿里巴巴出品的强大的企业级流式计算引擎,跟Apache Strom相比,具有使用方便、性能高、生态丰富等优点,是搭建流式计算平台的优秀选择。更多关于JStorm的介绍,请参考官方网站http://www.jstorm.io/

但是,部署JStorm依赖于zookeeper、python、JDK等若干个组件,同时还要配置nimbus、supervisor等角色,部署过程比较长。为了简化这一过程,阿里巴巴JStorm团队和容器服务团队合作推出了Docker版的JStorm,可以实现一键部署

创建集群

首先我们需要创建一个集群用来部署JStorm。阿里云容器服务提供集成界面,可以很方便地创建出一个集群来,流程请参考这个帮助文档。需要注意的是,我们需要至少3台机器。

部署zookeeper

为了达到高可用,我们需要部署3个zookeeper节点。传统的方式部署zookeeper时,需要把所有节点的IP作为配置文件;一旦迁移,需要修改配置并重启所有节点。阿里云容器服务提供类似DNS的容器名解析服务,可以把容器名作为配置项,这样迁移时就不需要修改配置了。其编排模板如下:

zk1:
    image: 'mesoscloud/zookeeper:3.4.8-ubuntu'
    environment:
        - MYID=1
        - SERVERS=jstorm_zk1_1,jstorm_zk2_1,jstorm_zk3_1
        - constraint:aliyun.node_index==1
    restart: 'always'
zk2:
    image: 'mesoscloud/zookeeper:3.4.8-ubuntu'
    environment:
        - MYID=2
        - SERVERS=jstorm_zk1_1,jstorm_zk2_1,jstorm_zk3_1
        - constraint:aliyun.node_index==2
    restart: 'always'
zk3:
    image: 'mesoscloud/zookeeper:3.4.8-ubuntu'
    environment:
        - MYID=3
        - SERVERS=jstorm_zk1_1,jstorm_zk2_1,jstorm_zk3_1
        - constraint:aliyun.node_index==3
    restart: 'always'

其中jstorm_zk1_1、jstorm_zk2_1、jstorm_zk3_1就是容器名,其规则是<应用名>_<服务名>_<容器编号>,所以只要确定了应用名和服务名,容器名就是固定的,可以用来做配置项;而且容器名在容器网络内是可以跨主机解析的。

另外,为了使zookeeper节点分布在不同机器上,我们使用了节点约束constraint:aliyun.node_index==n,n是指集群中节点的序号,这样该容器只会部署在n号节点上。

部署JStorm

阿里巴巴JStorm团队提供了JStorm的Docker镜像https://dev.aliyun.com/detail.html?srepoId=9448,并且会定期更新最新版本。

JStorm有两个角色,Nimbus和Supervisor。从高可用角度考虑,Nimbus需要部署两个,Supervisor可以根据需要配置数量。

同样的,为了让Nimbus分布在不同的机器上,可以指定应用约束affinity:service!=nimbus,这样nimbus服务的容器只会部署在没有其他nimbus容器的机器上。

另外,supervisor依赖的nimbus地址,也是用容器名来代替的。

JStorm还提供WebUI,默认在8080端口提供服务。阿里云容器服务提供一个简单的方式将Web服务暴露到外网,只需要配置标签aliyun.routing.port_8080: 'http://nimbus'。该标签的含义是,将nimbus子域名映射到容器的8080端口。更详细的介绍请参考这篇帮助文档

其编排模板如下:

nimbus:
    image: 'registry.cn-hangzhou.aliyuncs.com/jstorm-docker/jstorm'
    environment:
        - CHARACTER=nimbus
        - ZK_ROOT=/jstorm.docker.root2
        - ZK_HOSTS=jstorm_zk1_1,jstorm_zk2_1,jstorm_zk3_1
        - CLUSTER_NAME=jstorm.docker.cluster
    labels:
        aliyun.routing.port_8080: 'http://nimbus'
        aliyun.scale: '2'
    restart: 'always'
supervisor:
    image: 'registry.cn-hangzhou.aliyuncs.com/jstorm-docker/jstorm'
    environment:
        - CHARACTER=supervisor
        - NIMBUS_HOSTS=jstorm_nimbus_1
        - ZK_ROOT=/jstorm.docker.root2
        - ZK_HOSTS=jstorm_zk1_1,jstorm_zk2_1,jstorm_zk3_1
        - CLUSTER_NAME=jstorm.docker.cluster
    labels:
        aliyun.routing.port_8080: 'http://supervisor'
        aliyun.scale: '3'
    restart: 'always'
    links:
        - nimbus

一键部署

我们可以把zookeeper和JStorm放在一个编排文件里,实现一键部署。

在这个编排文件中,我们使用了COMPOSE_PROJECT_NAME这个环境变量。COMPOSE_PROJECT_NAME是默认设置的环境变量,其值为当前应用的名称。

zk1:
    image: 'mesoscloud/zookeeper:3.4.8-ubuntu'
    environment:
        - MYID=1
        - SERVERS=${COMPOSE_PROJECT_NAME}_zk1_1,${COMPOSE_PROJECT_NAME}_zk2_1,${COMPOSE_PROJECT_NAME}_zk3_1
        - constraint:aliyun.node_index==1
    restart: 'always'
zk2:
    image: 'mesoscloud/zookeeper:3.4.8-ubuntu'
    environment:
        - MYID=2
        - SERVERS=${COMPOSE_PROJECT_NAME}_zk1_1,${COMPOSE_PROJECT_NAME}_zk2_1,${COMPOSE_PROJECT_NAME}_zk3_1
        - constraint:aliyun.node_index==2
    restart: 'always'
zk3:
    image: 'mesoscloud/zookeeper:3.4.8-ubuntu'
    environment:
        - MYID=3
        - SERVERS=${COMPOSE_PROJECT_NAME}_zk1_1,${COMPOSE_PROJECT_NAME}_zk2_1,${COMPOSE_PROJECT_NAME}_zk3_1
        - constraint:aliyun.node_index==3
    restart: 'always'
nimbus:
    image: 'registry.cn-hangzhou.aliyuncs.com/jstorm-docker/jstorm'
    environment:
        - CHARACTER=nimbus
        - ZK_ROOT=/jstorm.docker.root2
        - ZK_HOSTS=${COMPOSE_PROJECT_NAME}_zk1_1,${COMPOSE_PROJECT_NAME}_zk2_1,${COMPOSE_PROJECT_NAME}_zk3_1
        - CLUSTER_NAME=jstorm.docker.cluster
    labels:
        aliyun.routing.port_8080: 'http://nimbus'
        aliyun.scale: '2'
    restart: 'always'
    links:
        - zk1
        - zk2
        - zk3
supervisor:
    image: 'registry.cn-hangzhou.aliyuncs.com/jstorm-docker/jstorm'
    environment:
        - CHARACTER=supervisor
        - NIMBUS_HOSTS=jstorm_nimbus_1
        - ZK_ROOT=/jstorm.docker.root2
        - ZK_HOSTS=${COMPOSE_PROJECT_NAME}_zk1_1,${COMPOSE_PROJECT_NAME}_zk2_1,${COMPOSE_PROJECT_NAME}_zk3_1
        - CLUSTER_NAME=jstorm.docker.cluster
    labels:
        aliyun.routing.port_8080: 'http://supervisor'
        aliyun.scale: '3'
    restart: 'always'
    links:
        - nimbus

为了保证zookeeper在JStorm之前部署,我们使用了link功能。link除了让容器之间网络互通,还告诉调度器服务之间的依赖关系,调度器会保证被依赖的服务先启动。

生产部署

通过上面的编排文件,我们从容地实现了一键部署JStorm,但在生产上应用,还需要注意一些细节。

  • zookeeper默认把持久化数据保存在/tmp/zookeeper中,生产部署时需要把该数据卷映射到指定的主机目录上
  • JStorm的WebUI开放到了公网,生产部署时需要使用内网域名或使用内网SLB
  • 我们把zookeeper和JStorm部署在了相同的机器上;生产部署时最好隔离开

资料

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
28天前
|
存储 Kubernetes Docker
容器服务ACK常见问题之阿里云控制台进不去了如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
1月前
|
弹性计算 运维 安全
2024年阿里云一键搭建部署幻兽帕鲁服务器解决方案
幻兽帕鲁火了,为了确保畅快体验游戏,构建高效、稳定的游戏服务器至关重要。幸运的是,阿里云为您提供了快速、简便的服务器搭建解决方案,即使您对技术知识了解有限,也能在短短一分钟内轻松完成《幻兽帕鲁》游戏的联机服务器搭建!
1447 4
|
1天前
|
弹性计算 JavaScript Java
阿里云服务器搭建部署宝塔详细流程
以下是内容的摘要: 本文主要介绍了在阿里云上创建和配置服务器环境的步骤,包括注册阿里云账号、实名认证、购买和设置服务器、域名的获取与备案、以及使用宝塔面板安装和配置环境。首先,用户需要注册阿里云账号并进行实名认证,选择合适的服务器配置。接着,购买服务器后,要准备并备案域名,以便通过友好的网址访问网站。在服务器上安装宝塔面板,可以方便地管理和配置LAMP/LNMP/Tomcat/Node.js等应用环境。完成这些步骤后,用户还需要在宝塔面板中安装MySQL、Redis等数据库,部署Java或Vue项目,并配置相关端口。最后,将前端项目打包上传至服务器,并设置站点,即可实现网站的上线。
|
1天前
|
应用服务中间件 Linux 开发工具
如何在阿里云服务器快速搭建部署Nginx环境
以下是内容的摘要: 本文档主要介绍了在阿里云上购买和配置服务器的步骤,包括注册阿里云账号、实名认证、选择和购买云服务器、配置安全组、使用Xshell和Xftp进行远程连接和文件传输,以及安装和配置Nginx服务器的过程。在完成这些步骤后,你将能够在服务器上部署和运行自己的网站或应用。
|
3天前
|
NoSQL 关系型数据库 MySQL
阿里云服务器部署项目流程
本文主要讲解阿里云服务器的部署,如何选择配置等
|
6天前
|
Java 应用服务中间件 Linux
阿里云服务器部署多个tomcat
阿里云服务器部署多个tomcat
|
23天前
|
弹性计算 缓存 Kubernetes
什么是阿里云弹性容器实例?弹性容器实例优势及应用场景介绍
弹性容器实例是阿里云的云服务器产品,使用弹性容器实例之后,用户无需管理底层 ECS 服务器,只需要提供打包好的镜像,即可运行容器,与阿里云容器服务无缝对接并仅为容器实际运行消耗的资源付费。本文介绍了阿里云弹性容器实例的、功能特性、产品优势及应用场景。
什么是阿里云弹性容器实例?弹性容器实例优势及应用场景介绍
|
30天前
|
域名解析 弹性计算 数据可视化
如何使用云服务器ECS搭建网站?阿里云云服务器ECS部署网站新手教程
本文介绍了在阿里云ECS上自助建站的流程。建站方式包括自助建站、模板建站和定制建站,适合个人或小企业用户。建站步骤涉及准备服务器、配置安全组规则、部署网站、购买和备案域名以及解析域名。此外,文章还提及了产品计费和常见问题,提供相关服务如架构设计、迁云服务和基础设置服务等。
378 0
|
1月前
|
弹性计算 运维 安全
手把手教你入门部署幻兽帕鲁服务器:2024年阿里云搭建幻兽帕鲁Palworld联机服务器新手教程
手把手教你入门部署幻兽帕鲁服务器:2024年阿里云搭建幻兽帕鲁Palworld联机服务器新手教程。对于热衷《幻兽帕鲁》这款开放世界生存制作游戏的粉丝而言,拥有个人游戏服务器无疑是令人心动的。这款由Pocketpair开发的游戏,在2024年1月18日推出了其抢先体验版,它凭借广阔的游戏世界和丰富的玩法——如收集神奇的生物“帕鲁”,让它们参与战斗、建造、农耕和工业生产等——赢得了大量玩家的喜爱。现在,我将为大家详细指导如何在阿里云服务器上轻松一键部署《幻兽帕鲁》的联机服务器。
1083 2
|
1月前
幻兽帕鲁部署服务器阿里云视频攻略
多重搭建方式应有尽有
847 6

相关产品

  • 容器计算服务