zookeeper的安裝分為三種模式: 單機(jī)模式、偽集群模式和集群模式。
安裝需要用到的zookeeper文件,到http://zookeeper.apache.org/通過download鏈接下載。
一、單機(jī)模式安裝zookeeper
1、設(shè)置環(huán)境變量
$ ZK_FILE=/vagrant/zookeeper-3.4.13.tar.gz
$ ZK_INSTALL_PATH=/opt/zk
$ ZK_INSTALL_DIR=$ZK_INSTALL_PATH/zookeeper-3.4.13
$ ZK_DATA_DIR=$ZK_INSTALL_PATH/zookeeper-3.4.13/data
$ ZK_LOG_DIR=$ZK_INSTALL_PATH/zookeeper-3.4.13/log
$ ZK_CFG=$ZK_INSTALL_DIR/conf/zoo.cfg
$ ZK_SERVER_ID=1
$ ZK_PORT=2181
$ ZK_SERVER_LIST=server.1=127.0.0.1:2888:3888

prepare-install-env
2、創(chuàng)建安裝目錄并將zk到解壓安裝目錄
$ mkdir -p $ZK_INSTALL_PATH
$ tar -zxvf $ZK_FILE -C $ZK_INSTALL_PATH >> /var/null
$ ls -l $ZK_INSTALL_PATH

make-dir-and-uzip
3、新建數(shù)據(jù)和日志目錄,生成myid文件,拷貝配置zoo.cfg文件
$ mkdir $ZK_DATA_DIR
$ mkdir $ZK_LOG_DIR
$ echo $ZK_SERVER_ID >> $ZK_DATA_DIR/myid
$ cp $ZK_INSTALL_DIR/conf/zoo_sample.cfg $ZK_CFG
$ cat $ZK_CFG

copy-zoo-cfg
4、配置zoo.cfg數(shù)據(jù)目錄、日志目錄、端口號、服務(wù)器列表并確認(rèn)配置
$ sed -i 's#dataDir=/tmp/zookeeper#dataDir='$ZK_DATA_DIR'#' $ZK_CFG
$ sed -i '$a \dataLogDir='$ZK_LOG_DIR $ZK_CFG
$ sed -i 's/2181/'$ZK_PORT'/g' $ZK_CFG
$ sed -i '$a \'$ZK_SERVER_LIST $ZK_CFG
$ cat $ZK_CFG

config-zoo-cfg
5、啟動zk并查看狀態(tài)
$ sh $ZK_INSTALL_DIR/bin/zkServer.sh start
$ sh $ZK_INSTALL_DIR/bin/zkServer.sh status

start-zookeeper
6、利用zkCli操作zk
$ sh $ZK_INSTALL_DIR/bin/zkCli.sh

use-zk-cli
可以輸入以下命令進(jìn)行操作, 查看結(jié)果
> ls /
> create /test value1
> get /test

zk-cli-command
二、通過vagrant一鍵安裝單機(jī)版的zookeeper
1、整理一中的shell命令成zk-install.sh腳本文件
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>zk壓縮包路徑>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
echo $ZK_FILE
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>zk安裝路徑&安裝目錄>>>>>>>>>>>>>>>>>>>>>"
echo $ZK_INSTALL_PATH
echo $ZK_INSTALL_DIR
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>zk數(shù)據(jù)目錄&日志目錄>>>>>>>>>>>>>>>>>>>>>"
echo $ZK_DATA_DIR
echo $ZK_LOG_DIR
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>zk的myid>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
echo $ZK_SERVER_ID
echo ">>>>>>>>>>>>>>>>>>>>>>>>>zk端口及服務(wù)器列表>>>>>>>>>>>>>>>>>>>>>>>>>"
echo $ZK_PORT
echo $ZK_SERVER_LIST
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>zk配置文件>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
ZK_CFG=$ZK_INSTALL_DIR/conf/zoo.cfg
echo $ZK_CFG
echo ">>>>>>>>>>>>>>>>>>>>新建zk安裝目錄并解壓zk到該目錄>>>>>>>>>>>>>>>>>>>"
mkdir -p $ZK_INSTALL_PATH
tar -zxvf $ZK_FILE -C $ZK_INSTALL_PATH >> /var/null
echo ">>>>>>>>>>>>>>>>>>>>>新建zk數(shù)據(jù)和日志目錄及myid>>>>>>>>>>>>>>>>>>>>>"
mkdir $ZK_DATA_DIR
mkdir $ZK_LOG_DIR
echo $ZK_SERVER_ID >> $ZK_DATA_DIR/myid
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>配置zoo.cfg>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
cp $ZK_INSTALL_DIR/conf/zoo_sample.cfg $ZK_CFG
sed -i 's#dataDir=/tmp/zookeeper#dataDir='$ZK_DATA_DIR'#' $ZK_CFG
sed -i '$a \dataLogDir='$ZK_LOG_DIR $ZK_CFG
sed -i 's/2181/'$ZK_PORT'/g' $ZK_CFG
sed -i '$a \'$ZK_SERVER_LIST $ZK_CFG
tail -n 20 $ZK_CFG
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>啟動zk>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
sh $ZK_INSTALL_DIR/bin/zkServer.sh start
2、新建Vagrantfile文件
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
#設(shè)置虛擬機(jī)的box
config.vm.box = "centos7-base-jdk8"
#設(shè)置虛擬機(jī)的主機(jī)名
config.vm.hostname = "centos7-jdk8-zk-standalone"
#設(shè)置ip
config.vm.network "private_network", ip: "192.168.13.10"
#Virtualbox相關(guān)配置
config.vm.provider "virtualbox" do |v|
#設(shè)置虛擬機(jī)的名稱
v.name = "centos7-jdk8-zk-standalone"
#設(shè)置虛擬機(jī)的內(nèi)存大小為2G
v.memory = 2048
#設(shè)置虛擬機(jī)的CPU個數(shù)
v.cpus = 2
end
#使用shell腳本進(jìn)行軟件安裝和配置
config.vm.provision "shell" do |s|
s.path = "zk-install.sh"
s.env = {ZK_FILE: "/vagrant/zookeeper-3.4.13.tar.gz",
ZK_INSTALL_PATH: "/opt/zk",
ZK_INSTALL_DIR: "/opt/zk/zookeeper-3.4.13",
ZK_PORT: "2181",
ZK_DATA_DIR: "/opt/zk/zookeeper-3.4.13/data",
ZK_LOG_DIR: "/opt/zk/zookeeper-3.4.13/log",
ZK_SERVER_ID: "1",
ZK_SERVER_LIST: "server.1=127.0.0.1:2888:3888"}
end
end
3、通過vagrant up啟動虛擬機(jī)

vagrant-up-standardlone-1

vagrant-up-standardlone-2
三、通過vagrant一鍵安裝zookeeper偽集群
1、zk偽集群指的是在一臺集群上安裝zk集群
需要注意每個zk進(jìn)程對外端口(默認(rèn)2181,用于客戶端鏈接zk集群),選主端口(默認(rèn)3888-進(jìn)行l(wèi)eader選舉時使用的端口),集群通信端口(默認(rèn)2888-集群follow鏈接leader的通信端口)配置不沖突。
myid=1, 2181, 2888, 3888
myid=2, 2182, 2887, 3887
myid=3, 2183, 2886, 3886
2、zk-install.sh同二使用的是相同內(nèi)容,Vagrantfile如下:
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
#設(shè)置虛擬機(jī)的box
config.vm.box = "centos7-base-jdk8"
#設(shè)置虛擬機(jī)的主機(jī)名
config.vm.hostname = "centos7-jdk-zk-local-cluster"
#Virtualbox相關(guān)配置
config.vm.provider "virtualbox" do |v|
#設(shè)置虛擬機(jī)的名稱
v.name = "centos7-jdk-zk-local-cluster"
#設(shè)置虛擬機(jī)的內(nèi)存大小為1G
v.memory = 2048
#設(shè)置虛擬機(jī)的CPU個數(shù)
v.cpus = 2
end
(1..3).each do |i|
#使用shell腳本進(jìn)行軟件安裝和配置
config.vm.provision "shell" do |s|
s.path = "zk-install.sh"
s.env = {ZK_FILE: "/vagrant/zookeeper-3.4.13.tar.gz",
ZK_INSTALL_PATH: "/opt/zk/zk-server#{i}",
ZK_INSTALL_DIR: "/opt/zk/zk-server#{i}/zookeeper-3.4.13",
ZK_PORT: "218#{i}",
ZK_DATA_DIR: "/opt/zk/zk-server#{i}/zookeeper-3.4.13/data",
ZK_LOG_DIR: "/opt/zk/zk-server#{i}/zookeeper-3.4.13/log",
ZK_SERVER_ID: "#{i}",
ZK_SERVER_LIST: "server.1=127.0.0.1:2888:3888\\nserver.2=127.0.0.1:2887:3887\\nserver.3=127.0.0.1:2886:3886"}
end
end
end
3、同樣使用vagrant up 命令,可以啟動虛擬機(jī),并自動安裝
4、ssh進(jìn)入虛擬機(jī), 查看各個目錄下對應(yīng)的zk安裝情況
可以看到,zk-server2作為leader節(jié)點, 其他兩個節(jié)點作為follower節(jié)點

zk-local-cluster-status
5、可以通過xshell給三個節(jié)點的zkCli.sh 分別發(fā)送命令,

zk-local-cluster-cli
四、通過vagrant一鍵安裝zookeeper集群
1、集群ip規(guī)劃
zk_server1 => 1 192.168.13.21 centos7-jdk-zk-cluster-1
zk_server2 => 2 192.168.13.22 centos7-jdk-zk-cluster-2
zk_server3 => 3 192.168.13.23 centos7-jdk-zk-cluster-3
2、zk-install.sh同二使用的是相同內(nèi)容,Vagrantfile如下:
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
#設(shè)置虛擬機(jī)的box
config.vm.box = "centos7-base-jdk8"
zk_servers = {
:zk_server1 => ["192.168.13.21", "1", "centos7-jdk-zk-cluster-1"],
:zk_server2 => ["192.168.13.22", "2", "centos7-jdk-zk-cluster-2"],
:zk_server3 => ["192.168.13.23", "3", "centos7-jdk-zk-cluster-3"]
}
zk_server_list = "server.1=192.168.13.21:2888:3888\\nserver.2=192.168.13.22:2888:3888\\nserver.3=192.168.13.23:2888:3888"
zk_servers.each do |zk_server_name, zk_server_cfg|
config.vm.define zk_server_name do |app_config|
#設(shè)置虛擬機(jī)的主機(jī)名
app_config.vm.hostname = zk_server_cfg[2]
#設(shè)置ip
app_config.vm.network "private_network", ip: zk_server_cfg[0]
#Virtualbox相關(guān)配置
app_config.vm.provider "virtualbox" do |v|
#設(shè)置虛擬機(jī)的名稱
v.name = zk_server_cfg[2]
#設(shè)置虛擬機(jī)的內(nèi)存大小為1G
v.memory = 1048
#設(shè)置虛擬機(jī)的CPU個數(shù)
v.cpus = 2
end
#使用shell腳本進(jìn)行軟件安裝和配置
app_config.vm.provision "shell" do |s|
s.path = "zk-install.sh"
s.env = {ZK_FILE: "/vagrant/zookeeper-3.4.13.tar.gz",
ZK_INSTALL_PATH: "/opt/zk",
ZK_INSTALL_DIR: "/opt/zk/zookeeper-3.4.13",
ZK_PORT: "2181",
ZK_DATA_DIR: "/opt/zk/zookeeper-3.4.13/data",
ZK_LOG_DIR: "/opt/zk/zookeeper-3.4.13/log",
ZK_SERVER_ID: zk_server_cfg[1],
ZK_SERVER_LIST: zk_server_list}
end
end
end
end
3、通過vagrant up 拉起三臺虛擬機(jī),并自動安裝zk
安裝完畢后,進(jìn)入虛擬機(jī),確認(rèn)是否安裝正確

zk-cluster-status
OK, 到這里就結(jié)束了, 三種模式的安裝通過vagrant可以快速安裝實驗環(huán)境。