Apache Storm 官方文件 —— Storm 叢集安裝配置
本文詳細介紹了 Storm 叢集的安裝配置方法。如果需要在 AWS 上安裝 Storm,你應該先了解一下 storm-deploy 專案。storm-deploy 可以自動完成 E2 上 Storm 叢集的準備、配置、安裝的全部過程,同時還設定好了 Ganglia,方便監控 CPU、磁碟以及網路的使用資訊。
如果你在使用 Storm 叢集時遇到問題,請先檢視“問題與解決”一文中是否已有相應的解決方案。如果檢索不到有效的解決方法,請向社群的郵件列表傳送關於問題的郵件。
以下是安裝 Storm 的步驟:
- 安裝 ZooKeeper 叢集;
- 在各個機器上安裝執行叢集所需要的依賴元件;
- 下載 Storm 安裝程式並解壓縮到叢集的各個機器上;
- 在 storm.yaml 中新增叢集配置資訊;
- 使用 “storm” 指令碼啟動各機器後臺程序。
安裝 ZooKeeper 叢集
Storm 使用 ZooKeeper 來保證叢集的一致性。叢集中 ZooKeeper 並不是用來進行訊息傳遞的,所以 Storm 對 ZooKeeper 的負載相當低。雖然在大部分場景下單點 ZooKeeper 也勉強夠用,但是如果你需要更可靠的 HA 機制或者需要部署大規模 Storm 叢集,你最好配置一個 ZooKeeper 叢集。ZooKeeper 叢集的部署說明請參考此文。
關於 ZooKeeper 部署的幾點說明:
- ZooKeeper 必須在監控模式下執行。因為 ZooKeeper 是個快速失敗系統,如果遇到了故障,ZooKeeper 服務會主動關閉。更多詳細資訊請參考此文。
- 需要設定一個 cron 服務來定時壓縮 ZooKeeper 的資料與事務日誌。因為 ZooKeeper 的後臺程序不會處理這個問題,如果不配置 cron,ZooKeeper 的日誌會很快填滿磁碟空間。更多詳細資訊請參考此文。
安裝必要的依賴元件
接下來你需要在叢集中的所有機器上安裝必要的依賴元件,包括:
- Java 6(推薦使用 JDK 7 以上版本 —— 譯者注)
- Python 2.6.6(推薦使用 Python 2.7.x 版本 —— 譯者注)
以上均為在 Storm 上測試通過的版本。Storm 並不保證對其他版本的 Java 或 Python 的支援。
下載 Storm 安裝程式並解壓
接下來就要下載需要的 Storm 發行版,並將 zip 安裝檔案解壓縮到叢集中的各個機器上。Storm 的發行版可以在這裡下載(推薦在 Storm 官方網站的下載頁面使用 Apache 的映象服務下載 —— 譯者注)。
配置 storm.yaml
Storm 的安裝包中包含一個在 conf 目錄下的 storm.yaml
檔案,該檔案是用於配置 Storm 叢集的各種屬性的。你可以在這裡檢視各個配置項的預設值。storm.yaml 會覆蓋 defaults.yaml 中各個配置項的預設值。以下是幾個在安裝叢集時必須配置的選項:
1) storm.zookeeper.servers:這是 Storm 關聯的 ZooKeeper 叢集的地址列表,此項的配置是如下所示:
storm.zookeeper.servers:
- "111.222.333.444"
- "555.666.777.888"
注意,如果你使用的 ZooKeeper 叢集的埠不是預設埠,你還需要相應地配置 storm.zookeeper.port。
2) storm.local.dir:Nimbus 和 Supervisor 後臺程序都需要一個用於存放一些狀態資料(比如 jar 包、配置檔案等等)的目錄。你可以在每個機器上建立好這個目錄,賦予相應的讀寫許可權,並將該目錄寫入配置檔案中,如下所示:
storm.local.dir: "/mnt/storm"
3) nimbus.host:叢集的工作節點需要知道叢集中的哪臺機器是主機,以便從主機上下載拓撲以及配置檔案,如下所示:
nimbus.host: "111.222.333.44"
4) supervisor.slots.ports:你需要通過此配置項配置每個 Supervisor 機器能夠執行的工作程序(worker)數。每個 worker 都需要一個單獨的埠來接收訊息,這個配置項就定義了 worker 可以使用的埠列表。如果你在這裡定義了 5 個埠,那麼 Storm 就會在該機器上分配最多 5 個worker。如果定義 3 個埠,那 Storm 至多隻會執行三個 worker。此項的預設值是 6700、6701、6702、6703 四個埠,如下所示:
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
配置外部庫與環境變數(可選)
如果你需要使用某些外部庫或者定製外掛的功能,你可以將相關 jar 包放入 extlib/
與 extlib-daemon
目錄下。注意,extlib-daemon
目錄僅僅用於儲存後臺程序(Nimbus,Supervisor,DRPC,UI,Logviewer)所需的 jar 包,例如,HDFS 以及定製的排程庫。另外,可以使用STORM_EXT_CLASSPATH
和 STORM_EXT_CLASSPATH_DAEMON
兩個環境變數來配置普通外部庫與“僅用於後臺程序”外部庫的 classpath。
使用 “storm” 指令碼啟動後臺程序
最後一步是啟動所有的 Storm 後臺程序。注意,這些程序必須在嚴格監控下執行。因為 Storm 是個與 ZooKeeper 相似的快速失敗系統,其程序很容易被各種異常錯誤終止。之所以設計成這種模式,是為了確保 Storm 程序可以在任何時刻安全地停止並且在程序重新啟動之後恢復征程。這也是 Storm 不在處理過程中儲存任何狀態的原因 —— 在這種情況下,如果有 Nimbus 或者 Supervisor 重新啟動,執行中的拓撲不會受到任何影響。下面是啟動後臺程序的方法:
- Nimbus:在 master 機器上,在監控下執行
bin/storm nimbus
命令。 - Supervisor:在每個工作節點上,在監控下執行
bin/storm supervisor
命令。Supervisor 的後臺程序主要負責啟動/停止該機器上的 worker 程序。 - UI:在 master 機器上,在監控下執行
bin/storm ui
命令啟動 Storm UI(Storm UI 是一個可以在瀏覽器中方便地監控叢集與拓撲執行狀況的站點)後臺程序。可以通過http://{nimbus.host}:8080
來訪問 UI 站點。
可以看出,啟動後臺程序非常簡單。同時,各個後臺程序也會將日誌資訊記錄到 Storm 安裝程式的 logs/ 目錄中(這是 Storm 的預設設定,日誌檔案的路徑與相關配置資訊可以在 {STORM_HOME}/logback/cluster.xml 檔案中修改 —— 譯者注)。