跳到主要内容
Huiboxes

Zookeeper笔记

Zookeeper是一个开源的分布式协调服务框架,主要用来解决分布式集群中应用系统的一致性问题。 Zookeeper是Google Chubby思想的一个开源实现。 Zookeeper本质上是一个分布式文件系统,适合存放小文件,通过文件系统来实现分布式协调。 Zookeeper…

后端1分钟阅读

  • Zookeeper是一个开源的分布式协调服务框架,主要用来解决分布式集群中应用系统的一致性问题。
  • Zookeeper是Google Chubby思想的一个开源实现。
  • Zookeeper本质上是一个分布式文件系统,适合存放小文件,通过文件系统来实现分布式协调。

Zookeeper也是集群,和Hadoop一样一个主机(leader)和一堆从机(follower)。leader是选举出来的。 客户端可以向集群发读请求和写请求。
写请求牵扯到事务操作,follower收到写请求会转发给leader。
为了保证原子性,必须保证写请求执行完以后才能执行读请求。

  • 发布订阅
  • 命名服务
  • 分布式锁
  • 分布式协调

下载zookeeper

archive.apache.org/dist/zookee…

解压

tar -zxvf zookeeper-3.4.9.tar.gz -C /opt/module/

修改配置

cd /opt/module/zookeeper-3.4.9/conf/
cp zoo_sample.cfg zoo.cfg
mkdir -p /opt/module/zookeeper-3.4.9/zkdatas
vim zpp.cfg # 配置文件
dataDir=/opt/modulezookeeper-3.4.9/zkdatas # 数据存放的目录
autopurge.snapRetainCount=3 # 保留多少个快照
autopurge.purgeInterval=1 # 日志多少小时清理一次
server.1=hadoop101:2888:3888
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888

添加myid配置

echo 1 > /opt/module/zookerper-3.4.9/zkdatas/myid # Hadoop101 添加myid

安装包分发并修改myid值

scp -r /opt/module/zookerper-3.4.9/ hadoop102:/opt/module/ # 分发给Hadoop102
scp -r /opt/module/zookerper-3.4.9/ hadoop103:/opt/module/ # 分发给Hadoop103
echo 2 > /opt/module/zookerper-3.4.9/zkdatas/myid # Hadoop102 添加myid
echo 3 > /opt/module/zookerper-3.4.9/zkdatas/myid # Hadoop103 添加myid

/opt/module/zookerper-3.4.9/bin/zkServer.sh start # 所有机器都要执行
/opt/module/zookerper-3.4.9/bin/zkServer.sh status # 查看当前机器是leader还是follower
/opt/module/zookerper-3.4.9/bin/zkServer.sh stop # 关闭集群

默认的选举算法是:集群中有一半的机器投票后才开始选举。每个机器启动的时候相当于给自己投了一票。票数相等就比较myid值,myid值大就选中。

和linux相似,一个根目录下有N个子节点。每个子节点被称为Znode,每个Znode下面可以有N个子节点。Znode像目录但是又可以像文件一样存数据(1M)。每个Znode由3部分组成:

  • state
  • data
  • children

创建节点
create [-s] [-e] path dataacl # 创建Zonde
create /app1 hello # 创建普通节点
create -s /app2 world # 创建顺序节点
create -e /tempnode java # 创建临时节点
create -s -e /tempnode1 # 创建临时的顺序节点
数据操作
get /app1 # 获取/下app1的数据
set /app1 xxx # 修改/下app1的数据位xxx
删除节点
delete /app1 # 删除/下app1
rmr /app1 # 递归删除
不能删除zookeeper
history # 显示历史操作

  • 类似于数据库中的触发器,对某个Znode设置Watcher,当Znode发生变化的时候,WatchManager会调用对应的Watcher
  • 当Znode发生删除、修改、创建、子节点修改的时候,对应的Watcher会得到通知
  • Watch的特点
    • 一次性触发 一个Watcher只会被触发一次,如果需要继续监听需要再次添加Watcher
    • 事件封装: Wacther得到的事件是被封装过的,包括三个内容keeperState、eventType、path

发布订阅机制: 订阅者订阅某个主题,当主题发生变化时会通知所有订阅者。

评论