您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>數(shù)值算法/人工智能>

怎樣在Docker Swarm上部署Apache Storm

大?。?/span>0.9 MB 人氣: 2017-10-10 需要積分:1
  本文是一篇來源于Baqend Tech博客的客座轉貼,描述了如何在Docker Swarm,而不是在虛擬機上部署和調(diào)配Apache Storm集群。這個題目很有意思,Wolfram Wingerath將之描述為“真正有趣”的體驗,在Tech上你很少能聽見這種話。我好奇地問他是什么讓使用容器比使用虛擬機更棒?他回答說:
  作為一名Docker和Docker Swarm的新手,我肯定還有很多不知道的事。不過,在我看來,在Docker上部署(及一般操作)比在虛擬機甚至裸機上更有趣,因為Docker提取自從異構性和許多問題中。一旦運行了Docker,你就可以用一行聲明語句來啟動MongoDB或者Redis的服務器等東西。Docker Swarm集群可以幫你做同樣的事,而且Docker還會幫你把啟動的東西分發(fā)給集群中的某個服務器。Docker甚至會幫你下載正確的鏡像,如果你本地沒有的話。你也不用解決連接問題,因為只要在同一Docker網(wǎng)絡中,任一臺機器都與所有其他的機器互聯(lián)互通。正如在本教程中所提到的,只要你使用了overlay網(wǎng)絡,分布式安裝也能實現(xiàn)。
  你在郵件中引用到了我的一些話,當我在寫它們的時候,我的腦海深處想起了幾個月前,我需要安裝和運行一個擁有超過16個節(jié)點的Apache Storm集群的事。當時有好幾個問題,比如,我對AWS并不太熟悉(以前是用OpenStack的),還有與(Storm使用的)Netty的連接性問題,以及AWS的主機名解析問題。這些問題在我設置OpenStack的時候從沒出現(xiàn)過。最終我們花費了數(shù)天及數(shù)百美元去解決它們。我真心認為,如果你使用Docker,你就不會遇到這些麻煩,因為你的環(huán)境始終如一:即Docker。
  回到教程上來
  Bagend Cloud即將支持查詢緩存和連續(xù)查詢的功能,我們將依靠Apache Storm來處理低延遲的數(shù)據(jù)。已經(jīng)有好幾個項目都致力于實現(xiàn)在Docker上部署多服務器Storm (例如wurstmeister/storm-docker或viki-org/storm-docker),但是越過服務器數(shù)量的限制似乎會使事情變得復雜。既然可擴展性和易操作性是我們部署的關鍵,我們從一開始就使用Dock Swarm,也很高興地看到事情進展的如此順利。我們希望通過這篇教程來分享我們的經(jīng)歷,提升你對即將發(fā)布的Baqend實時API的興趣,最終宣傳一下Dock Swarm(因為它真的很牛!):-)
  如果你是Swarm新手,請看我們的AWS Meetup Docker幻燈片!
  接下來的計劃
  概述
  首先,我們將介紹一個簡單的部署范例,并解釋其中的每一部分。接著,我們會告訴你在TL;DR中所需做的最簡單的準備工作(使用事先準備好的實用腳本程序)。然后,我們會來到本教程的核心部分,一步步向你展示Docker Swarm集群及多節(jié)點Apache Storm集群的部署過程。當然,我們也會做一些與Storm(特別是部署和終止遠程服務器上的拓撲)以及Swarm(例如重啟manager節(jié)點和終止整個Storm集群)都涉及到的常規(guī)工作。
  概述:部署
  下圖是部署的架構圖:
  怎樣在Docker Swarm上部署Apache Storm
  有三臺運行Ubuntu Server 14.04的機器,每臺都會運行一個Docker守護進程,同時每臺都裝有幾個容器。經(jīng)過初始設置,你只能訪問其中一臺機器(Ubuntu 1),很大程度上來說,會覺得只有一個Docker守護進程。
  安裝Swarm之后,你會創(chuàng)建一個覆蓋網(wǎng)絡(stormnet),這樣不同Swarm節(jié)點間的Docker容器就可以相互通信了。最終,你將建立起一個成熟的Storm集群,這個集群使用現(xiàn)有的 ZooKeeper 共同協(xié)調(diào),并通過stormnet實現(xiàn)節(jié)點間的通信。雖然監(jiān)管容器將每一臺服務器策略分發(fā),Nimbus和UI容器則會安裝在manager節(jié)點上(Ubuntu 1)。
  必須允許對Ubuntu 1機器的公共訪問(即分配一個公共IP和開放端口8080?。?。否則,你就看不到Storm美麗的UI了。
  詳細教程
  我們給三個Ubuntu機器的域名分別是zk1.cloud、zk2.cloud和zk3.cloud。由于ZooKeeper服務器和manager節(jié)點從概念上說是兩個不同的角色,我們使用manager.swarm和manager.swarm.baqend.com作為manager節(jié)點的私有IP地址和公共IP地址。盡管本教程中,Ubuntu 1實際上是扮演了ZooKeeper 1和管理者兩個角色,但你可以在自己部署的時候使用不同兩個服務器來完成。在Github上check out這個教程,在readme.me中,根據(jù)你自己的域名,查找并替換我們的原有域名,然后你就可以把我們的大部分語句復制粘貼到我們將要使用的外殼程序中了。
  太長不看?
  對于那些急著看結果的人來說,我們也準備了一些腳本!這些是部署Swarm和Storm所需的全部腳本了。但是,為了便于理解,后面還是會有一個詳細的步驟描述的。
  所以,在討論細節(jié)之前,這有一份快速指南:
  1.創(chuàng)建一個Ubuntu 14.04服務器 – 我們稱之為Ubuntu 1 – 然后通過SSH連接它。然后執(zhí)行以下語句check out指南中的腳本來安裝Docker:
  sudoapt-get install git -y && \ cd/home/ubuntu/ && \ git clone https://github.com/Baqend/tutorial-swarm-storm.git && \ chmod +x tutorial-swarm-storm/s/* && \ cdtutorial-swarm-storm/s/ && \ sudobash installDocker.sh && \ sudousermod -aG docker ubuntu && \ sudoshutdown -h now
  2.機器會自動關機。關機的時候,生成快照。
  3.啟動兩臺你剛剛快照過的機器(Ubuntu 2和Ubuntu 3),使用一下自定義腳本把它們做成Swarm worker節(jié)點:
  #!/bin/bash cd /home/ubuntu/ &&rm -rf tutorial-swarm-storm &&\ git clone https://github.com/Baqend/tutorial-swarm-storm.git &&\ cd tutorial-swarm-storm/s/ &&\ chmod +x 。/* &&\ 。/init.sh zk1.cloud,zk2.cloud,zk3.cloud
  注意:你需要把逗號分隔開的主機名替換成你自己的主機名。
  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/s/ && \ ZOOKEEPER=zk1.cloud,zk2.cloud,zk3.cloud&& \ sudo bash init.sh$ZOOKEEPER manager && \ 。 swarm.sh$ZOOKEEPER && \ 。 storm.sh$ZOOKEEPER 3
  再次提醒:記得把其中的主機名替換為你自己的。
  你現(xiàn)在應該可以訪問http://manager.swarm.baqend.com:8080下的Storm UI了。
  另外,當你在manager節(jié)點上輸入
  dockerinfo
  時,你將會看見UI和Nimbus容器在同一臺機器上運行,而Swarm管理器和監(jiān)控容器則在不同的機器上運行。
  再做一次:準備一個鏡像
  好,現(xiàn)在讓我們來看一遍詳細的步驟。為了避免重復的步驟,我們只在一臺機器上進行這些準備工作,然后關機并快照。接著我們通過這個快照創(chuàng)建其它機器。
  讓我們開始吧:
  1.創(chuàng)建Ubuntu 1,作為Ubuntu 14.04服務器,然后通過SSH連接它,執(zhí)行下列語句安裝Docker:
  sudo apt-getupdate &&sudo apt-getinstall apt-transport-httpsca-certificates&&sudo apt-keyadv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D \&&echo “deb https://apt.dockerproject.org/repo ubuntu-trusty main”|sudo tee -a/etc/apt/sources.list.d/docker.list\&&sudo apt-getupdate &&sudo apt-getpurge lxc-docker&&sudo apt-cachepolicy docker-engine\&&sudo apt-getupdate -y&&sudo apt-getinstall -ylinux-image-extra-$(uname -r) apparmor docker-enginegit make \&&sudo usermod -aGdocker $(whoami)
  (關于Docker安裝的細則可以看這里)
  由于Docker是通過一個key文件去識別不同的docker守護進程的,因此在快照之前,我們要停止docker守護進程,刪掉這個key文件(重啟Docker后會生成一個新的Key文件),關機之前記得快照。
  sudoservice docker stop \ && sudorm /etc/docker/key.json
  注意:如果你不在快照之前刪掉這個Key文件,則所有根據(jù)這個鏡像生成的機器都會擁有同樣的識別符,最終你的Swarm集群一片狼藉。
  3.最后,我們只 需要用同一個方法準備一個機器,這個機器在下次boot的時候會成為Swarm worker。為此,我們用文本編輯器,例如nano,創(chuàng)建一個文件 /etc/init.sh。
  sudonano /etc/init.sh
  接著,我們復制下列代碼,并保存:
  #!/bin/bash# first argument: the servers in the ZooKeeper ensemble:ZOOKEEPER_SERVERS=$1# second 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”]];thenLABELS=“--label server=manager”;elseLABELS=“”;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\“”\ | sudotee /etc/default/docker # restart the service to apply new options:sudoservice docker restart echo“l(fā)et‘s wait a little.。.”sleep 30# make this machine join the Docker Swarm cluster:docker run -d--restart=always swarm join --advertise=$PRIVATE_IP:2375zk://$ZOOKEEPER_SERVERS
  4.現(xiàn)在,我們要關機了。
  sudoshutdown -h now
  接著快照一下。
  5.現(xiàn)在,通過快照的鏡像,啟動另外兩臺機器(Ubuntu 2和Ubuntu 3)。使用下面的語句作為初始/自定義腳本:
  #!/bin/bash/bin/bash /etc/init.sh\ zk1.cloud,zk2.cloud,zk3.cloud
  注意:如果你使用的是OpenStack,上述腳本可以加為自定義腳本。但如果是AWS,則應加為用戶數(shù)據(jù)。
  6.重啟已經(jīng)快照過的機器(Ubuntu 1),連接機器,接著執(zhí)行以下代碼:
  /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地址。
  8.最后,完成安全設置,使端口2181、2888、3888 (ZooKeeper)、2375 (Docker Swarm)和6627 (Storm, 遠程拓撲部署)上的機器可以互相訪問。如果你希望可以實現(xiàn)從外部訪問Storm UI,那么還需要公開manager.swarm.baqend.com:8080。
  見證奇跡的時刻到了!
  創(chuàng)建Swarm集群
  如果一切順利,那么你現(xiàn)在已經(jīng)有了三臺Ubuntu服務器,每個上面都運行了一個Docker守護進程??梢酝ㄟ^私有網(wǎng)絡中的zk1.cloud和manager.swarm訪問Ubuntu 1,或者也可以從外部通過manager.swarm.baqend.com(至少在8080端口)訪問。我們一直在這臺機器上折騰,并且,從現(xiàn)在開始,這是我們唯一需要訪問的機器。為了保證Swarm節(jié)點之間的協(xié)調(diào)通暢,我們需要配置ZooKeeper ensemble和Swarm管理器。
  1.通過SSH連接Ubuntu1,接著快速檢查一遍。如果Docker安裝正確,運行下列代碼可以顯示出一個所有運行中的Docker容器的列表(只有針對Swarm的):
  docker ps
  2.現(xiàn)在我們可以按下面的方法在每臺機器上啟動一個ZooKeeper節(jié)點:
  docker -Htcp://zk1.cloud:2375 run -d --restart=always \-p2181:2181\-p2888:2888\-p3888:3888\-v/var/lib/zookeeper:/var/lib/zookeeper \-v/var/log/zookeeper:/var/log/zookeeper \--name zk1 \baqend/zookeeper zk1.cloud,zk2.cloud,zk3.cloud 1docker -Htcp://zk2.cloud:2375 run -d --restart=always \-p2181:2181\-p2888:2888\-p3888:3888\-v/var/lib/zookeeper:/var/lib/zookeeper \-v/var/log/zookeeper:/var/log/zookeeper \--name zk2 \baqend/zookeeper zk1.cloud,zk2.cloud,zk3.cloud 2docker -Htcp://zk3.cloud:2375 run -d --restart=always \-p2181:2181\-p2888:2888\-p3888:3888\-v/var/lib/zookeeper:/var/lib/zookeeper \-v/var/log/zookeeper:/var/log/zookeeper \--name zk3 \baqend/zookeeper zk1.cloud,zk2.cloud,zk3.cloud 3
  通過明確說明-H……參數(shù),我們可以在不同的主機上啟動ZooKeeper容器。-p命令打開ZooKeeper默認需要的那些端口。兩個-v命令通過將ZooKeeper使用的文件夾映射到對應的主機文件夾,可以在發(fā)生容器錯誤的情況仍然保持連貫性。以逗號分隔的主機名列表通知ZooKeeper這一集合中有哪些服務器。集合中的每個節(jié)點都不例外。唯一的變量就是ZooKeeper的ID(第二個參數(shù)),因為它對每個容器都是不一樣的。
  你可以使用以下命令行來檢查ZooKeeper是否一切正常:
  docker -H tcp://zk1.cloud:2375exec -it zk1 bin/zkServer.shstatus && \ docker -H tcp://zk2.cloud:2375exec -it zk2 bin/zkServer.shstatus && \ docker -H tcp://zk3.cloud:2375exec -it zk3 bin/zkServer.shstatus
  如果你的集群一切正常,每個節(jié)點都會匯報它們是主節(jié)點還是從節(jié)點。
  Now it’s time to start the Swarm manager:
  現(xiàn)在是開啟Swarm管理器的時候了:
  docker run -d --restart=always \ --label role=manager \ -p 2376:2375\ swarm manage zk://zk1.cloud,zk2.cloud,zk3.cloud
  現(xiàn)在Swarm集群正在運行。但是我們必須把這一點告訴Docker客戶端。最后你只須保證之后所有的Docker運行語句都指向Swarm管理器的容器(它會負責排程),并且不違反本地Docker守護進程。
  cat 《《 EOF| tee -a~/.bash_profile # this node is the master and therefore should be able to talk to the Swarm cluster:export DOCKER_HOST=tcp://127.0.0.1:2376EOF``` export DOCKER_HOST=tcp://127.0.0.1:2376上面這段會立即執(zhí)行,并且保證下次我們登錄機器的時候被再次執(zhí)行。 《divclass=“se-preview-section-delimiter”》《/div》 ##健康度檢查現(xiàn)在一切都被啟動運行了。鍵入 《divclass=“se-preview-section-delimiter”》《/div》
  docker info
  檢查一下manager節(jié)點上的集群狀態(tài)。你會看到3個運行中的worker,類似這樣: 《divclass=“se-preview-section-delimiter”》《/div》
  Nodes: 3 docker1: zk1.cloud:2375 └ Status: Healthy └ Containers: 3 └ Reserved CPUs: 0 / 1 └ Reserved Memory: 0 B / 2.053 GiB └ Labels: executiondriver=native-0.2, kernelversion=3.13.0-40-generic, operatingsystem=Ubuntu 14.04.1 LTS, server=manager, storagedriver=devicemapper └ Error: (none) └ UpdatedAt: 2016-04-03T15:39:59Z docker2: zk2.cloud:2375 └ Status: Healthy └ Containers: 2 └ Reserved CPUs: 0 / 1 └ Reserved Memory: 0 B / 2.053 GiB └ Labels: executiondriver=native-0.2, kernelversion=3.13.0-40-generic, operatingsystem=Ubuntu 14.04.1 LTS, storagedriver=devicemapper └ Error: (none) └ UpdatedAt: 2016-04-03T15:39:45Z docker3: zk3.cloud:2375 └ Status: Healthy └ Containers: 2 └ Reserved CPUs: 0 / 1 └ Reserved Memory: 0 B / 2.053 GiB └ Labels: executiondriver=native-0.2, kernelversion=3.13.0-40-generic, operatingsystem=Ubuntu 14.04.1 LTS, storagedriver=devicemapper └ Error: (none) └ UpdatedAt: 2016-04-03T15:40:15Z
  最重要的是每個節(jié)點的Status: Healthy那一行。如果你發(fā)現(xiàn)出現(xiàn)了其它的狀態(tài),例如Status: Pending,或者有的節(jié)點沒有顯示出來,那么即使其它地方還沒有報錯,也應該用以下命令試著重啟管理容器, 《divclass=“se-preview-section-delimiter”》《/div》
  docker restart $(docker ps -a --no-trunc --filter “l(fā)abel=role=manager” | awk ’{if(NR》1)print $1;}‘)
  然后再檢查一次(這個操作可能會引發(fā)一個錯誤信息;無視它)。 《divclass=“se-preview-section-delimiter”》《/div》 ##創(chuàng)建Storm集群現(xiàn)在Swarm已經(jīng)運行起來了,你將要創(chuàng)建一個覆蓋網(wǎng)絡來跨越所有的Swarm節(jié)點,為單獨的Storm組建運轉多個容器。盡管Supervisor節(jié)點(即Storm workers)散布于Swarm集群中的所有節(jié)點,Nimbus和UI會在manager節(jié)點上,每臺服務器上一個。 1.先創(chuàng)建覆蓋網(wǎng)絡stormnet: 《divclass=“se-preview-section-delimiter”》《/div》
  docker network create --driver overlay stormnet
  然后通過Docker來檢查stormnet是否存在: 《divclass=“se-preview-section-delimiter”》《/div》
  docker network ls
  2.現(xiàn)在一個一個地啟動Storm組件。每個Storm相關的容器會有一個cluster=storm標記,這樣你在后面殺死整個Storm集群時,不會錯殺其它容器。 首先,啟動UI 《divclass=“se-preview-section-delimiter”》《/div》
  docker run \ -d \ --label cluster=storm \ --label role=ui \ -e constraint:server==manager \ -e STORM_ZOOKEEPER_SERVERS=zk1.cloud,zk2.cloud,zk3.cloud \ --net stormnet \ --restart=always \ --name ui \ -p 8080:8080 \ baqend/storm ui \ -c nimbus.host=nimbus
  接下來是Nimbus: 《divclass=“se-preview-section-delimiter”》《/div》
  docker run \ -d \ --label cluster=storm \ --label role=nimbus \ -e constraint:server==manager \ -e STORM_ZOOKEEPER_SERVERS=zk1.cloud,zk2.cloud,zk3.cloud \ --net stormnet \ --restart=always \ --name nimbus \ -p 6627:6627 \ baqend/storm nimbus \ -c nimbus.host=nimbus
  為了確保這些在manager節(jié)點上運行,我們加入一個限制條件:constraint:server==manager。 3.你現(xiàn)在可以訪問Storm UI了,就好像它是在manager節(jié)點上運行一樣:假如你的manager節(jié)點有個公開IP并且其端口8080開放,你就可以用鏈接[http://manager.swarm.baqend.com:8080](http://t.umblr.com/redirect?z=http://manager.swarm.baqend.com:8080&t=YWFkOTgxYWRjYzIwYTllYTJkNjA0NTcxYjU4MWZmMWY4NzExMGNmMSxoVEVjU3FkZA==)通過瀏覽器來訪問Storm集群。但是目前還沒有運行任何supervisor節(jié)點。 4.運行以下語句三次,來啟動三個supervisor: 《divclass=“se-preview-section-delimiter”》《/div》
  docker run \ -d \ --label cluster=storm \ --label role=supervisor \ -e affinity:role!=supervisor \ -e STORM_ZOOKEEPER_SERVERS=zk1.cloud,zk2.cloud,zk3.cloud \ --net stormnet \ --restart=always \ baqend/storm supervisor \ -c nimbus.host=nimbus \ -c supervisor.slots.ports=[6700,6701,6702,6703]
  因為我們無所謂具體啟動哪里的supervisor節(jié)點,這里我們不用加入任何限制條件或容器名。但是,為了防止同一臺機器上的有兩個supervisor被啟動,我們用了一個**affinity標記**:affinity:role!=supervisor。如果你要用更多的supervior容器,就得添加更多的Swarm worker節(jié)點(Ubuntu 4、Ubuntu 5等等)。 5.看一眼Storm UI,確保有三個Supervisor在運行。 《divclass=“se-preview-section-delimiter”》《/div》 ##(遠程)拓撲部署可以通過與manager主機在同一網(wǎng)絡中的任意一臺裝有Docker守護進程的服務器來部署拓撲網(wǎng)絡。在下面的代碼中,假設你目前使用的目錄中,拓撲fatjar是一個名為topology.jar的文件。 《divclass=“se-preview-section-delimiter”》《/div》
  docker -H tcp://127.0.0.1:2375 run \ -it \ --rm \ -v $(readlink -m topology.jar):/topology.jar \ baqend/storm \ -c nimbus.host=manager.swarm \ jar /topology.jar \ main.class \ topologyArgument1 \ topologyArgument2
  **注意:**這個命令會生出一個Docker容器,部署拓撲,接著刪除容器。我們用-H tcp://127.0.0.1:2375參數(shù)來確保容器是在你當前使用的機器上啟動的。如果讓Docker Swarm自己來編排,部署就可能會失敗,因為在生成容器的主機上可能找不到必要的拓撲文件。 另外,readlink -m topology.jar會為topology.jar生成一個絕對路徑,因為并不支持相對路徑。但是你也可以直接提供一個絕對路徑。 《divclass=“se-preview-section-delimiter”》《/div》 ##Killing A Topology《divclass=“se-preview-section-delimiter”》《/div》 ##終止一個拓撲可以通過與Storm web UI交互從而終止一個拓撲,或者也可以通過下面的方式,假設正在運行的拓撲叫做runningTopology: 《divclass=“se-preview-section-delimiter”》《/div》
  docker run \ -it \ --rm \ baqend/storm \ -c nimbus.host=manager.swarm \ kill runningTopology
  此處并不需要主機參數(shù)-H 。..,因為上述命令是獨立的,并不依賴任何文件。 《div class=“se-preview-section-delimiter”》《/div》 ##關掉Storm集群由于每個與Storm相關的容器都有一個cluster=storm標簽,你可以用下述語句終止所有的容器: 《div class=“se-preview-section-delimiter”》《/div》
  docker rm -f $(docker ps -a --no-trunc --filter “l(fā)abel=cluster=storm” | awk ’{if(NR》1)print $1;}‘)
  “`
  不要忘記安全性!
  我們在此教程中示范了如何在Docker上用多節(jié)點的ZooKeeper集為了高可用性和容錯性運行一個分布式Storm集群。為了不讓這個教程過分復雜,我們跳過了針對TLS配置Docker Swarm的部分。如果你打算把Docker Swarm用于關鍵的業(yè)務應用中,你必須在這個方面多下些功夫。
  Baqend是怎樣使用Apache Storm的?
  我們利用Storm的能力來提供低延遲的流查詢和查詢緩存:
  連續(xù)查詢
  如果你的APP允許連續(xù)查詢,Apache Storm能接受你的連續(xù)查詢和所有你的寫入操作,并且將它們相比對:每當寫一個對象時,所有注冊的連續(xù)查詢都與之比對。既然Storm一直在跟蹤所有查詢的結果,它就能發(fā)現(xiàn)新的主機或者新的匹配或不匹配的情況,并且在變更剛發(fā)生的時候通知你。
  查詢緩存
  對于查詢緩存來說,我們用這些通知來主動讓緩存失效:Baqend Cloud用一段合理長度的TTL來緩存一個查詢結果,一旦發(fā)生變更就自動讓緩存的查詢結果無效。得益于Storm,我們的匹配網(wǎng)絡延遲僅為幾毫秒,相較以往,數(shù)據(jù)的獲取速度顯著提高。
  Baqend Cloud將很快發(fā)布這兩大功能,近期,我們也會在Baqend Tech博客發(fā)表更多有關架構的細則和標桿性測試結果。敬請期待!
  結束語
  本教程是為1.10.3版本的Docker和1.1.3的Swarm所做,并在OpenStack和AWS上測試。本教程及我們的Storm和ZooKeeper Docker鏡像文件都在Chicken Dance License v0.2的保護下有效。
  tutorial at GitHub baqend/storm Docker image at Docker Hub and GitHubbaqend/zookeeper Docker image at Docker Hub and GitHub
  在Github獲取教程
  在Docker Hub和GitHub獲取baqend/storm Docker鏡像文件在Docker Hub和GitHub獲取baqend/zookeeper Docker鏡像文件

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

怎樣在Docker Swarm上部署Apache Storm下載

相關電子資料下載

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關規(guī)定!

      ?