大数据技术:Zookeeper分布式协调服务

1 Zookeeper概念简介

Zookeeper是一个分布式协调服务,就是为用户的分布式应用程序提供协调服务

A、  zookeeper是为别的分布式程序进行服务的

B、 zookeeper本身就是一个分布式应用程序(只有半数以上的节点存活2zk就能正服务)

C、 Zookeeper所提供的服务涵盖:主从协调、服务器节点状态上下线、统一配置管理、分布式共享锁、同一名称服务………..

D、  虽然说可以提供各种服务,但是zookeeper在底层其实只使用两个功能

管理(存储、读取)用户提交的数据

并且为数据提供节点监听的服务;

一.可以利用上面两个功能做到分布式系统的高可用:

在下面这个系统中,采集程序是分布式的。由于采集程序所在的节点会随时随地的发送系统故障,导致整个分布式系统不可用。所以必须为整个系统提高一种高可用的解决方案。

首先每个采集程序都需要向第三方组件注册自己的信息,并且每隔一段时间必须把这个状态进行更新。比如说第一个采集程序注册了信息/servers/server1,第二个采集程序注册了信息/servers/server2。并且这个第三方组件还能够提供监听功能,能够监听/servers节点,如果采集程序挂掉后。第三方组件能够监听到这个节点的变化,并且能够通知其他系统中的采集程序接管这个采集程序上的消息。


二.服务器主从选举场景:

在一个系统中有这样一个场景,服务程序为客户端程序提供各种各样的服务。但是存在服务程序由于各种原因,导致服务程序所在的机器挂掉,导致整个系统不可用。所以必须为整个系统提供一种高可用的解决方案。首先每个服务程序需要向第三方组件进行注册,比请求每隔一段时间必须把这个状态进行更新。客户端程序可以通过访问这个第三方组件找到Master,然后请求Master服务器程序。第三方组件能够监听/Servers节点的状态,如果发现Master状态不可用,然后进行选举。选举新的服务程序称为Master


三.配置管理使用场景


利用第三方托管管理分布式程序的配置信息


Zookeeper集群的角色:Leaderfollower(Observer)

只要集群中有半数以上节点存活,集群就能提供服务

2 Zookeeper集群机制

半数机制:集群中半数以上的集群存活,集群可用

Zookeeper适合在奇数台机器上部署!!!


3       Zookeeper 数据更新和访问机制

PAXOS 现有的分布式一致性算法

ZOOKEEPER没有之间使用PAXOS算法,而是使用自己开发的Zab算法。

目前从图中可以看出,图中有三个Zookeeper节点,其中有一个是leader,其他两个是follower。当client向其中一个follower更新数据时,首先数据会被follower发送到Zookeeper集群中的leader节点,然后leader节点进行数据更新。然后leader节点广播这个数据到其他follower节点进行数据同步更新。最终整个Zookeeper集群同步完成后,达到最终一致性。

如果在Zookeeper数据同步更新的时候,有客户端client对某个Zookeeper节点进行数据访问,这个时候就会造成数据读取历史数据,而不是最新数据。因为从leader同步过来的数据还没完全同步成功。如果是对zk进行读取操作,读取到的数据可能是过期的旧数据,不是最新的数据。数据读操作可以由任意服务器节点提供,如果不是Lead节点,读操作本身不保证数据是最新的,但是可以通过一个Sync(大概就是一个空的写操作)+read的模式来实现对最新数据的读取。

4 Zookeeper 结构和命令

4.1 Zookeeper 特性

4.2 Zookeeper 数据结构

1.      层次化的数据结构,命名符合常规的文件系统规范(见下图)

2.      每个节点在zookeeper中叫做znode,并且其中有唯一的路径标识

3.      节点znode可以包含数据和子节点(但是EPHEMERAL类型的节点不能有子节点,下一页详解)

4.      客户端应用可以在节点上设置监视器。

4.3 Zookeeper 数据结构的图


4.4 节点类型

1、 Znode 有两种类型:

短暂(ephemeral)断开连接后自己删除

持久(persistent)断开连接不删除

2、 Znode有四种形式的目录节点(默认时Persistent)

PERSISTENT

PERSISTENT_SEQUENTIAL (持久序列 /test0000000000019)

EPHEMERAL

EPHEMERAL_SEQUENTIAL

4.5 Zookeeper 命令操作

1.      使用ls查看当前zookeeper中所包含的内容

2.      创建一个新的node,使用 create /zkmydata。这个命令创建一个新的znode节点”zk” 以及它关联的字符串

create /zk “mydata”

3.      运行get命令来确认znode 是否包含我们所创建的字符串

get /zk

4.      通过set命令来对zk所关联的字符串进行设置

set /zk “zsl”

5.      将刚才创建的znode删除

delete /zk

6.      删除节点:rmr (递归删除)

rmr /zk

5 Zookeeper 监听器(Watcher)原理

Main线程里面启动zkClient客户端程序。zkClient中有两个子线程,一个线程时connect线程用来通信和zookeeper集群做数据通信。另外一个线程时Listener,用来接受zookeeper集群发来的响应通知,并且调用程序中的监听方法process方法。当zkClinet调用getChildern(“/”,true) 注册监听器时。这个时候zkClient就会在zookeeper集群中注册信息,包括客户端clientip和客户端端口 port 以及监听的数据节点路径/path。如果zookeeper发现监听的/path路径发送改变,zookeeper集群通过注册信息找到clientip。Zookeeper发送数据到客户端Listener 服务器监听程序。然后客户端Listener线程调用回调函数process方法。

Listener线程和Connect线程都是守护线程,主程序退出后,守护线程也退出。

6 Zookeeper 应用程序

6.1 高可用分布式服务器

猜你喜欢

转载自blog.csdn.net/qq_21125183/article/details/80585021