1 概述
Zookeeper 是一个开源的分布式的,为分布式应用提供协调服务的 Apache 项目。
2 Zookeeper工作机制
3 特点
1)Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。
2)集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。(如果有四台机器,挂掉两台,不能正常服务,因为存活机器没有达到半数以上)
3)全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。(有几个节点备份几份数据,而hdfs默认备份3份)
4)更新请求顺序进行,来自同一个Client的更新请求按其发送顺序依次执行。
5)数据更新原子性,一次数据更新要么成功,要么失败。(此处和事务的特点之原子性类似)
6)实时性,在一定时间范围内,Client能读到最新数据。(因为zookeeper存放的数据量少)
4 zookeeper数据结构
ZooKeeper数据模型的结构与Unix文件系统很类似,整体上可以看作是一棵树,每个节点称做一 个ZNode。每一个ZNode默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识。
5 应用场景
提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等。
- zookeeper统一命名服务
在分布式环境下,经常需要对应用/服务进行统一命名,便于识别。 例如:IP不容易记住,而域名容易记住。 - zookeeper统一配置管理
- 分布式环境下,配置文件同步非常常见。
(1)一般要求一个集群中,所有节点的配置信息是 一致的,比如 Kafka 集群。
(2)对配置文件修改后,希望能够快速同步到各个 节点上。 - 配置管理可交由ZooKeeper实现。
(1)可将配置信息写入ZooKeeper上的一个Znode。
(2)各个客户端服务器监听这个Znode。
(3)一旦Znode中的数据被修改,ZooKeeper将通知 各个客户端服务器。
-
zookeeper统一集群管理
-
分布式环境中,实时掌握每个节点的状态是必要的。
(1)可根据节点实时状态做出一些调整。 -
ZooKeeper可以实现实时监控节点状态变化
(1)可将节点信息写入ZooKeeper上的一个ZNode。
(2)监听这个ZNode可获取它的实时状态变化。
-
zookeeper服务器动态上下线
客户端能实时洞察到服务 器上下线的变化
-
zookeeper软负载均衡
在Zookeeper中记录每台服务器的访问数,让访问数最少的服务器去处理最新的客户端请求
6.zookeeper的节点类型 -
持久(Persistent):客户端和服务器端断开连接后,创建的节点不删除
(1)持久化目录节点
客户端与Zookeeper断开连接后,该节点依旧存在
(2)持久化顺序编号目录节点
客户端与Zookeeper断开连接后,该节点依旧存 在,只是Zookeeper给该节点名称进行顺序编号 -
短暂(Ephemeral):客户端和服务器端断开连接后,创建的节点自己删除
(1)临时目录节点
客户端与Zookeeper断开连接后,该节点被删除
(2)临时顺序编号目录节点
客户端与Zookeeper断开连接后, 该节点被删除 , 只是 Zookeeper给该节点名称进行顺序编号。
说明
:创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护
注意
:在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序
7.客户端命令行操作