Zookeeper的几个概念

ZooKeeper架构
  • client:客户端。从server获取信息,周期性发送数据给server,表示自己还活着。client连接时,server回传ack信息。如果client没有收到reponse,自动重定向到另一个server。

  • server:ZooKeeper集群中的一员,向client提供所有service,回传ack信息给client,表示自己还活着。

  • ensemble:ZooKeeper服务器组,最小节点数是3台主机。

  • leader:leader节点(服务器节点)。如果连接的节点失败,自动恢复,zk服务启动时,完成leader选举。

  • follower:follower节点(服务器节点)。听从leader节点的调度。

image

  • session:会话。Session中的请求以FIFO执行,一旦client连接到server,session就建立了。sessionid分配client。client以固定间隔向server发送心跳,表示session是valid的,zk集群如果在超时时候,没有收到心跳,判定为client挂了,与此同时,临时节点被删除。

  • watches:观察者模式。client能够通过watch机制在数据发生变化时接收通知。client可以在read 节点时设置观察者。watch机制会发送通知给注册的客户端。观察模式只触发一次。session过期,watch机制就被删除。

ZooKeeper节点:znode

下图描绘了用于内存表示的ZooKeeper文件系统的树结构。ZooKeeper节点称为znode。每个znode都由一个名称标识,并由一系列路径(/)分隔。

  • 在图中,有一个以“/”分隔的根znode。在root下,有两个逻辑命名空间config和workers。

    扫描二维码关注公众号,回复: 3126489 查看本文章
  • config 名称空间用于统一管理配置,workers 名称空间用于命名。

  • 在 config 名称空间下,每一个znode最多存储1M的数据,此结构的主要目的是存储同步数据并描述znode的元数据。此结构称为ZooKeeper Data Model。

image

每一个znode在ZooKeeper数据模型中都包含一个 stat 结构。stat 给 znode 提供元数据(metadata)。stat 由 Version number,Action control list (ACL),Timestamp,Data length组成。

  • Version number(版本号):每个znode都有一个版本号,每次与znode关联的数据发生更改时,其对应的版本号就会增加。当多个zookeeper客户端尝试在同一个znode上执行操作时,使用版本号很重要。

  • ACL(动作控制列表): ACL是用于访问znode的认证机制。它管理所有znode的读写操作。

  • Timestamp(时间戳):表示从znode创建和修改起经过的时间。

  • Data length(数据长度): 存储在znode中的数据总量。最多可以在znode中存储1M的数据。

Znodes的类型

znodes 被分为 持久节点(Persistence znode),临时节点(Ephemeral znode),序列节点(Sequential znode)

  • Persistence znode:默认节点,即使客户端关闭,znode也能存活

  • Ephemeral znode:在client活动时有效,断开自动删除。临时节点不能有子节点。

  • Sequential znode:可以是持久节点也可以是临时节点。当新的znode被创建为序列znode时,ZooKeeper通过将10位序列号附加到原始名称后来设置znode的路径。序列znode在锁定和同步中起着重要作用。

ZooKeeper工作流程
  • zk集群启动后,client连接到其中的一个节点,这个节点可以leader,也可以follower。连通后,node分配一个id给client,发送ack信息给client。如果客户端没有收到ack,连接到另一个节点。client周期性发送心跳信息给节点保证连接不会丢失。

  • 如果client读取数据,发送请求给node,node读取自己的数据库,返回节点数据给client.

  • 如果client存储数据,将路径和数据发送给server,server转发给leader。leader再补发请求给所有follower。只有大多数(超过半数:2n + 1)节点成功响应,则写操作成功。
    如果client存储数据,将路径和数据发送给server,server转发给leader。leader再补发请求给所有follower。只有大多数(超过半数)节点成功响应,则写操作成功。

image

leader推选过程
  • 所有节点在同一目录下创建临时序列节点。

  • 节点下会生成/xxx/xx000000001等节点。

  • 序号最小的节点就是leader,其余就是follower。

  • 每个节点观察小于自己节点的主机。(注册观察者)

  • 如果leader挂了,对应主机的znode(节点数据)被删除。

  • 观察者收到通知。推选出节点序号次小的作为leader节点。

参考

猜你喜欢

转载自blog.csdn.net/king123456man/article/details/81738035