一臉懵逼搭建Zookeeper分佈式集羣

1:首先將http://zookeeper.apache.org/java

  下載好的zookeeper-3.4.5.tar.gz上傳到三臺虛擬機上,以前博客搭建好的(安裝Zookeeper以前記得安裝好你的jdk哦)。apache

2:而後對zookeeper-3.4.5.tar.gz進行解壓縮操做:api

[hadoop@master ~]$ tar -zxvf zookeeper-3.4.5.tar.gz bash


3:而後進入conf目錄(將zoo_sample.cfg修改成zoo.cfg):
session

mv修更名稱或者cp一個,老的做爲樣本:ssh

4:而後打開zoo.cfg文件: socket

 修改一些配置:分佈式

tickTime=2000 心跳間隔
initLimit=10 初始容忍的心跳數
syncLimit=5 等待最大容忍的心跳數
dataDir=/tmp/zookeeper 本地保存數據的目錄,tmp存放的臨時數據,能夠修改成本身的目錄;
clientPort=2181 客戶端默認端口號
oop

若是有須要,我感受加上日誌頗有必要,若是出錯了,還有地方能夠去查找:測試

dataLogDir=/home/hadoop/zookeeper/log

修改後的以下所示(紅色圈起來的是修改的):

server.1=master:2888:3888 (主機名, 心跳端口、數據端口)

server.2=slave1:2888:3888

server.3=slave2:2888:3888

 5:因爲須要事先建立好data目錄,因此如今建立data目錄:

而後在data目錄建立一個文件myid,裏面寫一個1,以下所示:

 5:而後將修改好的複製到slaver1和slaver2上面

 而後分別將slaver1和slaver2的myid修改成2和3,以下所示:

 6:至此Zookeeper搭建結束,下面開始啓動Zookeeper,分別啓動:

若是你不想切換到Zookeeper目錄啓動,能夠配置環境變量:

vi /etc/profile(修改文件)

export ZOOKEEPER_HOME=/home/hadoop/zookeeper

export PATH=$PATH:$ZOOKEEPER_HOME/bin

從新編譯文件:

source /etc/profile

注意:3臺zookeeper都須要修改

 少於三臺不會正常工做的,能夠經過命令查詢狀態:

 7:接下來啓動slaver1和slaver2的服務:

三臺機器啓動完成之後,能夠查看其狀態,開始報這個錯,就是啓動不了Zookeeper,而後百度唄,百度不少方法,還存在版本問題,新生事物永遠在爭議中成長,name百度的也沒幫助我解決,最後重啓三臺機器,問題解決:

2018/4/8,記錄,若是重啓沒有解決問題,能夠將本身建的data目錄下面的zookeeper_server.pid文件刪除後從新啓動。記住關閉防火牆。

1 JMX enabled by default//
2 Using config: /home/hadoop/zookeeper-3.4.5/bin/../conf/zoo.cfg
3 Error contacting service. It is probably not running.

上面的是master節點的,下面的是slaver1節點和slaver2節點的(對於出現這個啓動不了的問題,我是這樣想的,若是百度的方法不行,就重啓一下

重啓之後我開始啓動master節點的,而後查看狀態,確定沒啓動起來,正常,查看一下進程jps,

而後啓動slaver1節點的,而後查看狀態,確定沒啓動起來,正常,查看一下進程jps

而後啓動slaver2節點的,而後查看狀態,確定啓動起來,正常,查看一下進程jps,正常,

若是沒啓動起來,估計問題很差弄了都,個人就解決到這裏吧!):

 8:至此,Zookerper集羣就啓動起來了,而後就能夠經過java的api往裏面寫數據,注入分佈式應用讓Zookerper協調的數據,或者使用命令行的客戶端zkCli.sh模式,zkCli.sh連到集羣上面去訪問數據,能夠用來作測試(不帶參數鏈接到本節點上面去):

 

Connecting to localhost:2181
2017-10-11 02:39:39,035 [myid:] - INFO  [main:Environment@100] - Client environment:zookeeper.version=3.4.5-1392090, built on 09/30/2012 17:52 GMT
2017-10-11 02:39:39,040 [myid:] - INFO  [main:Environment@100] - Client environment:host.name=slaver2
2017-10-11 02:39:39,040 [myid:] - INFO  [main:Environment@100] - Client environment:java.version=1.7.0_65
2017-10-11 02:39:39,040 [myid:] - INFO  [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
2017-10-11 02:39:39,040 [myid:] - INFO  [main:Environment@100] - Client environment:java.home=/home/hadoop/jdk1.7.0_65/jre
2017-10-11 02:39:39,040 [myid:] - INFO  [main:Environment@100] - Client environment:java.class.path=/home/hadoop/zookeeper-3.4.5/bin/../build/classes:/home/hadoop/zookeeper-3.4.5/bin/../build/lib/*.jar:/home/hadoop/zookeeper-3.4.5/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/hadoop/zookeeper-3.4.5/bin/../lib/slf4j-api-1.6.1.jar:/home/hadoop/zookeeper-3.4.5/bin/../lib/netty-3.2.2.Final.jar:/home/hadoop/zookeeper-3.4.5/bin/../lib/log4j-1.2.15.jar:/home/hadoop/zookeeper-3.4.5/bin/../lib/jline-0.9.94.jar:/home/hadoop/zookeeper-3.4.5/bin/../zookeeper-3.4.5.jar:/home/hadoop/zookeeper-3.4.5/bin/../src/java/lib/*.jar:/home/hadoop/zookeeper-3.4.5/bin/../conf:
2017-10-11 02:39:39,041 [myid:] - INFO  [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/i386:/lib:/usr/lib
2017-10-11 02:39:39,041 [myid:] - INFO  [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2017-10-11 02:39:39,041 [myid:] - INFO  [main:Environment@100] - Client environment:java.compiler=<NA>
2017-10-11 02:39:39,044 [myid:] - INFO  [main:Environment@100] - Client environment:os.name=Linux
2017-10-11 02:39:39,044 [myid:] - INFO  [main:Environment@100] - Client environment:os.arch=i386
2017-10-11 02:39:39,044 [myid:] - INFO  [main:Environment@100] - Client environment:os.version=2.6.32-358.el6.i686
2017-10-11 02:39:39,044 [myid:] - INFO  [main:Environment@100] - Client environment:user.name=hadoop
2017-10-11 02:39:39,045 [myid:] - INFO  [main:Environment@100] - Client environment:user.home=/home/hadoop
2017-10-11 02:39:39,046 [myid:] - INFO  [main:Environment@100] - Client environment:user.dir=/home/hadoop/zookeeper-3.4.5/bin
2017-10-11 02:39:39,047 [myid:] - INFO  [main:ZooKeeper@438] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@1a685ae
Welcome to ZooKeeper!
2017-10-11 02:39:39,096 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@966] - Opening socket connection to server localhost/0:0:0:0:0:0:0:1:2181. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2017-10-11 02:39:39,111 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@849] - Socket connection established to localhost/0:0:0:0:0:0:0:1:2181, initiating session
2017-10-11 02:39:39,241 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1207] - Session establishment complete on server localhost/0:0:0:0:0:0:0:1:2181, sessionid = 0x35f0ac132690000, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]

 鏈接到本節點的2181端口以後向集羣裏面寫任何數據,在另外兩個節點均可以看到(Zookerper管理客戶所存放的數據採用的是相似於文件樹的結構):

 

在其餘節點也能夠看到的:

 

 9:ssh遠程開啓Zookeeper服務:

[root@master bin]# ssh slaver2 "source /etc/profile;/home/hadoop/soft/zookeeper-3.4.5/bin/zkServer.sh start"

10:Zookeeper啓動自動化腳本:

#export a=1 定義的變量,會對本身所在的sheel進程及其子進程生效。
#a=1 定義的變量,只對本身所在的sheel進行生效。
#在script.sh中定義的變量,在當前登錄的sheel進行中,source script.sh時,腳本中定義的變量也會進入當前登錄的進程

#!/bin/bash
echo "start zkServer..."
for i in 1 2 3
do 
ssh slaver$i "source /etc/profile;/home/hadoop/soft/zookeeper-3.4.5/bin/zkServer.sh start"
done

我的配置自動化腳本執行的操做步驟:

  首先在我我的喜歡的目錄下面/home/hadoop目錄下面建立一個叫作腳本的文件夾,script,而後將自動化腳本拷貝到新建的startzk.sh文件中,而後配置環境變量:

export JAVA_HOME=/home/hadoop/soft/jdk1.7.0_65

export ZOOKEEPER_HOME=/home/hadoop/soft/zookeeper-3.4.5

#自動化腳本的目錄
export SCRIPT=/home/hadoop/script

#添加到全局環境變量中便可。
export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$SCRIPT

而後在任意目錄,執行startzk.sh就能夠啓動三臺Zookeeper了。

可是呢,若是上面你都弄好了,自動化腳本寫好了,環境變量配置好了,使用的使用,出現以下問題:

bash: /home/hadoop/script/startzk.sh: Permission denied

 上面問題,老司機一眼就明白要幹嗎了,那麼如今使用chmod 777 startzk.sh命令和chmod 777 stopzk.sh命令賦予你的腳本執行權限便可。

注意:配置好自動化腳本,按tab鍵不自動彈出,多是不能夠執行的問題,能夠賦予文件相應執行權限便可。

待續.....

相關文章
相關標籤/搜索