单节点部署

# 下载zookeeper包
https://zookeeper.apache.org/releases.html

# 解压
tar zxf apache-zookeeper-3.6.3.tar.gz 
cd zookeeper/conf
# conf目录下提供了配置的样例zoo_sample.cfg,要将zk运行起来,需要将其名称修改为zoo.cfg。
cp zoo_sample.cfg  zoo.cfg

# 启动
./zkServer.sh start 

# 连接,如果是连接同一台主机上的zk进程,那么直接运行bin/目录下的zkCli.cmd(Windows环境下)或者zkCli.sh(Linux环境下),即可连接上zk。
直接执行zkCli.cmd或者zkCli.sh命令默认以主机号 127.0.0.1,端口号 2181 来连接zk,如果要连接不同机器上的zk,可以使用 -server 参数
./zkCli.sh -server IP:端口

集群部署

# 在集群模式下,所有的zk进程可以使用相同的配置文件
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181
server.1=192.168.8.204:2888:3888
server.2=192.168.8.205:2888:3888
server.3=192.168.8.206:2888:3888

# initLimit:
ZooKeeper集群模式下包含多个zk进程,其中一个进程为leader,余下的进程为follower。
当follower最初与leader建立连接时,它们之间会传输相当多的数据,尤其是follower的数据落后leader很多。initLimit配置follower与leader之间建立连接后进行同步的最长时间。

# syncLimit:
配置follower和leader之间发送消息,请求和应答的最大时间长度。

# tickTime:
tickTime则是上述两个超时配置的基本单位,例如对于initLimit,其配置值为5,说明其超时时间为 2000ms * 5 = 10秒。

# server.id=host:port1:port2
其中id为一个数字,表示zk进程的id,这个id也是dataDir目录下myid文件的内容。
host是该zk进程所在的IP地址,port1表示follower和leader交换消息所使用的端口,port2表示选举leader所使用的端口。

# dataDir:
其配置的含义跟单机模式下的含义类似,不同的是集群模式下还有一个myid文件。myid文件的内容只有一行,且内容只能为1 - 255之间的数字,这个数字亦即上面介绍server.id中的id,表示zk进程的id。

# 在三台机器dataDir目录(/mnt/zookeeper 目录)下,
# 分别建一个myid文件,其内容分别为1,2,3。然后分别在这三台机器上启动zk进程,这样我们便将zk集群启动了起来
echo 1 > myid
echo 2 > myid
echo 3 > myid

# 启动
./zkServer.sh start 

# 查看状态
./zkServer.sh status

# 停止
./zkServer.sh stop

# 连接
./zkCli.sh -server 192.168.8.204:2181,192.168.8.205:2181,192.168.8.206:2181

#设置jconsole连接zookeeper
vim zkServer.sh

#修改54行,172.16.150.154是本机的ip地址,8899是jconsole的连接地址,关闭ssl和认证
ZOOMAIN="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=$JMXLOCALONLY 
添加:
-Djava.rmi.server.hostname=172.16.150.154     -Dcom.sun.management.jmxremote.port=8899 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false 

org.apache.zookeeper.server.quorum.QuorumPeerMain"

伪集群模式

这是一种特殊的集群模式,即集群的所有服务器都部署在一台机器上。

这种模式下,只需要把 zoo.cfg 做如下修改:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/mnt/zk_cluster/zookeeper
clientPort=2181
server.1=192.168.2.48:2888:3888
server.2=192.168.2.48:2889:3889
server.3=192.168.2.48:2890:3890

复制三分zk,以下配置需要区分
dataDir=/mnt/zk_cluster/zookeeper01
clientPort=2181

启停脚本

#!/bin/bash

user=`whoami`

if [ $user = "root" ];then

case "$1" in

start)
zk_name=`ls -F|grep '/$'`

for i in $zk_name
do
  cd $i/bin/
  pwd
  ./zkServer.sh start
  sleep 2
  cd ../../
done
;;

stop)
zk_name=`ls -F|grep '/$'`

for i in $zk_name
do
  cd $i/bin/
  pwd
  ./zkServer.sh stop
  sleep 2
  cd ../../
done
;;

*)
echo -e "\033[33m后面需追加参数 [start|stop] \033[0m"
;;

esac
else
echo -e "\033[31m请切换启动用户: \033[0m"

fi