三臺服務器10.223.138.[141-143]html
JDK 1.7.0_80java
It is strongly recommended to use Oracle JDK rather than OpenJDK.
本次安裝Storm版本爲1.1.0
官網地址 請點擊我
官方文檔 Version: 1.1.0
安裝文檔 Setting up a Storm Clusterpython
CDH安裝Zookeeper服務,此處略
Zookeeper version:zookeeper-3.4.5-cdh5.7.0git
官方建議:github
A few notes about Zookeeper deployment:web
- It's critical that you run Zookeeper under supervision, since Zookeeper is fail-fast and will exit the process if it encounters any error case. See here for more details.
- It's critical that you set up a cron to compact Zookeeper's data and transaction logs. The Zookeeper daemon does not do this on its own, and if you don't set up a cron, Zookeeper will quickly run out of disk space. See here for more details.
安裝Storm所須要的依賴apache
JDK 7 下載地址 請點擊我
CenOS 6.7自帶Python 2.6.6瀏覽器
# python -V Python 2.6.6
以上安裝方法此處再也不贅述,可自行網上查閱。bash
下載地址 apache-storm-1.1.0.tar.gz
將壓縮包解壓到指定目錄tar -zxvf apache-storm-1.1.0.tar.gz -C /your/path/
服務器
The Storm release contains a file atconf/storm.yaml
that configures the Storm daemons. You can see the default configuration values here. storm.yaml overrides anything indefaults.yaml
.
配置文件位置conf/storm.yaml
,如下是用以啓動集羣的必要配置
storm.zookeeper.servers: - "10.223.138.141" - "10.223.138.142" - "10.223.138.143"
若是端口不是默認的2181還須要配置storm.zookeeper.port參數
storm.local.dir: "/home/storm"
hostname -f
,修改方法請自行網上查閱。(配置多個Nimbus角色的機器能夠啓動Nimbus H/A。) nimbus.seeds: ["cdh-1"]
原來我使用的是10.223.138.141,可是storm ui上Nimbus Summary出現了兩行數據,一個是cdh-1,一個是10.223.138.141這種奇怪的問題,可是換成了全域名的這種形式就沒問題了。
supervisor.slots.ports: - 6700 - 6701 - 6702
# 腳本相關文件的存放目錄 storm.health.check.dir: "/home/storm/healthchecks" # 腳本執行的超時時間 storm.health.check.timeout.ms: 5000
若是須要擴展第三方庫或自定義插件,把jar包放入extlib/
或者extlib-daemon/
目錄,extlib-daemon/
這個裏面只能被Storm的程序所使用,好比(Nimbus, Supervisor, DRPC, UI, Logviewer)這些,也能夠經過環境變量STORM_EXT_CLASSPATH
和STORM_EXT_CLASSPATH_DAEMON
去配置擴展庫classpath目錄。
bin/storm nimbus &
bin/storm supervisor &
,它用於啓停Worker進程。bin/storm ui &
,而後能夠經過瀏覽器訪問http://{ui host}:8080。logs/
此目錄下可查看運行日誌。
在Setting up a Storm Cluster這份官方安裝文檔中強烈建議run under supervision,引用官方文檔的原話(原文地址:Daemon-Fault-Tolerance)
What happens when Nimbus or Supervisor daemons die?
The Nimbus and Supervisor daemons are designed to be fail-fast (process self-destructs whenever any unexpected situation is encountered) and stateless (all state is kept in Zookeeper or on disk). As described in Setting up a Storm cluster, the Nimbus and Supervisor daemons must be run under supervision using a tool like daemontools or monit. So if the Nimbus or Supervisor daemons die, they restart like nothing happened.
當Nimbus或者Supervisor daemon進程掛了會怎樣?
Nimbus和Supervisor daemon進程設計成快速失敗(不管什麼時候遇到任何異常狀況執行自毀)和無狀態(全部狀態保存在Zookeeper或者磁盤上)。正如Setting up a Storm Cluster中描述的,Nimbus和Supervior daemon進程必須在監控下運行,如使用daemontools或者monit工具。因此若是Nimbus或者Supervisor daemon進程掛了,它能夠像什麼異常也沒有發生似的從新啓動。
這裏我使用monit,詳細介紹請參閱官網。(官網地址請點擊我)
安裝命令yum install monit
,若是沒有找到的話,須要先安裝epel源yum install epel-release
配置文件位置 /etc/monit.conf,分爲Global section和Services兩個部分
set daemon 60 #每60秒檢查一次服務 with start delay 240 #Monit啓動後第一次檢查延遲240秒 set logfile /var/log/monit.log #日誌輸出到單獨的文件 set pidfile /var/run/.monit.pid #pid文件位置 set idfile /var/.monit.id #id文件位置 set statefile /var/.monit.state #state文件位置 #配置web頁面訪問 set httpd port 2812 and #端口2812 use address 10.223.138.141 #若是配置localhost只能本地訪問 allow localhost #容許本地訪問 allow 10.223.138.141 #若不配置,monit status命令不可用,後臺報錯 #error : Denied connection from non-authorized client #error : Cannot read status from the monit daemon allow 10.223.132.0/24 #容許10.223.132網段訪問,即個人電腦所在網段 allow admin:monit #用戶名與密碼
中間插一下:若是使用防火牆,要訪問的話還須要把2812端口加入防火牆配置,編輯防火牆配置文件/etc/sysconfig/iptables
增長一行配置:-A INPUT -m state --state NEW -m tcp -p tcp --dport 2812 -j ACCEPT
注意:須要在相應的配置段中加入,其餘位置不生效
. . -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 2812 -j ACCEPT . .
重啓服務service iptables restart
這裏把Services的配置和全局配置分開,在/etc/monit.d/下面新建文件nimbus和supervisor做爲監控nimbus和supervisor的配置。
這裏主要是監控nimbus和supervisor的進程,咱們只看monit監控進程的語法 CHECK PROCESS <unique name> <PIDFILE <path> | MATCHING <regex>>
有兩種方式,一個是pidfile,一個是正則匹配進程名,由於storm的deamon沒寫pid文件,這裏我用第二種方法,使用monit procmatch
命令驗證是否能夠匹配相應的進程,例如nimbus的進程,Command裏面最後有org.apache.storm.daemon.nimbus
#monit procmatch org.apache.storm.daemon.nimbus List of processes matching pattern "org.apache.storm.daemon.nimbus": ------------------------------------------ ...此處省略... ------------------------------------------ Total matches: 1
匹配到nimbus的進程,表示OK。
#vi /etc/monit.d/nimbus
check process nimbus matching org.apache.storm.daemon.nimbus start program = "/bin/bash -c '/home/storm/apache-storm-1.1.0/bin/nimbus.sh &>/tmp/nimbus.out'" with timeout 60 seconds stop program = "/bin/kill -9 `ps -ef|grep daemon.nimbus|grep -v grep|awk '{print $2}'`" if 3 restarts within 5 cycles then unmonitor group storm
關於monit更爲詳細的說明請參見官方手冊 Monit manual
以上設置的很簡單,這裏得好好說說這個start program,就是啓動的命令,它但是實現進程掛掉後重啓,可是我一開始試了好幾種方式都不行
/home/storm/apache-storm-1.1.0/bin/storm nimbus
,啓動超時/home/storm/apache-storm-1.1.0/bin/storm nimbus &
,程序會自行終結建立腳本文件/home/storm/apache-storm-1.1.0/bin/nimbus.sh
/home/storm/apache-storm-1.1.0/bin/storm nimbus &
腳本「&」符號仍是要的,否則PPID是monit的。
給執行權限chmod 755 /home/storm/apache-storm-1.1.0/bin/nimbus.sh
不論是/home/storm/apache-storm-1.1.0/bin/nimbus.sh
仍是/bin/bash /home/storm/apache-storm-1.1.0/bin/nimbus.sh
都不能實現自動重啓。
參考monit的FAQ(請點擊我)使用/bin/bash -c
執行可是後面必需要有一個輸出的文件,沒有會報錯:
error : 'nimbus' failed to start (exit status 0) -- no output
因此通過好一番折騰,最終 start program = "/bin/bash -c '/home/storm/apache-storm-1.1.0/bin/nimbus.sh &>/tmp/nimbus.out'"
,nimbus.sh就是上面提到的那個腳本文件。我以爲這應該不是最正確的配置,可是至少能夠實現重啓了。
supervisor同理
#vi /etc/monit.d/supervisor
check process supervisor matching org.apache.storm.daemon.supervisor.Supervisor start program = "/bin/bash -c '/home/storm/apache-storm-1.1.0/bin/supervisor.sh &>/tmp/supervisor.out'" with timeout 60 seconds stop program = "/bin/kill -9 `ps -ef|grep daemon.supervisor|grep -v grep|awk '{print $2}'`" if 3 restarts within 5 cycles then unmonitor group storm
這樣就算配置完成了。141配置nimbus,而後141-143配置supervisor,三臺機器都裝了Monit,雖然M/Monit能夠統一管理集羣,可是須要收費,這邊就沒有考慮了。後面再嘗試使用其餘監控工具試試。
接下來就是啓動monit,先熟悉monit的基本命令
monit
啓動monit -t
校驗配置文件正確性monit reload
從新加載配置monit status
查看狀態monit quit
退出因此當修改完配置文件以後,第一步執行monit -t
查看配置是否正確,而後monit reload
從新加載配置。
monit啓動以後能夠登陸web查看,根據Global裏面的配置,個人頁面地址是:http://10.223.138.141:2812/
啓動storm的UI後查看,我在10.223.138.141上啓動的,訪問地址爲:10.223.138.141:8080(不要忘記防火牆!)
至此,Storm安裝完畢!