1、下载
官网地址:http://zookeeper.apache.org/
2、解压并配置
1)把zoo_sample.cfg复制一份,并且重命名为zoo.cfg,并且修改zoo.conf里相关配置
最重要的两个配置是:
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端口上监听。
- 执行以下语句,查看日志文件中是否有异常信息:
【grep -E 选项可以用来扩展选项为正则表达式。 如果使用了grep 命令的选项-E,则应该使用 | 来分割多个pattern,以此实现OR操作;
-i 不区分大小写
】
grep -E -i "((exception)|(error))" *
无输出,说明日志中无报错信息。
2)查看Zookeeper的交易日志文件
在/root/data/zookeeper目录下,通过tree命令查看【可通过yum -y install tree 命令安装tree】:
此时只是快照文件。
3)查看Zookeeper是否在指定的端口上监听
netstat -an | ag 2181 或者 netstat -lnp|grep 2181 或者 lsof -i tcp:2181
以上证明Zookeeper服务已经成功启动了。
4、zkCli简单使用
1)启动zkCli,查看是否与Zookeeper节点建立了有效连接且Session是否已经初始化完成
通过输入help可以查看支持的常用命令:
通过命令 ls -R / 可以查看Zookeeper自带的znode:
2)创建znode
再通过ls -R / 命令查看znode结构:
5、实现一个锁
分布式锁要求:如果锁的持有者宕机了,锁可以被释放。Zookeeper的ephemeral节点恰好具备这样的特性:
步骤:
1)打开两个zkCli客户端
2)在第一个客户端中,创建一个临时znode:
create -e /lock
表示第一个客户端加锁成功。
3)在第二个客户端中也尝试进行加锁,加锁的操作其实就是创建znode
加锁失败,因为lock这个节点已经被别人创建了
4)在第二个客户端,监控znode,也就是在等待锁被释放
stat -w /lock
5)退出第一个客户端:quit
在第二个客户端里面,会收到一个WatchedEvent事件:
6)在第二个客户端收到WatchedEvent事件之后,再尝试加锁,此时加锁成功