一 下载安装
先去官网下载安装包。然后上传到linux主机(ALT+P切换到sftp,然后使用put 本地文件路径):

然后解压:
tar -zxvf zookeeper-3.4.10.tar.gz
二 基本使用
进入到解压后目录:
cd zookeeper-3.4.10
然后进入到conf目录,并且复制一分核心配置文件zoo_sample.cfg:
[root@localhost conf]# cp zoo_sample.cfg zoo.cfg
基本命令:
//启动:zkServer.sh start //停止:zkServer.sh stop //查看状态:zkServer.sh status
切换到bin下启动zookeeper:
[root@localhost bin]# sh zkServer.sh start ZooKeeper JMX enabled by default Using config: /root/zookeeper-3.4.10/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
连接到启动的zookeeper:
[root@localhost bin]# sh zkCli.sh Connecting to localhost:2181 2020-12-06 19:55:52,311 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.10-39d3a4f269333c922ed3db283be479f9deacaa0f, built on 03/23/2017 10:13 GMT 2020-12-06 19:55:52,313 [myid:] - INFO [main:Environment@100] - Client environment:host.name=localhost 2020-12-06 19:55:52,313 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_242 2020-12-06 19:55:52,315 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation 2020-12-06 19:55:52,315 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64/jre 2020-12-06 19:55:52,315 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/root/zookeeper-3.4.10/bin/../build/classes:/root/zookeeper-3.4.10/bin/../build/lib/*.jar:/root/zookeeper-3.4.10/bin/../lib/slf4j-log4j12-1.6.1.jar:/root/zookeeper-3.4.10/bin/../lib/slf4j-api-1.6.1.jar:/root/zookeeper-3.4.10/bin/../lib/netty-3.10.5.Final.jar:/root/zookeeper-3.4.10/bin/../lib/log4j-1.2.16.jar:/root/zookeeper-3.4.10/bin/../lib/jline-0.9.94.jar:/root/zookeeper-3.4.10/bin/../zookeeper-3.4.10.jar:/root/zookeeper-3.4.10/bin/../src/java/lib/*.jar:/root/zookeeper-3.4.10/bin/../conf: 2020-12-06 19:55:52,316 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib 2020-12-06 19:55:52,316 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp 2020-12-06 19:55:52,316 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA> 2020-12-06 19:55:52,316 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux 2020-12-06 19:55:52,316 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64 2020-12-06 19:55:52,316 [myid:] - INFO [main:Environment@100] - Client environment:os.version=3.10.0-862.el7.x86_64 2020-12-06 19:55:52,316 [myid:] - INFO [main:Environment@100] - Client environment:user.name=root 2020-12-06 19:55:52,316 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/root 2020-12-06 19:55:52,316 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/root/zookeeper-3.4.10/bin 2020-12-06 19:55:52,317 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@2b71fc7e 2020-12-06 19:55:52,353 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1032] - Opening socket connection to server localhost/0:0:0:0:0:0:0:1:2181. Will not attempt to authenticate using SASL (unknown error) Welcome to ZooKeeper! JLine support is enabled 2020-12-06 19:55:52,491 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@876] - Socket connection established to localhost/0:0:0:0:0:0:0:1:2181, initiating session 2020-12-06 19:55:52,793 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1299] - Session establishment complete on server localhost/0:0:0:0:0:0:0:1:2181, sessionid = 0x17637e639210001, negotiated timeout = 30000 WATCHER:: WatchedEvent state:SyncConnected type:None path:null [zk: localhost:2181(CONNECTED) 0]
可以看zkcli.sh与zkServer.sh脚本其本质上也是再调用zookeeper工厂的方法启动项目。
查看常用命令:
[zk: localhost:2181(CONNECTED) 0] help ZooKeeper -server host:port cmd args stat path [watch] set path data [version] ls path [watch] delquota [-n|-b] path ls2 path [watch] setAcl path acl setquota -n|-b val path history redo cmdno printwatches on|off delete path [version] sync path listquota path rmr path get path [watch] create [-s] [-e] path data acl addauth scheme auth quit getAcl path close connect host:port
创建一些节点:
[zk: localhost:2181(CONNECTED) 3] create /note "note"
Created /note
[zk: localhost:2181(CONNECTED) 4] create /note/note001 "note001"
Created /note/note001
[zk: localhost:2181(CONNECTED) 5]
下载zooviwer查看zookeeper的数据结构:

发现刚刚创建的节点就过来了。zk是一种树形的层级结构。
zookeeper提供了 create、delete、set、get 四个基本的增删改查命令。
zookeeper分为临时、永久两种。zookeeper的节点都是有序的。
可以去监听一个节点,节点的监听事件只一次有效。基于临时有序节点+监听实现分布式锁。
三 集群搭建
我们模拟在单机下启动三个zk节点并且搭建集群。
首先创建三个文件夹,分别代表三个zk服务对外提供服务端口为2181、2182、2183。
[root@localhost ~]# cp -r zookeeper-3.4.10 zookeeper2181
[root@localhost ~]# cp -r zookeeper-3.4.10 zookeeper2182
[root@localhost ~]# cp -r zookeeper-3.4.10 zookeeper2183
然后修改zookeeper2181相关的配置:
# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/root/zookeeper2181/data # the port at which the clients will connect clientPort=2181 #增加集群配置 server.1=192.168.1.9:2287:3387 server.2=192.168.1.9:2288:3387 server.3=192.168.1.9:2289:3387 # the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #autopurge.purgeInterval=1
主要修改三个地方,dataDir指定为myid的路径,端口修改为对应端口2181,然后增加集群配置。
#集群配置信息 #server.A=B:C:D
#A:是一个数字,表示这个是服务器的编号
#B:是这个服务器的ip地址
#C:Zookeeper服务器之间的通信端口
#D:Leader选举的端口
在datadir下增加myid文件。
[root@localhost data]# echo "1" > myid
2182与2183参考一样的配置。
配置完成之后分别启动三台主机:
[root@localhost bin]# ./zkServer.sh start
然后查看节点状态:
[root@localhost bin]# ./zkServer.sh status ZooKeeper JMX enabled by default Using config: /root/zookeeper2182/bin/../conf/zoo.cfg Mode: follower [root@localhost bin]# ./zkServer.sh status ZooKeeper JMX enabled by default Using config: /root/zookeeper2181/bin/../conf/zoo.cfg Mode: follower [root@localhost bin]# ./zkServer.sh status ZooKeeper JMX enabled by default Using config: /root/zookeeper2183/bin/../conf/zoo.cfg Mode: leader
三个节点2181、2182位follower 2183位leader。
Tips:
在启动集群的时候有喷到2181节点就是一直显示为Mode: standalone,再查看了配置文件确实没问题之后,使用jps查看 QuorumPeerMain进程,存在的话杀掉进程重启即可。