title: zookeeper特性与节点介绍
date: 2021-09-22 22:43:51
tags: 分布式框架
categories: zookeeper
1 产生背景
单体向分布式服务转变,会产生多个节点间协同问题,如:
假设有3个节点,1个job,该job该由哪个节点执行?
若该job由节点1执行,要是1挂了,现在该2还是3执行?
上游和下游服务的发现,如:
- 上游挂了,下游怎么知道?
- 下游服务新增,上游怎么知道?
多节点的协调问题,如:并发产生了请求,该怎么保证请求的幂等性?
由于节点自身协调不可靠,性能不高,故需要一个独立服务来做协调,他必须可靠且保证性能。
2 概要
- zookeeper是用于分布式服务的协调服务。
- 它对外公布了一组简单的API,分布式应用程序可以基于这些API,用于同步节点状态,节点配置,服务注册等信息
- 它支持java和c两种语言。
3 工作机制
从设计模式的角度理解,zookeeper基于观察者模式。他负责存储和管路大家都关心的数据,然后接受观察,一旦数据状态发生变化,zookeeper就通知注册者。
4 特点
- zookeeper是由一个leader和多个follower组成的集群
- 半数以上节点存活,zookeeper 即可以正常服务
- 每个server的数据一致
- 来自同一个client的请求依次执行
- 原子性,数据更新要么成功,要么失败
- zookeeper数据量少,故同步快,一定时间内,client可以读到最新数据
5 zookeeper 启动
- 官网下载最新版本 Apache Downloads,并解压
- 进入conf目录,拷贝默认配置
cp zoo_sample.cfg zoo.cfg
- 进入bin目录,启动服务端
./zkServer.sh start
- 进入bin目录,进入客户端
./zkCli.sh
6 常规配置文件说明
tickTime=2000 #zookeeper时间配置中的基本单位 (毫秒)
initLimit=10 #允许follower初始化连接到leader最大时长,它表示tickTime时间倍数 即:initLimit*tickTime
syncLimit=5 #允许follower与leader数据同步最大时长,它表示tickTime时间倍数
dataDir=/tmp/zookeeper #zookeper 数据存储目录
clientPort=2181 #对客户端提供的端口号
maxClientCnxns=60 #单个客户端与zookeeper最大并发连接数
autopurge.snapRetainCount=3. #保存的数据快照数量,之外的将会被清除
autopurge.purgeInterval=1 #自动触发清除任务时间间隔,小时为单位。默认为0,表示不自动清除。
7 客户端命令
close 关闭当前会话
connect host:port 重新连接指定Zookeeper服务
create [-s] [-e] [-c] [-t ttl] path [data] [acl] 创建节点
delete [-v version] path 删除节点,(不能存在子节点)
deleteall path [-b batch size] 删除路径及所有子节点
get [-s] [-w] path. 查看节点数据 -s 包含节点状态 -w 添加监听
getAcl [-s] path. 列出子节点 -s状态 -R 递归查看所有子节点 -w 添加监听
history 查看执行的历史记录
redo cmdno 重复 执行命令,history 中命令编号确定
quit 退出客户端
1 |
|