Zookeeper是什么?

服务集群对外提供服务的过程中,有很多的配置需要随时更新,服务间需要协调工作,Zookeeper的出现就是将这些信息推送到各个节点,并且保证信息的一致性和可靠性


zookeeper是一个配置文件管理系统 切记 切记 切记!


Zookeeper是什么?

引用官方的说法:“Zookeeper是一个高性能,分布式的,开源分布式应用协调服务。它提供了简单原始的功能,分布式应用可以基于它实现更高级 的服务,比如同步,配置管理,集群管理,名空间。它被设计为易于编程,使用文件系统目录树作为数据模型。服务端跑在java上,提供java和C的客户端 API”。


Zookeeper总体结构

Zookeeper服务自身组成一个集群(2n+1个服务允许n个失效)。Zookeeper服务有两个角色,一个是leader,负责写服务和数据同步,剩下的是follower,提供读服务,leader失效后会在follower中重新选举新的leader。


Zookeeper逻辑图如下

wKioL1aGjzuyBoUPAAHEED_FFd0308.png

1.客户端可以连接到每个server,每个server的数据完全相同。

2.每个follower都和leader有连接,接受leader的数据更新操作。

3.Server记录事务日志和快照到持久存储。

4.大多数server可用,整体服务就可用


Zookeeper数据模型

Zookeeper表现为一个分层的文件系统目录树结构(不同于文件系统的是,节点可以有自己的数据,而文件系统中的目录节点只有子节点)。


数据模型结构图如下

wKiom1aGj_nTMXzzAACTmxlA8Fk795.png

圆形节点可以含有子节点,多边形节点不能含有子节点。一个节点对应一个应用,节点存储的数据就是应用需要的配置信息。


1、zookeeper中为用保管数据时,使用的是树状结构(类似于目录树)

2、zookeeper的“目录”树中,每一个节点都叫做一个znode 

3、 每一个znode都有自己的path

4、 每一个znode都有自己携带的一份数据(用户的)

5、 每一个znode都有自己的类型:

 a) PERSISTENT                永久的(只要客户端不删除,则永远存在)

 b) PERSISTENT_SEQUENTIAL         永久且有序号的

 c) EMPEMERAL                 短暂的(只要客户端掉线,则会被自动删除)

 d) EMPEMERAL_SEQUENTIAL  短暂且有序号的


znode维护的数据主要是用于存储协调的数据,如状态、配置、位置等信息,每个节点存储的数据量很小,KB级别,最大不要超过1M


Zookeeper 特点

顺序一致性:按照客户端发送请求的顺序更新数据。

原子性:更新要么成功,要么失败,不会出现部分更新。

单一性 :无论客户端连接哪个server,都会看到同一个视图。

可靠性:一旦数据更新成功,将一直保持,直到新的更新。

及时性:客户端会在一个确定的时间内得到最新的数据。


Zookeeper运用场景


1.数据发布与订阅 (我的业务用到这个特性,后面会有详细介绍)

应用配置集中到节点上,应用启动时主动获取,并在节点上注册一个watcher,每次配置更新都会通知到应用。


2.名空间服务

分布式命名服务,创建一个节点后,节点的路径就是全局唯一的,可以作为全局名称使用。


3.分布式通知/协调

不同的系统都监听同一个节点,一旦有了更新,另一个系统能够收到通知。


4.分布式锁

Zookeeper能保证数据的强一致性,用户任何时候都可以相信集群中每个节点的数据都是相同的。一个用户创建一个节点作为锁,另一个用户检测该节点,如果存在,代表别的用户已经锁住,如果不存在,则可以创建一个节点,代表拥有一个锁。


5.集群管理

每个加入集群的机器都创建一个节点,写入自己的状态。监控父节点的用户会受到通知,进行相应的处理。离开时删除节点,监控父节点的用户同样会收到通知。


====================================================================================================================


Zookeeper的核心功能:

1、替客户存取数据

2、为客户提供对数据的监听服务


Zookeeper可以实现的分布式协调服务包括:

1、统一名称服务

wKioL1aGkg2DwTGpAADl1eftNA0745.png

可以加入负载均衡,让action访问哪个服务器

2、配置管理

wKioL1aGnSzBY77qAAA_RT65dcs593.png

理解在做集群管理的时候需要在每台服务器上修改配置文件 如果一台服务器配置文件发生变化集群上的其他服务器也需要跟着一台一台手工更改 ,但是借助zookeeper来管理这些配置文件如果配置文件需要更改只需要更改zookeeper上为我们管理的配置文件即可集群上的所有配置文件都会读取该zookeeper上的配置管理文件,这样就不用一台一台修改服务器上的配置文件了


3.集群节点状态协调(负载均衡/主从协调)

wKioL1aGpAfio4iFAAFdvBAR9bw980.png

主从是借助与zookeeper来自动选举出来的当主服务器挂了后,zookeeper会感知到,然后将该主节点从zookeeper中删除掉,从节点收到通知后,进入选举新的主节点流程


本文出自 “为了手指那个方向” 博客,谢绝转载!

你可能感兴趣的:(it)