2019-01-04 · Develop

Zookeeper 简介

Zookeeper 概述

使用拆分系统来解决日渐臃肿,性能急剧下降的企业级应用。但是拆分系统同时也带来了系统的复杂性,各子系统不是孤立存在的,它们彼此之间需要协作和交互,这就是我们常说的分布式系统。而分布式系统面临许下的挑战:

ZooKeeper 框架提供了一个完整的机制来克服所有的挑战。竞争条件和死锁使用故障安全同步方法进行处理。另一个主要缺点是数据的不一致性,ZooKeeper使用原子性解析。ZooKeeper 提供的常见服务如下:

总结来说就是: ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现。

Zookeeper 的数据结构

zookeeper-data

如上图所示,zk 提供的命名空间类似文件系统,每一个节点都通过路径来表示。每个节点可以包含一定的数据,可以用来存储一些业务等信息。
节点还包含了更新的版本、时间戳。有一种特殊的节点是临时节点,在创建节点的会话结束后,如客户端断开连接,将删除节点信息。还可以指定节点为顺序节点,在创建节点的时候,自动为节点增加一个序列号,并且序列号是递增序列号。
节点可以被监控,一旦节点变化,客户端就会收到变化的事间。

安装

Step 1 - 下载并解压

wget -c http://mirrors.shu.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz

tar zxvf zookeeper-3.4.13.tar.gz

cd zookeeper-3.4.13

Step 2 - 修改配置

cp conf/zoo_sample.cfg conf/zoo.cfg

Step 3 - 创建 Data 目录

mkdir -p /tmp/zookeeper

Step 4 - 启动服务

bin/zkServer.sh start # 启动 ZooKeeper 服务器 

bin/zkServer.sh stop # 停止 ZooKeeper 服务器 

使用 bin/zkServer.sh 命令将输出所有的命令参数

ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.13/bin/../conf/zoo.cfg
Usage: bin/zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}

Zookeeper CLI

Zookeeper 命令行界面 (CLI) 用于与 Zookeeper 集合进行交互式开发。提供如下几个主要功能:

创建 Znodes

create 语法将在给点的路径上创建一个 znode 节点。

create /path /data

使用 flag 参数来指定创建的 znode 节点是临时节点-e 顺序节点-s和默认情况下的持久节点。

获取节点数据

get /path

将返回和如下相似的数据

This is data
cZxid = 0x3a
ctime = Sat Jan 12 14:40:05 CST 2019
mZxid = 0x3a
mtime = Sat Jan 12 14:40:05 CST 2019
pZxid = 0x3a
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x100000175f60000
dataLength = 12
numChildren = 0

删除节点

delete /path

rmr /path

区别就是 delete 不能删除拥有子节点的节点,而 rmr 是递归删除节点。

设置节点数据

set /path data

列出子节点

ls /path

检查节点状态

stat /path

监听节点

get /path watch

ls 命令和 get 命令都可以添加一个 watch 操作,节点变化的时候会通知客户端。


参考文档
Zookeeper教程