zookeeper架构以及简单应用
在之前的文章中,我们了解到了zookeeper的一些入门条件和zookeeper能做什么,传送门:ZooKeeper入门,今天来说说zookeeper的架构和利用zookeeper实现一些简单的协同服务。
1.Zookeeper架构
1.3 Zookeeper常见概念
1.3.1 Znode
Znode是Zookeeper的数据存放的节点,它可以是临时的,可以是永久的,可以是顺序的,可以是临时顺序的,可以是永久顺序的。每一个Znode都带有一个版本号,这个版本号是从0开始的。
1.3.2 Session
Session是zookeeper的Client端和Server端通信的TCP长连接,客户端建立连接之前,会创建一个sessionID,这个sessionID是在集群中唯一的标志,不能重复。
1.3.3 Watcher
Wathcer像是一个监听器一样东西,可以绑定在Zookeeper的Server端上,这样,Server端如果有什么消息都会通知到client端。
1.2 Zookeeper架构分析
zookeeper的架构是一个client-server端,zookeeper会有一个提供服务的server端和一个可供操作server的client端,我们可以通过client端来对zookeeper进行操作。利用java应用可以初始化一个zookeeper的客户端,这样就可以对zookeeper进行操作。zookeeper提供了两种模式:一种是单机的zookeeper,另一种是集群版的zookeeper,稍后我们会对集群版的zookeeper详细搭建。
1.3 Zookeeper图解架构
2.利用zookeeper实现简单的分布式协同服务
2.1 实现一个组成员管理(master-worker模型)
2.1.1 设计需求
设计一个master-worker的组成员管理系统,要求只能有一个master服务,这个master服务可以实时监听到每个worker的服务情况
2.1.2 实现步骤
首先我们要保证系统里只有一个master服务,剩下的服务为workers服务。先启动一个client端,./zkCli.sh
,我们在这个client端上创建一个临时节点/master,这个节点的值为m1:2223
create -e /master "m1:2223"
然后我们再开一个client端,在另外一个client端同样我们创建一个节点/master,值为m2:2223。我们可以看到创建失败,然后我们在这个节点上创建一个监听,监听这个节点的变化和状态。
stat -w /master
当我们第一个创建的临时节点的zookeeper客户端crash或者宕掉了,第二个客户端就可以同步发现这个节点已经更改并且可以再次重新创建节点。
//第一个客户端挂掉
quit
这个时候再执行创建节点就可以创建成功了
以上是我们保证这个系统里面只有一个master,然后我们在这个master下创建多个worker,这些worker都是属于workers的子节点。由于临时节点不能有子节点,所以我们的workers是一个永久性的节点。
//master
ls -w /workers
//workers
create /workers
create -e /workers/w1 "w1:6379"
同样的方法我们创建w2节点,表示w2的存在
这样在master那一端就会同步收到监听的信息
当workers进行了一些增加节点或者删除节点的时候,master的服务都会收到一个通知,这时再去看workers里面的节点情况就能看到即使的节点信息。
3.总结
这篇文章说的是zookeeper的架构以及实现一个master-worker的协同服务,下一篇说一说Zookeeper集群的搭建。