在Docker Swarm上部署Apache Storm:第1部分(在Docker中,镜像仓库的操作命令)

网友投稿 694 2022-09-23

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

在Docker Swarm上部署Apache Storm:第1部分(在Docker中,镜像仓库的操作命令)

如何在 Docker Swarm 上部署并调配Apache Storm集群,这个题目很有意思,Wolfram Wingerath将之描述为“真正有趣”的体验,在Tech上你很少能听见这种话。我好奇地问他是什么让使用容器比使用虚拟机更棒?他回答说:

回到教程上来

接下来的计划

概述

首先,我们将介绍一个简单的部署范例,并解释其中的每一部分。接着,我们会在重点预告中告诉你所需完成的最简单的准备工作(使用事先准备好的实用脚本程序)。然后,我们会来到本教程的核心部分,一步步向你展示Docker Swarm集群及多节点Apache Storm集群的部署过程。当然,我们也会做一些与Storm(特别是部署和终止远程服务器上的拓扑)以及Swarm(例如重启manager节点和终止整个Storm集群)都涉及到的常规工作。

概述:部署

下图是部署的架构图:

有三台运行Ubuntu Server 14.04的机器,每台都会运行一个Docker守护进程,同时每台都装有几个容器。经过初始设置,你只能访问其中一台机器(Ubuntu 1),很大程度上来说,会觉得只有一个Docker守护进程。

必须允许对Ubuntu 1机器的公共访问(即分配一个公共IP和开放端口8080!)。否则,你就看不到Storm美丽的UI了。

详细教程

我们给三个Ubuntu机器的域名分别是zk1.cloud、zk2.cloud和zk3.cloud。由于ZooKeeper服务器和manager节点从概念上说是两个不同的角色,我们使用manager.swarm和manager.swarm.baqend.com作为manager节点的私有IP地址和公共IP地址。尽管本教程中,Ubuntu 1实际上是扮演了ZooKeeper 1和管理者两个角色,但你可以在自己部署的时候使用不同两个服务器来完成。在Github上check out这个教程,在readme.me中,根据你自己的域名,查找并替换我们的原有域名,然后你就可以把我们的大部分语句复制粘贴到我们将要使用的外壳程序中了。

重点预告

所以,在讨论细节之前,这有一份快速指南:

1.创建一个Ubuntu 14.04服务器 – 我们称之为Ubuntu 1 – 然后通过SSH连接它。然后执行以下语句check out指南中的脚本来安装Docker:

2.机器会自动关机。关机的时候,生成快照。

3.启动两台你刚刚快照过的机器(Ubuntu 2和Ubuntu 3),使用一下自定义脚本把它们做成Swarm worker节点:

注意:你需要把逗号分隔开的主机名替换成你自己的主机名。

4.对域名服务器做如下设置:把列表中的第一台主机zk1.cloud指向Ubuntu1,剩下的zk2.cloud和zk3.cloud分别指向Ubuntu 2和Ubuntu 3。另外要确保manager.swarm.baqend.com和manager.swarm分别被解析为Ubuntu 1的公开IP地址和私有IP地址。

5.确保主机之间可以互相访问:需要打开端口2181、2888、3888 (ZooKeeper)、2375 (Docker Swarm)和6627 (Storm,远程拓扑部署)。为了保证能从外部访问Storm UI,还必须公开manager.swarm.baqend.com:8080。

6.最后,启动Ubuntu 1同时运行下列代码,配置ZooKeeper ensemble、Swarm和Storm:

cd /home/ubuntu/tutorial-swarm-storm/scripts/ && \ZOOKEEPER=zk1.cloud,zk2.cloud,zk3.cloud && \sudo bash init.sh $ZOOKEEPER manager && \. swarm.sh $ZOOKEEPER && \. storm.sh $ZOOKEEPER 3

再次提醒:记得把其中的主机名替换为你自己的。

另外,当你在manager节点上输入docker info 时,你将会看见UI和Nimbus容器在同一台机器上运行,而Swarm管理器和监控容器则在不同的机器上运行。

再做一次:准备一个镜像

好,现在让我们来看一遍详细的步骤。为了避免重复的步骤,我们只在一台机器上进行这些准备工作,然后关机并快照。接着我们通过这个快照创建其它机器。

让我们开始吧:

1.创建Ubuntu 1,作为Ubuntu 14.04服务器,然后通过SSH连接它,执行下列语句安装Docker:

由于Docker是通过一个key文件去识别不同的docker守护进程的,因此在快照之前,我们要停止docker守护进程,删掉这个key文件(重启Docker后会生成一个新的Key文件),关机之前记得快照。

sudo service docker stop \&& sudo rm /etc/docker/key.json

注意:如果你不在快照之前删掉这个Key文件,则所有根据这个镜像生成的机器都会拥有同样的识别符,最终你的Swarm集群一片狼藉。

3.最后,我们只 需要用同一个方法准备一个机器,这个机器在下次boot的时候会成为Swarm worker。为此,我们用文本编辑器,例如nano,创建一个文件 /etc/init.sh。

sudo nano /etc/init.sh

接着,我们复制下列代码,并保存:

#!/bin/bash# first script argument: the servers in the ZooKeeper ensemble:ZOOKEEPER_SERVERS=$1# second script argument: the role of this node:# ("manager" for the Swarm manager node; leave empty else)ROLE=$2# the IP address of this machine:PRIVATE_IP=$(/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}')# define label for the manager node:if [[ $ROLE == "manager" ]];then LABELS="--label server=manager";else LABELS="";fi# define default options for Docker Swarm:echo "DOCKER_OPTS=\"-H tcp://0.0.0.0:2375 \    -H unix:///var/run/docker.sock \    --cluster-advertise eth0:2375 \    $LABELS \    --cluster-store \    zk://$ZOOKEEPER_SERVERS\"" \| sudo tee /etc/default/docker# restart the service to apply new options:sudo service docker restartecho "let's wait a little..."sleep 30# make this machine join the Docker Swarm cluster:docker run -d --restart=always swarm join --advertise=$PRIVATE_IP:2375 zk://$ZOOKEEPER_SERVERS

4.现在,我们要关机了。

sudo shutdown -h now

接着快照一下。

5.现在,通过快照的镜像,启动另外两台机器(Ubuntu 2和Ubuntu 3)。使用下面的语句作为初始/自定义脚本:

#!/bin/bash/bin/bash /etc/init.sh \    zk1.cloud,zk2.cloud,zk3.cloud

注意:如果你使用的是OpenStack,上述脚本可以加为自定义脚本。但如果是AWS,则应加为用户数据。

6.重启已经快照过的机器(Ubuntu 1),连接机器,接着执行以下代码:

/bin/bash /etc/init.sh \    zk1.cloud,zk2.cloud,zk3.cloud \    manager

这会在机器上建立一个Swarm worker,并标之为Swarm管理器。

7.对域名服务器做如下设置:将列表中的第一个域名(zk1…)指向Ubuntu1上的管理器,剩下的两个域名(zk2…和zk3…)指向另外两台刚刚启动的机器,即Ubuntu 2和Ubuntu 3。另外要确保manager.swarm.baqend.com和manager.swarm分别被解析为Ubuntu的公开IP地址和私有IP地址。

见证奇迹的时刻到了!

在本文的第二部分,会手把手地介绍如何创建 Swarm 集群,敬请关注。

上一篇:在 Java 中如何更高效地存储和管理 SQL 语句?(在水一方)
下一篇:为什么阿里云用户需要使用 Cloud Insight 来加强管理?(阿里云对于个人来说有什么用)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~