在master、slave1、slave2三個節點上部署zookeeper
zookeeper:zookeeper-3.4.9
一、配置其中一個節點
1.解壓安裝
將zookeeper-3.4.9的壓縮包解壓在/home/hadoop/hadoop_home/下(個人習慣,路徑自定義)
tar -zxvf zookeeper-3.4.9.tar.gz -C /home/hadoop/hadoop_home/
2.複製/home/hadoop/hadoop_home/zookeeper-3.4.9/conf目錄下的zoo_sample.cfg,改名爲zoo.cfg (個人習慣,防止配置的時候把文件玩壞)
cp zoo_sample.cfg zoo.cfg
3.在/home/hadoop/hadoop_home/zookeeper-3.4.9/目錄下創建文件夾zkData
mkdir -p zkData
4.配置zoo.cfg文件
修改dataDir
dataDir=/home/hadoop/hadoop_home/zookeeper-3.4.9/zkData
在文件中添加以下信息:
server.1=slave1:2888:3888
server.2=slave2:2888:3888
server.3=master:2888:3888
注:
zkData文件夾是用來存放快照數據的
server.1=slave1:2888:3888
server.a=b:c:d
a表示服務器的編號,可以是12345任意數
b是服務器a的ip(我用的是主機名)
c是a服務器與集羣中的leader服務器交換信息的端口
d是備用端口,萬一leader服務器掛了,需要一個端口來重新進行選舉,選出一個新的leader,而這個端口就是用來執行選舉時服務器相互通信的端口
5.在zkData目錄下創建myid文件,並在myid文件中加入當前主機對應的服務器編號
vim myid
比如我當前正在配置的主機是master,是server.3,那麼服務器編號就是3
二、配置其他節點
1.將配置好的zookeeper發送到其他節點上
scp -r zookeeper-3.4.9/ hadoop@slave1:/home/hadoop/hadoop_home
2.將其他節點上的myid文件中的服務器編號修改爲其所對應的服務器的編號,如slave1節點是1號服務器,那麼myid中的編號應該爲1
三、對zookeeper的基本操作
1.啓動zookeeper
在/home/hadoop/hadoop_home/zookeeper-3.4.9/bin/目錄下運行
hadoop@slave1:~/hadoop_home/zookeeper-3.4.9/bin$ ls
README.txt zkCleanup.sh zkCli.cmd zkCli.sh zkEnv.cmd zkEnv.sh zkServer.cmd zkServer.sh zookeeper.out
hadoop@slave1:~/hadoop_home/zookeeper-3.4.9/bin$ ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/hadoop/hadoop_home/zookeeper-3.4.9/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
2.查看狀態
hadoop@slave1:~/hadoop_home/zookeeper-3.4.9/bin$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/hadoop_home/zookeeper-3.4.9/bin/../conf/zoo.cfg
Mode: follower
hadoop@slave1:~/hadoop_home/zookeeper-3.4.9/bin$
3.停止zookeeper
hadoop@slave1:~/hadoop_home/zookeeper-3.4.9/bin$ ./zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /home/hadoop/hadoop_home/zookeeper-3.4.9/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
hadoop@slave1:~/hadoop_home/zookeeper-3.4.9/bin$
四、注意!
啓動zookeeper時可能會出現這樣的一個錯誤:
bin/zkServer.sh: 81: /opt/zookeeper-3.4.9/bin/zkEnv.sh: Syntax error: "(" unexpected (expecting "fi")
原因是腳本里面用到的shell版本與系統當前使用的shell版本不兼容,導致異常。
查看當前ubuntu系統的shell,默認是使用dash,但是腳本里面是使用的bash,問題就在這裏了。
解決辦法:
root用戶修改當前系統的shell版本:把dash改成bash
root@master:~# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Feb 13 14:56 /bin/sh -> dash
root@master:~# ln -sf bash /bin/sh
root@master:~# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 12 21:53 /bin/sh -> bash
root@master:~#