zookeeper介绍

1.zookeeper是什么

Zookeeper是一个开源的分布式协调服务,可以用于管理和协调大型分布式系统中的各种数据和资源,是一个典型的分布式数据一致性解决方案。它提供了一个简单的分层命名空间,可以用于数据同步、存储配置信息、命名服务、分布式锁、队列等。Zookeeper还提供了高可用性、高性能、实时性和可靠性等特性,这些特性使得它成为了构建分布式应用程序的重要基础设施之一,在一些项目中和nacos一样用来作为注册中心使用

2.zookeeper的作用

分布式配置管理:Zookeeper可以用于存储和管理分布式应用程序的配置信息,例如数据库连接信息、缓存配置、日志级别等。应用程序可以从Zookeeper中读取配置信息,从而实现配置的集中管理和动态更新

命名服务:Zookeeper可以用于存储和管理分布式系统中的各种命名服务,例如服务发现、服务注册、服务路由等。应用程序可以通过Zookeeper获取服务的地址和状态信息,从而实现服务的动态发现和路由

分布式锁:Zookeeper可以用于实现分布式锁,从而保证在分布式环境中的互斥访问。应用程序可以使用Zookeeper来获取锁和释放锁,从而实现对共享资源的互斥访问

分布式队列:Zookeeper可以用于实现分布式队列,从而实现任务的异步处理和负载均衡。应用程序可以使用Zookeeper来添加任务和获取任务,从而实现任务的分发和处理

3.zookeeper的优势

分布式协调:Zookeeper可以用于管理和协调大型分布式系统中的各种数据和资源,例如配置信息、命名服务、分布式锁、队列等。它提供了一个简单的分层命名空间,可以让应用程序在分布式环境中进行协调和通信

高可用性:Zookeeper采用了主从架构,可以在集群中选举一个Leader节点,其他节点作为Follower节点。如果Leader节点出现故障,Zookeeper可以自动选举一个新的Leader节点,从而保证系统的高可用性

高性能:Zookeeper使用内存数据库来存储数据,可以快速地读取和写入数据。此外,Zookeeper还使用了Watches机制,可以在数据发生变化时通知客户端,从而减少了客户端的轮询次数,提高了系统的性能

实时性:Zookeeper可以实时地监控和响应数据变化,可以让应用程序在分布式环境中实时地做出响应

可靠性:Zookeeper使用了多数派投票机制,可以保证数据的一致性和可靠性。如果Zookeeper集群中的节点数小于一半,集群将无法正常工作,从而避免了数据的不一致性问题

4.集群状态与角色

角色

Leader节点:在Zookeeper集群中选举出的Leader节点,负责协调和处理客户端的请求,以及管理集群的状态和配置信息

Follower节点:Zookeeper集群中的非Leader节点,负责接收客户端请求并将请求转发给Leader节点处理

Observer节点:Zookeeper集群中的非Leader节点,类似于Follower节点,但是不参与投票和Leader选举,只接收并转发请求

状态

LOOKING:节点正在寻找Leader节点,即参与Leader选举

FOLLOWING:节点正在跟随Leader节点,即接收并转发请求

LEADING:节点是Leader节点,即负责协调和处理客户端的请求

OBSERVING:节点是Observer节点,即只接收并转发请求,不参与投票和Leader选举

在正常情况下,Zookeeper集群中应该有一个Leader节点和多个Follower节点或Observer节点,从而保证集群的高可用性和可靠性

5.数据同步

在Zookeeper集群中,数据的同步是非常重要的,因为数据的一致性和可靠性是Zookeeper的核心特性之一。Zookeeper使用了Zab协议来保证数据的一致性和可靠性,Zab协议分为两个阶段:

Leader选举阶段:在这个阶段,Zookeeper集群中的节点会通过投票的方式选举出一个Leader节点,Leader节点负责协调和处理客户端的请求,并将数据同步给Follower节点

数据同步阶段:在这个阶段,Leader节点会将更新的数据发送给Follower节点,Follower节点接收并应用这些数据,从而保证数据在整个集群中的一致性和可靠性

数据同步的过程中,Zookeeper使用了Watches机制来实现数据的实时通知。当数据发生变化时,Zookeeper会通知客户端,客户端可以根据通知来更新数据或做出其他响应。Watches机制可以减少客户端的轮询次数,提高系统的性能和效率

6.数据持久化

在Zookeeper中,数据的持久化是非常重要的,因为数据的持久化可以保证数据在Zookeeper集群宕机或重启后不丢失。Zookeeper支持两种数据持久化方式:

快照(Snapshot):快照是Zookeeper中所有节点数据的镜像,包括节点的名称、值和版本号等信息。Zookeeper会定期生成快照文件,快照文件的命名格式为“snapshot.”,其中表示Zookeeper事务ID。快照文件可以通过配置文件中的“dataDir”参数指定存储路径

事务日志(Transaction Log):事务日志是Zookeeper中所有节点数据的更新记录,包括节点的创建、删除、更新等操作。Zookeeper会将每个事务记录到事务日志文件中,事务日志文件的命名格式为“log.”,其中表示Zookeeper事务ID。事务日志文件可以通过配置文件中的“dataLogDir”参数指定存储路径

在Zookeeper集群启动时,它会先加载快照文件,然后再逐个加载事务日志文件,从而恢复所有节点的数据和状态。同时,Zookeeper还会定期生成快照文件和清理过期的事务日志文件,从而保证数据的一致性和可靠性

7.数据写入过程

1.客户端向 ZooKeeper 发送写请求

2.ZooKeeper 接收到请求后,会将数据写入内存中的数据结构中,同时返回一个“成功”响应给客户端

3.ZooKeeper 会将写请求转发给集群中的其他服务器进行数据同步。当大多数服务器都完成数据同步后,该写操作才会被认为是成功的

4.如果 ZooKeeper 集群中的某个服务器出现故障,导致数据同步失败,那么该服务器会被自动剔除出集群。同时,ZooKeeper 会自动选举一个新的 Leader 服务器来负责数据同步

需要注意的是,ZooKeeper 保证了数据的强一致性,即任何时刻,任何一个客户端读取到的数据都是最新的。这得益于 ZooKeeper 内部采用了 Paxos 算法来保证数据的一致性

8.节点恢复

当zookeeper集群中的leader节点挂掉时,集群中的follower节点会重新投票选举新的leader节点,老的leader节点恢复后会降级为follower节点,先加载本地的数据文件,包括数据快照和事务日志。数据快照是Zookeeper中所有节点数据的镜像,事务日志是Zookeeper中所有节点数据的更新记录,在本地数据加载完成后,老节点会从Leader节点中获取最新的数据,并将其同步到本地。在数据同步过程中,老节点会使用Zab协议来保证数据的一致性和可靠性,在数据同步完成后,老节点会将本地数据和Leader节点中的数据进行比较和合并,从而恢复数据的一致性和可靠性

需要注意的是,老节点在进行数据同步和状态恢复的过程中,它的角色和状态可能会发生变化。如果老节点之前是Leader节点,它会重新参与Leader选举;如果老节点之前是Follower节点或Observer节点,它会重新接收并转发客户端请求。同时,如果老节点之前注册过Watches,它也需要重新注册Watches,从而实现数据的实时通知

总之,在老节点宕机恢复后,它需要先加载本地的数据文件,然后再同步Leader节点的最新数据,最后进行数据恢复和状态恢复

你可能感兴趣的:(zookeeper,java-zookeeper,zookeeper,java,服务发现)