一、概述
Zookeeper 是一个开源的分布式的,为分布式应用提供协调服务的 Apache 项目
zookeeper的工作机制
Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据(状态数据而非实际业务数据),然后接受观察者(Client)的注册, 一旦这些数据的状态发生变化 ,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。
Zookeeper = 文件系统 + 通知机制
二、特点
zookeeper的特点
1、Zookeeper:一个leader,多个follower组成的集群
2、全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的
3、分布式读写,更新请求转发,由leader实施
4、更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行
5、数据更新原子性,一次数据更新要么成功,要么失败
6、实时性,在一定时间范围内,client能读到最新数据
7、集群中只要有半数以上节点存活,zk集群就能正常服务。<因此常见到zk集群中很少有偶数台服务器,除非是土豪>
三、数据结构
ZooKeeper数据模型的结构与Unix文件系统很类似,整体上可以看作是一棵树,每个节点称做一个ZNode。 每一个ZNode默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识。
四、应用场景
统一命名服务
在分布式环境下,经常需要对应用/服务进行统一命名,便于识别。例如:IP不容易记住,而域名容易记住。
统一配置管理
1)分布式环境下,配置文件同步非常常见
- 一般要求一个集群中,所有节点的配置信息是一致的,比如 Kafka 集群
- 对配置文件修改后,希望能够快速同步到各个节点上。
2)配置管理可交由ZooKeeper实现
- 可将配置信息写入ZooKeeper上的一个Znode
- 各个客户端服务器监听这个Znod
- 一旦Znode中的数据被修改,ZooKeeper将通知各个客户端服务器。
统一集群管理
1)分布式环境中,实时掌握每个节点的状态是必要的。
(1)可根据节点实时状态做出一些调整。
2)ZooKeeper可以实现实时监控节点状态变化
(1)可将节点信息写入ZooKeeper上的一个ZNode。
(2)监听这个ZNode可获取它的实时状态变化
有两点特别重要:
· 客户端如果对Zookeeper的数据节点注册Watcher监听,那么当该数据及诶单内容或是其子节点列表发生变更时,Zookeeper服务器就会向订阅的客户端发送变更通知。
· 对在Zookeeper上创建的临时节点,一旦客户端与服务器之间的会话失效,那么临时节点也会被自动删除。
bin]# ps -ef|grep 2181 root 5777 1 0 Mar26 ? 00:16:48 /usr/local/codis/src/github.com/CodisLabs/codis/bin/codis-fe --ncpu=2 --log=/var/log/fe.log --log-level=WARN --zookeeper=10.50.10.153:2181 --listen=10.50.10.153:8090