赞
踩
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。提供了分布式独享锁、选举、队列的接口。
Zookeeper特性
Znode数据模型
zookeeper的数据节点可以视为树状结构的目录,树中的各节点被称为znode(即zookeeper node),一个znode可以有多个子节点,可以说 zookeeper 中的所有存储的数据是由 znode 组成的,并以 key/value 形式存储数据。整体结构类似于 linux 文件系统的模式以树形结构存储,其中根路径以 / 开头。
znode节点类型
创建 znode 时设置顺序标识,znode 名称后会附加一个值顺序号是一个单调递增的计数器,由父节点维护在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序。
下面是网上找的一张关于Zookeeper体系的图片。
zookeeper集群节点数推荐为奇数(2n+1)个,因为如果为偶数个节点,当有一半节点发生故障时,由于没有足够的节点数来选举新的leader节点(要求半数以上节点选举,不包含半数),会导致整个集群无法工作。如果只能部署两个节点,则不如使用单节点,因为两个节点的集群,只要任意一个节点发生故障,则集群无法工作。
集群规则为:2N + 1 台,N > 0,即最少需要 3 台。本文的集群环境搭建用到了3台机器。
节点类型 | 节点主机名 | 节点IP地址 |
---|---|---|
主节点 | master | 192.168.239.128 |
从节点 | slave1 | 192.168.239.129 |
从节点 | slave2 | 192.168.239.130 |
修改3台机器的/etc/hosts文件
在启动集群时,主节点需要通过主机名远程访问从节点,所以需要让主节点能够识别从节点的主机名。
vi /etc/hosts
192.168.239.128 master
192.168.239.129 slave1
192.168.239.130 slave2
zookeeper官网下载地址: 点我跳转
本文用的版本是3.8.0,下载完上传文件到master节点服务器上面的/home/soft目录下并解压。
cd /home/soft
tar -zxvf apache-zookeeper-3.8.0-bin.tar.gz
cd /home/soft/apache-zookeeper-3.8.0-bin/conf
#复制配置文件
cp zoo_sample.cfg zoo.cfg
#创建数据保存目录
mkdir /home/soft/apache-zookeeper-3.8.0-bin/data
#编辑配置文件
vi zoo.cfg
在zoo.cfg文件尾部添加下面4行属性,然后保存
dataDir=/home/soft/apache-zookeeper-3.8.0-bin/data
server.0=master:2888:3888
server.1=slave1:2888:3888
server.2=slave2:2888:3888
从节点的/home/soft必须存在,zoo.cfg配置文件中的server参数后面指定的编号为节点的唯一Id,需要手动创建myid文件保存id
scp -rq /home/soft/apache-zookeeper-3.8.0-bin slave1:/home/soft
scp -rq /home/soft/apache-zookeeper-3.8.0-bin slave2:/home/soft
master机器
echo 0 > /home/soft/apache-zookeeper-3.8.0-bin/data/myid
slave1机器
echo 1 > /home/soft/apache-zookeeper-3.8.0-bin/data/myid
slave2机器
echo 2 > /home/soft/apache-zookeeper-3.8.0-bin/data/myid
依次在3个节点上面都启动zk服务。
/home/soft/apache-zookeeper-3.8.0-bin/bin/zkServer.sh start
在3台机器上面分别使用jps都可以看到QuorumPeerMain服务表示集群启动正常了。
停止命令
/home/soft/apache-zookeeper-3.8.0-bin/bin/zkServer.sh stop
zkCli是用来连接ZooKeeper服务器操作数据的脚本工具。
/home/soft/apache-zookeeper-3.8.0-bin/bin/zkCli.sh
zkCli常用的命令如下.
命令 | 描述 |
---|---|
help | 查看命令帮助 |
ls | 查看目录 |
create | 创建节点 |
get | 获取节点数据 |
set: | 修改节点数据 |
delete | 删除节点数据 |
rmr | 递归删除带有子节点的节点 |
创建节点
格式: create [-e] [-s] path data(可选)
-e 创建临时节点,一旦会话结束,则节点自动删除
-s 创建带有序列号的节点,带有-s的create命令会自动为节点增加一个序列号,
递增后缀,可以通过这个判断节点创建的先后顺序。
-e和-s可以组合使用。
以下创建了config节点,并在config节点下创建db.username节点并赋值为root
create /config
create /config/db.username root
获取节点数据
格式: get [-s] [-w] path
-s 查看节点所有信息:数据信息+节点属性值
-w 查看节点数据信息(不加参数默认是-w)
get -s -w /config/db.username
第一行为这个节点的数据内容,其它的参考下面列表
参数 | 描述 |
---|---|
cZxid | 节点创建时的zxid |
ctime | 节点创建时的时间戳 |
mZxid | 节点最新一次更新发生时的zxid |
mtime | 节点最新一次更新发生时的时间戳 |
pZxid | 该节点的子节点(或该节点)的最近一次 创建 / 删除 的时间戳对应 |
cversion | 其子节点的更新次数 |
dataVersion | 节点数据的更新次数 |
aclVersion | 节点ACL(授权信息)的更新次数 |
ephemeralOwner | 如果该节点为临时节点,ephemeralOwner值表示与该节点绑定的会话ID,如果该节点不是临时节点,ephemeralOwner值为0x0 |
dataLength | 数据长度 |
numChildren | 子节点的数量 |
修改节点数据
修改完数据后执行get查看节点控制台会打印admin
set /config/db.username admin
删除节点
递归删除包含子节点的节点
rmr /config
删除没有子节点的节点
delete /config/db.username
【Hadoop生态圈】其它文章如下,后续会继续更新。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。