这里介绍zookeeper系列,该篇幅是zookeeper的第一篇文章,后续会把zookeeper的相关系列文章全部写完,方便大家了解和掌握zookeeper
文章目录
zookeeper系列1zookeeper是什么?zookeeper能干什么?一、zookeeper安装-单机版二、zk的目录结构及节点
1.目录结构
zk的命令使用 2.zk各个节点介绍
**1、znode节点****2、NameService 命名服务****3、configuration 配置管理****4、GroupMembers 集群管理** 3.zk中的角色介绍 总结
zookeeper是什么?
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。Zookeeper是hadoop的一个子项目,其发展历程无需赘述。在分布式应用中,由于工程师不能很好地使用锁机制,以及基于消息的协调机制不适合在某些应用中使用,因此需要有一种可靠的、可扩展的、分布式的、可配置的协调机制来统一系统的状态
zookeeper能干什么?
相信很多小伙伴,学习zk最主要的是想知道zk能干什么,怎么做。能用在什么地方,对业务有什么帮助。
(1) 数据发布/订阅
(2) 负载均衡
(3) 命名服务
(4) 分布式协调/通知
(5) 集群管理
(6) Master 选举
(7) 分布式锁
(8) 分布式队列数据发布/订阅介绍数据发布/订阅系统,即所谓的配置中心,顾名思义就是发布者发布数据供订阅者进行数据订阅。 目的动态获取数据(配置信息)实现数据(配置信息)的集中式管理和数据的动态更新设计模式 Push 模式 Pull 模式
一、zookeeper安装-单机版
单机:
http://zookeeper.apache.org/releases.html
下载安装包
拷贝安装包到centos7.4的/home/local/
cd /home/local/zookeeper.x
conf目录下提供了配置的样例zoo_sample.cfg,要将zk运行起来,需要将其名称修改为zoo.cfg。
vi zoo.cfg
tickTime时长单位为毫秒,为zk使用的基本时间度量单位。例如:1 * tickTime是客户端与zk服务端的心跳时间。
2 * tickTime是客户端会话的超时时间。tickTime的默认值为2000毫秒,更低的tickTime值可以更快地发现超时问题,但也会导致更高的网络流量(心跳消息)和更高的CPU使用率(会话的跟踪处理)。clientPortzk服务进程监听的TCP端口,默认情况下,服务端会监听2181端口。dataDir无默认配置,必须配置,用于配置存储快照文件的目录。如果没有配置dataLogDir,那么事务日志也会存储在此目录。
./zkServer.sh start-foreground 即可
二、zk的目录结构及节点 1.目录结构文件目录结构如下
- 链接zk(当启动 ZooKeeper 服务成功之后,输入下述命令。连接到 ZooKeeper 服务:zkCli.sh –server 127.0.0.1:2181)输入help可以看见zk的命令,每一条命令后,后面的数位会加一,这块后续我会为大家详细讲解
输入:ls / 可以查看当前服务中包含的内容。使用: create /xxoo “” 后面可带value 创建一个新的 znode 。
我们可以用get/set对节点取/设置值
可以使用delete /xxoo 删除节点。
有四种类型的znode: 1、PERSISTENT-持久化目录节点 客户端与zookeeper断开连接后,该节点依旧存在 2、 PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点 客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号 3、EPHEMERAL-临时目录节点 客户端与zookeeper断开连接后,该节点被删除 4、EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点 客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号2、NameService 命名服务
这个似乎最简单,在zookeeper的文件系统里创建一个目录,即有唯一的path。 在我们使用tborg无法确定上游程序的部署机器时即可与下游程序约定好path,通过path即能互相探索发现 这个主要是作为分布式命名服务,通过调用zk的create node api,能够很容易创建一个全局唯一的path, 这个path就可以作为一个名称。3、configuration 配置管理
现在把这些配置全部放到zookeeper上去,保存在 Zookeeper 的某个目录节点中, 然后所有相关应用程序对这个目录节点进行监听,一旦配置信息发生变化, 每个应用程序就会收到 Zookeeper 的通知,然后从 Zookeeper 获取新的配置信息应用到系统中就好。4、GroupMembers 集群管理
所谓集群管理无在乎两点:是否有机器退出和加入、选举master。 对于第一点,所有机器约定在父目录GroupMembers下创建临时目录节点,然后监听父目录节点的子节点变化消息。 一旦有机器挂掉,该机器与 zookeeper的连接断开,其所创建的临时目录节点被删除,所有其他机器都收到通知: 某个兄弟目录被删除,于是,所有人都知道了。新机器加入也是类似,所有机器收到通知:新兄弟目录加入,highcount又有了。 对于第二点,所有机器创建临时顺序编号目录节点,通过master选举算法选举出来。
3.zk中的角色介绍
要学好zk就必须要先了解zk中的基础部分,例如zk的节点,zk的角色,zk如何选举leader,zk中使用的什么算法。这些你了解清楚了后,对于你再回过头去看你的项目,项目中使用的分布式组建,都会有本质的提高及理解。下面先来看看zk中有哪些角色。
- client:分布式中的一个节点,访问服务器的配置信息,周期性向server发送心跳包,server向client回应确认,如果client没有收到回应,则重定向到另一个serverserver:zookeeper中的一个节点,为client提供所需的服务,给client回应信息表明自己是存活的leader:连接任何一个节点,如果节点出现故障,leader自动修复,在service启动时完成leader的选举follower:听从leader的指令,完成选举工作
zookeeper是一款非常强大分布式协调服务,学习zk后会带来很多设计上的思维碰撞。本来想多写点的,把zk的watch/leader选举给写完,但是想想,还是放到下篇文章介绍,如果噼里啪啦写一大片,过犹而不及,学习本来就是个渐变的过程。只有了解清楚了,知道清楚了,你就可以拍着胸脯保证学完了,学通了可以去使用学习下一个组件了。
**下一篇介绍zk的watch和leader选举



