第一步:環境準備
環境
|
版本
|
說明
|
JDK
|
1.8
|
zookeeper運行所需
|
centos
|
7
|
操做系統
須要配置好JDK的環境變量
|
zookeeper-3.4.9.tar.gz
|
3.4.9
|
zookeeper部署包
|
環境準備完畢以後,安裝三臺centos7的虛擬機,並分配好靜態IP。
假設三臺虛擬機分配的IP分別爲:
10.0.90.52
10.0.90.53
10.0.90.54
配置Jdk環境變量,確保「java -version」命令可以執行成功,Jdk的環境變量配置不在贅述。
注意:爲了確保zookeeper集羣可以成功運行,確保萬一,這裏須要關閉一下centos的防火牆,關閉方法以下:
1. 安裝iptables:
yum install -y iptables-services
2.關閉防火牆:
service iptables stop
3. 查看防火牆狀態
service iptables status
這個狀態說明已經關閉了,以下圖所示:
第二步:Zookeeper配置
選取其中一臺服務器,好比ip爲10.0.90.52的服務器,將
zookeeper-3.4.9.tar.gz 移動到
/usr/local 目錄下。
解壓壓縮包: tar -zxvf zookeeper-3.4.9.tar.gz
解壓成功以後,會有一個zookeeper-3.4.9文件夾,這個是zookeeper的部署包,我的習慣將將文件夾名改爲zk(mv zookeeper-3.4.9 zk),下文都以zk表示zookeeper的部署包名。
修改配置文件:
zookeeper的配置文件都是放在 conf 目錄下的,在這裏,他有一個初始化的配置文件,zoo_simple.cfg,將其重命名爲zoo.cfg。conf目錄結構圖以下:
接下來看看zoo.cfg:
zookeeper的配置文件註釋仍是很全的,這裏重點講一下集羣的配置,上圖紅框部分,dataDir是zookeeper存放數據的目錄,默認狀況是指定的/tmp/zookeeper。
根據實際的工程須要指定目錄的地址,這裏我是放在了
/opt/data/zk 目錄下。
注意:在配置zookeeper集羣時,還須要增長一個步驟,在上文指定的dataDir目錄下,新建文件myid,並在其中寫入與其餘不一樣服務器不一樣的而且惟一的 myid 的值。
好比,如今有三臺服務器,10.0.90.52服務器myid的值是1,10.0.90.53服務器myid的值是2,10.0.90.54服務器myid的值是3。
集羣成員配置:在zoo.cfg最下方,加上集羣的成員,以下圖所示:
到這裏zookeeper部署包的配置基本完成了。
那麼接下來只須要在其餘兩臺機器上,進行相似的操做便可。能夠方便的操做,直接將10.0.90.52上的zookeeper部署包scp到其餘兩臺上,命令以下:
scp -r /usr/local/zk 10.0.90.53:/usr/local
切記,其餘兩臺服務器的dataDir目錄下的myid文件的建立與值的惟一。
第三步:啓動集羣
zookeeper的腳本和cli工具都是放在
bin 目錄下的,以下圖所示:
依次啓動zookeeper,首先我先啓動 10.0.90.52上的服務,執行命令:
sh zkServer.sh start
啓動成功輸出以下:

可使用 「jps「命令查看正在運行的Java進程,執行
jps
若是jps命名輸出中包含上圖紅框中的內容,則說明zookeeper服務啓動成功。
還能夠經過查看端口開啓的方式,執行命令:
netstat -nltp | grep 2181
正常的執行結果以下圖所示:
到此集羣中的第一個成員,啓動完畢,接着按照一樣的方式啓動第二個,第三個服務,到此集羣的全部服務啓動完畢。
查看集羣狀態
仍是在bin目錄下,執行命令:
sh zkServer.sh status
輸出結果以下:
能夠看到此服務已經成功集羣,並正扮演者leader的角色,再看看其餘兩臺的狀況。
以下圖所示,其餘兩臺服務正扮演着follwers的角色。
一般來講,集羣中第一個啓動的服務,都會成爲leader。
第四步:驗證
zookeeper提供了cli工具,能夠完成基本的操做,只須要輸入簡單的命令便可。
工具是:bin目錄下的
zkCli.sh
既然集羣啓動成功了,那麼作一個小實驗,分爲兩個步驟:
1. 在其中的一臺服務,建立一個節點:test
2. 而後在其餘兩臺服務中查看是否存在新建立的節點
執行
sh zkCli.sh
以下圖所示,cli工具就是自動鏈接上本機localhost的zookeeper
查看節點: 輸入命令
ls /
zookeeper節點是zookeeper服務中自己默認存在的節點,這裏咱們手動建立一個節點test,並賦值 ‘123’。
執行命令:
create /test 123
結果以下圖所示,節點建立成功。
轉到集羣中的其餘服務,使用zkCli工具查看該節點是否存在。
結果以下圖所示:
test節點存在,說明集羣配置成功,集羣中的各個服務保證了數據一致性。
到此zookeeper的所有集羣配置完畢
常見錯誤解決
注意zookeeper啓動出差 會在bin目錄下生成一個zookeeper.out文件,裏面記錄了錯誤信息。
集羣啓動失敗
2018-10-11 11:00:18,461 [myid:] - INFO [main:QuorumPeerConfig@124] - Reading configuration from: /usr/local/zk/bin/../conf/zoo.cfg
2018-10-11 11:00:18,484 [myid:] - INFO [main:QuorumPeer$QuorumServer@149] - Resolved hostname: 10.0.90.52 to address: /10.0.90.52
2018-10-11 11:00:18,484 [myid:] - INFO [main:QuorumPeer$QuorumServer@149] - Resolved hostname: 10.0.90.54 to address: /10.0.90.54
2018-10-11 11:00:18,485 [myid:] - INFO [main:QuorumPeer$QuorumServer@149] - Resolved hostname: 10.0.90.53 to address: /10.0.90.53
2018-10-11 11:00:18,485 [myid:] - INFO [main:QuorumPeerConfig@352] - Defaulting to majority quorums
2018-10-11 11:00:18,486 [myid:] - ERROR [main:QuorumPeerMain@85] - Invalid config, exiting abnormally
org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing /usr/local/zk/bin/../conf/zoo.cfg
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:144)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:101)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)
Caused by: java.lang.IllegalArgumentException: /tmp/zookeeper/myid file is missing
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:362)
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:140)
... 2 more
Invalid config, exiting abnormally
dataDir目錄下的myid文件缺失,須要建立myid文件,並賦值