1、下载
官网地址:http://zookeeper.apache.org/
![](https://img.haomeiwen.com/i7547037/59fba70a4b7ee527.png)
![](https://img.haomeiwen.com/i7547037/c8e4e834d9e5b48a.png)
2、解压并配置
1)把zoo_sample.cfg复制一份,并且重命名为zoo.cfg,并且修改zoo.conf里相关配置
![](https://img.haomeiwen.com/i7547037/87079ac3a4d8d43d.png)
最重要的两个配置是:
dataDir:放置日志文件和快照文件的路径,不建议为tmp目录,因为Linux系统会对tmp目录自动清理
clientPort:外部应用连接Zookeeper的端口,默认是2181
把dataDir的配置更改为:/root/data/zookeeper,配置的是绝对路径
2)设置环境变量
vim /etc/profile
export ZOOKEEPER_HOME=/usr/local/apache-zookeeper-3.6.0-bin
export ZOOBINDIR=$ZOOKEEPER_HOME/bin
export PATH=$ZOOBINDIR:$PATH
修改保存后,使用source /etc/profile 更新环境变量。
3、启动Zookeeper
使用zkServer.sh start 启动Zookeeper服务。
检查Zookeeper日志是否有出错信息。
检查Zookeeper的数据文件。
检查Zookeeper是否在2181端口上监听。
![](https://img.haomeiwen.com/i7547037/e58fd91dd3d3a89e.png)
- 执行以下语句,查看日志文件中是否有异常信息:
【grep -E 选项可以用来扩展选项为正则表达式。 如果使用了grep 命令的选项-E,则应该使用 | 来分割多个pattern,以此实现OR操作;
-i 不区分大小写
】
grep -E -i "((exception)|(error))" *
![](https://img.haomeiwen.com/i7547037/b73194d83be0facb.png)
无输出,说明日志中无报错信息。
2)查看Zookeeper的交易日志文件
在/root/data/zookeeper目录下,通过tree命令查看【可通过yum -y install tree 命令安装tree】:
![](https://img.haomeiwen.com/i7547037/c9c902183687470f.png)
此时只是快照文件。
3)查看Zookeeper是否在指定的端口上监听
netstat -an | ag 2181 或者 netstat -lnp|grep 2181 或者 lsof -i tcp:2181
![](https://img.haomeiwen.com/i7547037/10a93149616815c8.png)
以上证明Zookeeper服务已经成功启动了。
4、zkCli简单使用
1)启动zkCli,查看是否与Zookeeper节点建立了有效连接且Session是否已经初始化完成
![](https://img.haomeiwen.com/i7547037/d13533704045fe22.png)
![](https://img.haomeiwen.com/i7547037/1b5e8d048efeb738.png)
通过输入help可以查看支持的常用命令:
![](https://img.haomeiwen.com/i7547037/cd45fe0a6bcf7081.png)
通过命令 ls -R / 可以查看Zookeeper自带的znode:
![](https://img.haomeiwen.com/i7547037/090a1245639b4cc9.png)
2)创建znode
![](https://img.haomeiwen.com/i7547037/29b28b6590d7f14e.png)
再通过ls -R / 命令查看znode结构:
![](https://img.haomeiwen.com/i7547037/bfaf51930f36cd27.png)
5、实现一个锁
分布式锁要求:如果锁的持有者宕机了,锁可以被释放。Zookeeper的ephemeral节点恰好具备这样的特性:
![](https://img.haomeiwen.com/i7547037/e08580643fd0d1f4.png)
步骤:
1)打开两个zkCli客户端
2)在第一个客户端中,创建一个临时znode:
create -e /lock
![](https://img.haomeiwen.com/i7547037/9added334d83c5fa.png)
表示第一个客户端加锁成功。
3)在第二个客户端中也尝试进行加锁,加锁的操作其实就是创建znode
![](https://img.haomeiwen.com/i7547037/86aff86f0e7ebd2a.png)
加锁失败,因为lock这个节点已经被别人创建了
4)在第二个客户端,监控znode,也就是在等待锁被释放
stat -w /lock
![](https://img.haomeiwen.com/i7547037/c360ce5e453d28f6.png)
5)退出第一个客户端:quit
![](https://img.haomeiwen.com/i7547037/9d4301d922a177a6.png)
在第二个客户端里面,会收到一个WatchedEvent事件:
![](https://img.haomeiwen.com/i7547037/93a00127ce3219f4.png)
6)在第二个客户端收到WatchedEvent事件之后,再尝试加锁,此时加锁成功
![](https://img.haomeiwen.com/i7547037/6e71b2cae368bb85.png)
网友评论