zookeeper初探

2016-09-08  本文已影响0人  JALDURIEE

1. What is zookeeper?

zookeeper是apache基金的一个开源项目,致力于实现高可靠的分布式协调,提供服务解决分布式应用中的以下问题:

2. 应用场景

2.1 分布式应用配置管理

zookeeper_config.png

2.2 分布式应用集群管理



Applicaion Server启动时与zookeepr建立会话创建EPHEMERAL节点,Applicaion Server停止时会话终止的时候,EPHEMERAL节点被删除。

zookeeper_server.png

2.3 分布式锁

核心依赖:利用zookeeper对znode节点操作的原子性

zookeeper分布式锁实现算法:

  1. 调用 create( ),参数 pathname 为 "locknode/lock-",并设置 sequence 和 ephemeral 标志。
  2. 在所节点(lock node)上调用 getChildren( ) ,不需要设置监视标志。
  3. 如果在第 1 步中创建的节点的路径具有最小的序号后缀,那么该客户端就获得了锁。
  4. 客户端调用 exists( ) ,并在锁目录路径中前一个最小序号的节点上设置监视标志。
  5. 如果 exists( ) 返回 false,跳转至第 2 步,否则,在跳转至第 2 步之前等待前一步路径上节点的通知消息。

示例:多个进程互斥访问某个文件

lockfile.png

2.4 其它场景

3. zookeeper overview

3.1 zookeeper数据模型和层次命名空间

zookeeper本质上是通过一个类似标准文件系统的共享层次命名空间来实现分布式进程间的协调,其中命名空间节点被称作znode,znode节点可以包含数据和孩子节点,和标准文件系统不一样的是zookeeper把数据保存在内存当中,因为在内存中读写数据,所以zookeeper可以保证高吞吐和低延时性。

zookeeper_data.png

znode节点的Stat结构体由字段:

两种特殊zode:

znode节点监听:Watches

客户端可以在znode上设置Watch。对znode的修改将触发Watch,然后移除观Watch。Watch被触发时,ZooKeeper向客户端发送一个事件通知。

znode访问控制ACL

znode节点通过 Access Control List (ACL) 控制节点访问权限

3.2 zookeeper集群

zookeeper一般是以集群方式提供服务的,集群中的server互相知道彼此存在,只要集群中一半以上的server处于可用状态,整个zookeeper服务就处于可用状态(因此zookeepr server数一般为2n+1)。zookeeper集群中的server通过选举确定一个leader,其余为follower。

zookeeper_group_meitu_3.png
  1. 为什么需要leader?

    leader作用:解决分布式环境中的一致性问题。zookeeper集群中存在多个server节点,每个节点都能接收处理请求,设想来自两个客户端client1和client2的两个并发请求分别被zookeeper中的server1和server2接收,两个请求设置同一个znode节点数据,client1请求设置该znode节点为a,client1请求设置该znode节点为b,那么最后该znode节点数据是a还是b,leader进行决策。

  2. leader如何选举?

leader默认选举算法:FastLeaderElection

示例:假设有3个节点A/B/C,其都还没有数据,按照sid关系为C>B>A,图中,v(A)表示当前推荐人为A;r[]表示收到的投票集合

leader_meitu_2.png

3.3 zookeeper配置

zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/root/fmm/data/zookeeper
clientPort=2181
server.1=10.20.20.76:2887:3887
server.2=10.20.20.239:2887:3887
server.3=10.20.21.27:2887:3887

参数说明:

3.4 zookeeper session

客户端使用某种语言绑定创建一个到服务的句柄时,就建立了一个ZooKeeper会话。会话创建后,句柄处于CONNECTING状态,客户端库会试图连接到组成ZooKeeper服务的某个服务器;连接成功则进入到CONNECTED状态。通常操作中句柄将处于这两个状态之一。如果发生不可恢复的错误,如会话过期、身份鉴定失败,或者应用显式关闭,则句柄进入到CLOSED状态。下图显式了ZooKeeper客户端可能的状态转换:

session_meitu_1.png

3.5 zookeeper api

zookeeper提供一组很简单的程序接口,它仅支持下面这些操作:

3.6 zookeeper Guarantees

4.zookeeper应用实践-pafa5在线管控平台

pafa5_meitu_1.png

fsg_webii工程举例:

上一篇下一篇

猜你喜欢

热点阅读