zookeeper简介
- zookeeper 动物管理员
apache zookeeper致力于开发和维护开源服务器,实现高度可靠的分布式协调
- 什么是zookeeper
zookeeper是一种集中式服务,用于维护配置信息,命名,提供分布式同步和提供组服务。所有这些类型的服务都以分布式应用程序的某种形式使用,每次实施他们都需要做很多工作来修复不可避免的错误和竞争条件。由于难以实现这些类型的服务,应用程序最初通常会吝啬他们,这使得他们在变化的情况下变得脆弱并且难以管理。即使正确完成,这些服务的不同实现也会在部署应用程序时导致管理复杂性。
zookeeper功能
- 1)存储数据:存储集群中每台机器都关心的数据(配置信息),需要接受服务器的注册
- 2)监听
zookeeper工作机制
- 基于观察者模式设计的分布式服务管理框架
- 1)启动服务器,首先向zookeeper中注册信息,创建临时节点(通过目录结构/servers/)
- 2)获取服务器列表并且注册监听(当服务器下线,在zookeeper中对应服务器节点将会消失)
- 3)当服务器宕机,zookeeper将会通过监听功能(process(){}回调方法)向zookeeper发送下线通知
- 4)监听功能重新获取服务器列表并再次进行监听
zookeeper的存储结构(目录树存储结构)
- / ——–> 根目录(根目录下可以有多个节点)
- z1、z2 ——–> 节点目录(Znode,默认存储1M数据)
- /z1/zz1 、 /z1/zz2 、 /z2/zz1
应用场景
- 1)集群同一配置管理
- 2)集群同一命名服务
- 3)集群统一管理
- 4)服务器的动态上下线感知
- 5)负载均衡
zookeeper集群安装
- 单节点安装
1)解压安装包
2)重命名zookeeper/conf/zoo_sample.cfg 为 zoo.cfg
3)修改zoo.cfg配置文件中的dataDir参数为自定义路径
4)启动zk:bin/zkServer.sh start
5)查看状态:bin/zkServer.sh status
6)启动客户端:bin/zkCli.sh - 全分布安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
181)zoo.cfg:
server.1=RedHat112:2888:3888
server.2=RedHat113:2888:3888
server.3=RedHat114:2888:3888
2)在自定义dataDir路径下创建myid文件,并设置id
myid:
1
3)配置环境变量
4)将环境变量和zookeeper发送到其他服务器
scp -zxvf -r zookeeper RedHat113:zookeeper
scp -zxvf -r zookeeper RedHat114:zookeeper
5)修改其他服务器myid
6)生效环境变量
zookeeper操作
- 启动shell客户端:zkCli.sh
- zk:操作日志
- ls path [watch]:查看path节点所包含的内容[监听]
- ls2 path [watch]:查看path节点的详细信息[监听]
- gat path [watch]:查看path节点所存储的数据
get path watch:监听节点值;get path watch:监听路径
cZxid:事务id,每次创建都以时间戳的形式产生唯一的Zxid
ctime:节点创建时间
mZxid:节点最后修改的时间戳id
mtime:节点最后修改的时间
pZxid:节点最后更新的子节点时间戳id
cversion:节点修改次数
dataVersion:节点数据的变化号
dataLength:数据长度
numChild:子节点数 - stat path:查看节点的状态信息
- set path acl:更改path节点中的数据
- create [-s] [-e] path data acl:创建路径,data为创建目录节点所存储的数据,acl为应答类型,[-s]带序号的节点,[-e]短暂节点
- delete path:删除节点(不能删除带有子节点的节点)
- rmr path:递归删除
zookeeper选举机制
- 当ZK1服务器启动时,先给自己投一票,ZK1作为follower
- 当ZK2服务器启动时,给自己投一票的同时,ZK1也会给ZK2投一票,票数占半数以上,ZK2作为leader
- 当ZK3服务器启动时,给自己投一票,此时发现已经存在leader,ZK3作为follower
注意事项
- 只要有半数以上的节点存活,就能够正常工作(zk集群要求配置奇数台)