什么是 ZooKeeper?
ZooKeeper 是一个分布式的,开放源码的分布式应用程序协同服务。ZooKeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。
ZooKeeper 数据模型
ZooKeeper 的数据模型是层次模型。层次模型常见于文件系统。层次模型和 key-value 模型是两种主流的数据模型。ZooKeeper 使用文件系统模型主要基于以下两点考虑:
- 文件系统的树形结构便于表达数据之间的层次关系。
- 文件系统的树形结构便于为不同的应用分配独立的命名空间(namespace)。
ZooKeeper 的层次模型称作 data tree。Data tree 的每个节点叫做 znode。不同于文件系统,每个节点都可以保存数据。每个节点都有一个版本(version),版本从 0 开始计数。
启动 Zookeeper
再安装配置完成后,就可以启动 Zookeeper,使用 zkServer.sh start 启动 ZooKeeper 服务:
[root@wupx apache-zookeeper-3.5.6-bin]# zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/apache-zookeeper-3.5.6-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
检查 ZooKeeper 日志是否有出错信息:
[root@wupx apache-zookeeper-3.5.6-bin]# cd logs/
[root@wupx logs]# grep -E -i "((exception)|(error))" *
因为返回没有结果,说明没有错误信息。
检查 ZooKeeper 数据文件,这里存放的 ZooKeeper 的事务日志文件和快照日志文件。
[root@wupx zookeeper]# cd /data/zookeeper/
[root@wupx zookeeper]# tree
.
├── version-2
│ └── snapshot.0
└── zookeeper_server.pid
1 directory, 2 files
因为现在还没有运行任何 ZooKeeper 命令,所以还没有事务日志文件。
最后会检查 ZooKeeper 是否在 2181 端口上监听。
netstat -an | ag 2181
执行后,我们可以看到 ZooKeeper 已经在 2181 这个端口上监听了。
zkCli 使用
在执行 zkCli.sh
命令后,会出现很多消息,这些消息证明我们的 zkCli 和 ZooKeeper 的节点建立了有效连接。