Zookeeper实战

Zookeeper是干嘛的呢?

ZooKeeper是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper通过其简单的架构和API解决了这个问题。 ZooKeeper允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。

基本架构:

客户端:可以理解成集群成中每一个节点。

服务器:为客户端提供所有的服务,向客户端发送确认码以告知服务器是活跃的。

Ensemble:Zookeeper服务器组,形成Ensemble最少需要3个节点。

Leader:服务器节点,如果任何连接的节点失败,则执行自动恢复。Leader在服务器启动时被选举。

Follower:跟随leader指令的服务器节点。

Zookeeper节点称为znode,每个znode由一个名称标识。

Znode类型:

Znode被分为持久节点persistent,顺序节点sequential和临时节点ephemeral。

Session会话:

会话对于ZooKeeper的操作非常重要。会话中的请求按FIFO顺序执行。一旦客户端连接到服务器,将建立会话并向客户端分配会话ID 

Watches监视:

监视是一种简单的机制,使客户端收到关于ZooKeeper集合中的更改的通知。客户端可以在读取特定znode时设置Watches。Watches会向注册的客户端发送任何znode(客户端注册表)更改的通知。

Zookeeper工作流:

启动时,客户端将连接到zookeeper中集合中的一个节点,主从节点均可。连接后发送分配的会话ID并向该客户端发送确认,一旦连接到节点,客户端将发送心跳确保连接不会丢失。

ZooKeeper集合中的节点:

  • 如果我们有单个节点,则当该节点故障时,ZooKeeper集合将故障。它有助于“单点故障",不建议在生产环境中使用。

  • 如果我们有两个节点而一个节点故障,我们没有占多数,因为两个中的一个不是多数。

  • 如果我们有三个节点而一个节点故障,那么我们有大多数,因此,这是最低要求。ZooKeeper集合在实际生产环境中必须至少有三个节点。

  • 如果我们有四个节点而两个节点故障,它将再次故障。类似于有三个节点,额外节点不用于任何目的,因此,最好添加奇数的节点,例如3,5,7。

写入过程比ZooKeeper集合中的读取过程要贵,因为所有节点都需要在数据库中写入相同的数据。因此,对于平衡的环境拥有较少数量(例如3,5,7)的节点比拥有大量的节点要好。

组件:

写入wirte:写入过程由leader节点处理。

读取read:读取由特定连接的znode在内部执行,因此不需要与集群进行交互。

复制数据库(replicated database):用于在zookeeper中存储数据

Leader:负责处理写入请求的Znode

Follower:follower从客户端接收写入请求,并将它们转发到leader znode。

请求处理器(request processor):只存在于leader节点。它管理来自follower节点的写入请求。

原子广播(atomic broadcasts):负责广播从leader节点到follower节点的变化。

原文地址:https://www.cnblogs.com/pzyin/p/8623575.html