Twitter Storm: 搭建storm集羣
網址: http://xumingming.sinaapp.com/179/twitter-storm-搭建storm集羣/
本文翻譯自: https://github.com/nathanmarz/storm/wiki/Setting-up-a-Storm-cluster。
這篇文章介紹搭建storm集羣並運行的步驟。如果你使用AWS, 那麼你可以看一下storm-deploy項目,storm-deploy項目使得在Amazon EC2上安裝,配置storm集羣完全自動化。這篇文章同時也幫你配置好Ganglia以監控CPU, 硬盤以及網絡資源的使用情況。
下面是搭建storm集羣的一些主要步驟:
- 搭建ZooKeeper集羣。
- 在Nimbus和所有工作機器上面安裝所有的軟件。
- 在Nimbus和所有工作機器上下載並解壓storm的發行版。
- 對storm.yaml進行一些必要的配置。
- 使用storm腳本來啓動所有的必要的進程(nimbus, supervisor, worker)。
搭建ZooKeeper集羣
storm使用zookeeper來協調整個集羣, 但是要注意的是storm並不用zookeeper來傳遞消息。所以zookeeper上的負載是非常低的,單個節點的zookeeper在大多數情況下都已經足夠了, 但是如果你要部署大一點的storm集羣, 那麼你需要的zookeeper也要大一點。關於如何部署zookeeper,可以看這裏。
關於如何部署zookeeper有些需要注意的地方:
- 對zookeeper做好監控非常重要, zookeeper是fail-fast的系統,只要出現什麼錯誤就會退出, 所以一定要監控,更多細節看這裏。
- 一定要配置一個cron job來壓縮zookeeper的數據和業務日誌。zookeeper自己是不會去壓縮這些的,所以你如果不設置一個cron job, 那麼你很快就會磁盤不夠用了,更多細節看這裏。
在Nimbus和工作機器上安裝必要軟件
接下來需要安裝Nimbus和工作機器上面的一些storm所依賴的軟件。
- ZeroMQ 2.1.7
- JZMQ
- Java 6
- Python 2.6.6
- unzip
上面同時也列出了storm所依賴的軟件的版本, 如果版本不一樣可能運行不了。
如果安裝ZeroMQ和JZMQ的時候有問題,可以看下安裝依賴。
在Nimbus和工作機器上下載並解壓storm發行版
接下來, 下載storm的發行版,然後解壓。storm的發行版可以在這裏找到。
配置storm.yaml
storm發行版在conf/storm.yaml包含了一些配置信息。你可以在這裏看到默認配置。storm.yaml裏面的配置比default.xml的優先級要高, 下面是要運行storm集羣所必須的配置:
1. storm.zookeeper.servers 這個配置storm集羣使用的zookeeper集羣的地址,比如:
1
2
3
|
storm.zookeeper.servers: -
"111.222.333.444" -
"555.666.777.888" |
2. storm.local.dir Nimbus和Supervisor在本地磁盤上需要一個目錄來存儲一些狀態信息(jar包, 配置文件之類的東西)你應該在每臺機器上創建那個目錄,分配正確的權限,比如:
1
|
storm.local.dir:
"/mnt/storm" |
3. java.library.path 這是storm所依賴的本地依賴(ZeroMQ和JZMQ)的加載地址, 默認的是:/usr/local/lib:/opt/local/lib:/usr/lib, 大多情況下是對的,所以你應該不用更改這個配置。
4. nimbus.host 所有工作機器需要nimbus機器的地址, 這樣它們才知道去哪裏獲取jar包和配置文件:
1
|
nimbus.host:
"111.222.333.44" |
5. supervisor.slots.ports 對於每一臺工作機器,這個配置指定在這臺工作機器上運行多少工作進程, 每個進程使用一個獨立端口來接收消息,這個配置同時也指定使用哪些端口。如果你在這裏定義5個端口, storm會在這個機器上最多分配5個工作進程。如果分配3個端口,那麼最多分配3個進程。默認的配置是4個:
1
2
3
4
5
|
supervisor.slots.ports: -
6700 -
6701 -
6702 -
6703 |
啓動守護進程
最後一步是啓動storm的所有守護進程。還是前面說的那樣,對於每個進程都要有監控!storm是一個fail-fast系統,出現什麼不可預知的錯誤的時候它都會退出的。storm被設計成在任何時候都可以安全退出, 在任何時候都能正確重啓, 這就是storm爲什麼不在線程內存儲狀態 — 如果Nimbus和Supervisor重啓的話,不會影響正在運行的topology。下面介紹如何啓動這些線程:
- Nimbus 在Nimbus機器上運行bin/storm nimbus
- Supervisor 在每臺工作機器上運行bin/storm supervisor, supervisor負責啓動和終止工作機器上的工作進程。
- UI storm UI是一個可以查看storm運行狀態的的一個網站,通過bin/storm ui運行,訪問地址: http://{nimbus.host}:8080/。
就像你能看到的一樣,運行storm集羣很簡單。這些進程會往你解壓storm發行版的目錄的子目錄logs目錄裏面打日誌。