《Storm企業級應用:實戰、運維和調優》——2.1 環境準備

華章計算機發表於2017-07-03

本節書摘來自華章計算機《Storm企業級應用:實戰、運維和調優》一書中的第2章,第2.1節,作者:馬延輝 陳書美 雷葆華著, 更多章節內容可以訪問雲棲社群“華章計算機”公眾號檢視。

2.1 環境準備

在安裝Storm的之前要做一些準備工作,這涉及作業系統設定、ZooKeeper叢集的管理以及Storm安裝之前的一些依賴庫。下面將介紹Storm的系統配置、協調器ZooKeeper等。
2.1.1 系統配置
在Linux上安裝Storm之前,需要先做如下準備:
安裝JDK 1.6。
安裝SSH服務。
安裝Python 2.6.6直譯器。
1.?安裝JDK 1.6
與Hadoop、HBase相同,Storm也需要JDK 1.6或者更高的版本。下面介紹安裝JDK 1.6的具體步驟。
(1)下載JDK 1.6
從Java的官網,目前是Oracle公司的產品下載JDK,本書使用JDK的SE版本,從http://www.oracle.com/technetwork/java/javase/downloads/中下載JDK 1.6的安裝包,注意要下載適應當前系統的JDK版本,一般是64位版本的JDK。
JDK 1.6版本的u18以及舊版本,不要下載,這些版本的垃圾回收操作容易遇到JVM碰撞問題。
(2)手動安裝JDK 1.6
進入JDK安裝目錄(假設安裝在/usr/lib/jvm/jdk)後,開始安裝JDK,具體操作程式碼如下:

#修改許可權
sudo chmod u+x jdk-***-linux-i586.bin

#安裝
sudo -s ./jdk-***-linux-i586.bin

(3)配置環境變數
安裝結束後,開始配置環境變數JAVA_HOME和CLASSPATH,修改指令如下:

vi /etc/prof?ile

進入prof?ile檔案後,在檔案下面輸入如下內容:

#set JAVA Environment
export JAVA_HOME=/usr/lib/jvm/jdk
export ClASSPATH=".:$JAVA_HOME/lib:$CASSPATH"
export PATH="$JAVA_HOME:$PATH"

修改完環境變數後,驗證JDK是否安裝成功,輸入如下命令:

java -version

如果出現Java版本資訊,則說明安裝成功。
2.?安裝SSH服務
Storm叢集模式的啟動、關閉以及ZooKeeper叢集需要SSH服務,所以使用的作業系統要安裝此服務。
(1)安裝SSH
確認節點可以連線Internet,執行如下命令檢查SSH服務。

sudo ps –ef |grep ssh

如果沒有ssh程式,則執行如下命令安裝SSH服務。

sudo yum install openssh

(2)檢視安裝情況
執行下面命令檢視SSH安裝的版本。

ssh -version

執行之後如果出現如下資訊,則表明安裝已經成功。

OpenSSH_4.3p2, OpenSSL 0.9.8e-f?ips-rhel5 01 Jul 2008
Bad escape character `sion`.

檢視服務狀態命令如下:

service sshd status

3.?安裝Python 2.6.6
在安裝Python之前,Linux系統中其實已經有了Python直譯器,但如果版本太低,需要重新安裝Python。
Python是Storm最底層的依賴,需要使用下面的命令下載並安裝Python 2.6.6。

wget http:// www.python.org/ftp/python/2.6.6/Python-2.6.6.tar.bz2
tar –jxvf Python-2.6.6.tar.bz2
cd Python-2.6.6
./conf?igure
make
make install

安裝完成後,需要使用命令測試Python 2.6.6是否安裝成功。如果安裝成功,則命令和結果如下:

python -V
Python 2.6.6

2.1.2 安裝ZooKeeper叢集
由於HBase、Kafka和Storm都使用ZooKeeper叢集,大多數情況下,單個節點的ZooKeeper叢集可以單獨勝任這些應用,但是為了確保故障恢復或者部署大規模叢集,可能需要更大規模節點的ZooKeeper叢集,官方推薦的最小節點數為3。所以,本案例使用test1、test2和test3三臺節點部署ZooKeeper,每個節點上都需要安裝,下面介紹具體的安裝部署過程。
1.?下載官方原始碼
從映象網站下載ZooKeeper包,並將其解壓安裝,具體操作程式碼如下:

#下載、解壓
wget http:// mirror.bjtu.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
mkdir -p /opt/modules
mv zookeeper-3.4.6.tar.gz /opt/modules/
tar -zxvf zookeeper-3.4.6.tar.gz
ln -s  /opt/modules/zookeeper-3.4.6 /opt/modules/zookeeper

#日誌路徑,配置檔案用
mkdir -p /var/log/zookeeper
mkdir /tmp/zookeeper

2.?配置ZooKeeper屬性檔案
根據ZooKeeper叢集節點情況,建立ZooKeeper配置檔案conf/zoo.cfg後,將基本配置新增到配置檔案中。
(1)配置伺服器核心屬性
使用複製命令生成配置檔案,程式碼如下:

cd conf
cp zoo_sample.cfg zoo.cfg

然後將下面的程式碼追加到配置檔案zoo.cfg中:

tickTime=2000
clientPort=2181
initLimit=5
syncLimit=2
server.1=test1:2888:3888
server.2=test2:2888:3888
server.3=test3:2888:3888

其中,每項引數的含義如下:
tickTime:這個時間是作為ZooKeeper伺服器之間或客戶端與伺服器之間維持心跳的時間間隔,也就是每隔tickTime時間傳送一個心跳。
clientPort:這個埠就是客戶端連線ZooKeeper伺服器的埠,ZooKeeper會監聽這個埠,接受客戶端的訪問請求。
initLimit:這個配置項用來配置ZooKeeper接受客戶端(這裡所說的客戶端不是使用者連線ZooKeeper伺服器的客戶端,而是ZooKeeper伺服器叢集中連線到Leader的Follower伺服器)初始化連線時最長能忍受多少個心跳時間間隔數。當已經超過5個心跳的時間(也就是tickTime)長度後,ZooKeeper伺服器還沒有收到客戶端的返回資訊,那麼表明這個客戶端連線失敗。總的時間長度就是5×2000ms=10s。
syncLimit:這個配置項標識Leader與Follower之間傳送訊息、請求和應答時間,最長不能超過多少個tickTime的時間長度,總的時間長度就是2×2000ms=4s。
server.A=B:C:D:其中A是一個數字,表示這個是第幾號伺服器;B是這個伺服器的IP地址;C表示這個伺服器與叢集中的Leader伺服器交換資訊的埠;D表示萬一叢集中的Leader伺服器掛了,需要一個埠來重新選舉出一個新的Leader,而這個埠就是用來執行選舉時伺服器相互通訊的埠。如果是偽叢集的配置方式,由於B都是相同的,所以不同的ZooKeeper例項通訊埠號不能相同,要給它們分配不同的埠號。
接下來,新增myid檔案,在dataDir目錄(預設是/tmp/zookeeper)下建立myid檔案,此檔案中只包含一行,且內容為ZooKeeper部署節點對應的server.id中的ID編號。例如,test1、test2和test3分別對應的myid檔案中的值是1、2和3。節點test1的myid檔案的操作程式碼如下:

#建立檔案myid
vi /tmp/zookeeper/myid

#將下面的數字新增到檔案中
1

(2)配置日誌列印屬性
在預設情況下,日誌放到當前目錄下的zookeeper.out檔案中,而在一般情況下需要將日誌輸出到指定的檔案路徑下,以便於檢視收集和日誌。下面的操作都是在ZooKeeper的安裝主目錄下進行。
首先,修改bin/zkEnv.sh,將下面程式碼新增到指令碼主體的開頭部分:

ZOO_LOG_DIR=/var/log/zookeeper

在預設情況下,日誌輸出到CONSOLE,關閉ROLLINGFILE。在生產環境中,需要將日誌輸出到ROLLINGFILE,並修改日誌級別為INFO。這些配置項通過修改conf/log4j.properties實現,具體程式碼如下:

.log.dir=.
zookeeper.tracelog.dir=.

將上面對應的程式碼修改為下面的內容:

zookeeper.log.dir=/var/log/zookeeper
zookeeper.tracelog.dir=/var/log/zookeeper

將下面的程式碼使用#註釋掉:

log4j.rootLogger=${zookeeper.root.logger}

將下面程式碼最前面的#去掉:

#log4j.rootLogger=TRACE, CONSOLE, ROLLINGFILE, TRACEFILE

同時修改檔案的許可權,因為需要用hadoop使用者啟動,將所有ZooKeeper相關的檔案目錄的所有者和組都修改為hadoop:hadoop,程式碼如下:

chown -R hadoop:hadoop /opt/modules/zookeeper*
chown -R hadoop:hadoop /var/log/zookeeper
chown -R hadoop:hadoop /tmp/zookeeper

3.?啟動ZooKeeper叢集
登入test1、test2和test3三個節點,進入ZooKeeper安裝主目錄,執行下面的命令:

su hadoop
bin/zkServer.sh start

使用下面的ZooKeeper客戶端命令可以測試服務是否可用。

bin/zkCli.sh -server 127.0.0.1:2181

如果安裝並啟動成功,則執行上面的命令進入互動終端後,輸入help命令會得到如下的列印資訊:

[zk: 127.0.0.1:2181(CONNECTED) 1] help
ZooKeeper -server host:port cmd args
  connect host:port
  get path [watch]
  ls path [watch]
  set path data [version]
  rmr path
  delquota [-n|-b] path
  quit 
  printwatches on|off
  create [-s] [-e] path data acl
  stat path [watch]
  close 
  ls2 path [watch]
  history 
  listquota path
  setAcl path acl
  getAcl path
  sync path
  redo cmdno
  addauth scheme auth
  delete path [version]
  setquota -n|-b val path
[zk: 127.0.0.1:2181(CONNECTED) 2] ls /
[kafkastorm, consumers, storm, hbase, brokers, zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 3]

其中,[zk: 127.0.0.1:2181 (CONNECTED) 2]字首表示已經成功連線ZooKeeper,help命令表示檢視當前互動客戶端支援的命令,ls /命令表示檢視當前ZooKeeper的根目錄結構。
在ZooKeeper執行過程中,會在dataDir目錄下生成很多日誌和快照檔案,而ZooKeeper執行程式並不負責定期清理合並這些檔案,導致佔用大量磁碟空間。因此,需要通過Cronjob等方式定期清除過期的日誌和快照檔案。


相關文章