Storm安裝筆記

Storm安裝筆記

安裝環境

三臺服務器10.223.138.[141-143]html

  • CentOS release 6.7 (Final) 64位
  • JDK 1.7.0_80java

    It is strongly recommended to use Oracle JDK rather than OpenJDK.
  • CDH 5.7.0

本次安裝Storm版本爲1.1.0
官網地址 請點擊我
官方文檔 Version: 1.1.0
安裝文檔 Setting up a Storm Clusterpython

安裝Zookeeper集羣

CDH安裝Zookeeper服務,此處略
Zookeeper version:zookeeper-3.4.5-cdh5.7.0git

  • 10.223.138.141:2181
  • 10.223.138.142:2181
  • 10.223.138.143:2181

官方建議:github

A few notes about Zookeeper deployment:web

  1. 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.
  2. 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

  1. Java 7
  2. Python 2.6.6

JDK 7 下載地址 請點擊我
CenOS 6.7自帶Python 2.6.6瀏覽器

# python -V
Python 2.6.6

以上安裝方法此處再也不贅述,可自行網上查閱。bash

下載Storm包

下載地址 apache-storm-1.1.0.tar.gz
將壓縮包解壓到指定目錄tar -zxvf apache-storm-1.1.0.tar.gz -C /your/path/服務器

配置storm.yaml

The Storm release contains a file at conf/storm.yaml that configures the Storm daemons. You can see the default configuration values here. storm.yaml overrides anything in defaults.yaml.

配置文件位置conf/storm.yaml,如下是用以啓動集羣的必要配置

  • storm.zookeeper.servers:Zookeeper集羣配置
storm.zookeeper.servers:
  - "10.223.138.141"
  - "10.223.138.142"
  - "10.223.138.143"

若是端口不是默認的2181還須要配置storm.zookeeper.port參數

  • storm.local.dir:存儲目錄用以保存運行環境,好比jar包、配置文件等,在每臺機器上手動建立目錄並賦權限
storm.local.dir: "/home/storm"
  • nimbus.seeds:master節點,官方建議配置machine's FQDN,即全域名。維基百科Fully_qualified_domain_name。本機查看命令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:對應每一臺Worker機器,定義一臺機器上跑幾個worker就配置幾個端口,好比我這邊一個機器上跑三個worker,配置以下
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_CLASSPATHSTORM_EXT_CLASSPATH_DAEMON去配置擴展庫classpath目錄。

啓動

  1. Nimbus: Nimbus角色的機器執行命令bin/storm nimbus &
  2. Supervisor: Worker角色的機器執行命令bin/storm supervisor &,它用於啓停Worker進程。
  3. UI: 某一臺機器執行命令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,詳細介紹請參閱官網。(官網地址請點擊我

安裝monit

安裝命令yum install monit,若是沒有找到的話,須要先安裝epel源yum install epel-release
配置文件位置 /etc/monit.conf,分爲Global section和Services兩個部分

  • 配置Global section,如下是我我的的Global配置:(郵件功能暫略)
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

這裏把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/
Monit-UI

啓動storm的UI後查看,我在10.223.138.141上啓動的,訪問地址爲:10.223.138.141:8080不要忘記防火牆!
Storm-UI

至此,Storm安裝完畢!

參考

相關文章
相關標籤/搜索