ZooKeeper 的简单介绍
用了很久的 ZooKeeper 了,稍微做个总结。ZooKeeper(以下简称 ZK)是一个分布式组件,基于类似 Paxos 的 ZAB 一致性算法来实现。ZK 保存的数据结构类似于一般的文件系统,只不过在 ZK 中文件夹也可以拥有数据,整体文件结构为一棵树型。
安装 ZooKeeper
去 官网 下载压缩包,随后使用 rsync 同步到三台机器上,我使用如下三台机器
172.19.65.196
172.19.72.108
172.19.72.112
解压压缩包,使用 cp conf/zoo_sample.cfg conf/zoo.cfg 得到配置文件,在三台机器的 conf/zoo.cfg 中添加如下配置
dataDir=/home/zookeeper/apache-zookeeper-3.8.0-bin/data
server.1=172.19.65.196:2888:3888
server.2=172.19.72.108:2888:3888
server.3=172.19.72.112:2888:3888
然后在三台机器的 dataDir 目录下创建 myid 文件
vi /home/zookeeper/apache-zookeeper-3.8.0-bin/data/myid
三台机器的 myid 文件中对应修改的内容如下
| 机器 | 内容 |
|---|---|
| 172.19.65.196 | 1 |
| 172.19.72.108 | 2 |
| 172.19.72.112 | 3 |
启动 ZK 集群
修改完毕之后使用命令依次启动三台机器上的 ZK
./bin/zkServer.sh start
使用命令 zkServer.sh status 可以查看三台机器的状态
1 | [zookeeper@lin-65-196 apache-zookeeper-3.8.0-bin]$ ./bin/zkServer.sh status |
可以发现 108 节点是当前的 leader,我们使用 zkServer.sh stop 停止 108 节点上面的 ZK 进程,再看状态可以发现 112 节点成为了的新的 leader 了。
使用 ZooKeeper
在其它的机器上使用客户端 zkCli 连接 ZK 集群
1 | ~ zkCli -server 172.19.65.196:2181,172.19.72.108:2181,172.19.72.112:2181 |
成功连接 zk 集群,之后我们可以进行创建、删除、查询等等操作
ls /
create /Nanjing
create /Nanjing/Yuhuatai
ls /Nanjing/Yuhuatai
create /Nanjing/Yuhuatai/Ruanjiangu "Software"
get /Nanjing/Yuhuatai/Ruanjiangu
delete /Nanjing/Yuhuatai/Ruanjiangu
stat /Nanjing/Yuhuatai
quit
ZK 支持创建临时数据
临时数据在客户端的连接断开之后会自动删除
create -e /Nanjing/Yuhuatai/Ruanjiangu "tmp"
get /Nanjing/Yuhuatai/Ruanjiangu # 此时是有值的
断开客户端连接,再重新连接 zkServer
get /Nanjing/Yuhuatai/Ruanjiangu
此时执行上面的语句就获取不到值了
对节点添加监听器
通过 addWatch /Nanjing/Yuhuatai 添加对节点的监听器,之后打开一个新的 zkCli 执行命令 create /Nanjing/Yuhuatai/Ruanjiangu。此时监听器会收到通知,详情如下
[zk] addWatch /Nanjing/Yuhuatai
[zk]
WATCHER::
WatchedEvent state:SyncConnected type:NodeCreated path:/Nanjing/Yuhuatai/Ruanjiangu
参考
本文链接: https://www.nosuchfield.com/2021/04/15/A-brief-introduction-to-ZooKeeper/
版权声明: 本博客所有文章均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!