分布式协调服务:zookeeper

协调服务的功能

在分布式架构中,每一个服务器或者服务之间信息的协调和管理是很是有必要的java

常见的分布式协调服务有Google的Chubby,Apache的ZooKeeper
由于谷歌的Chubby是不开源的,后来雅虎模仿它开发了zookeeper,并捐赠给Apache,并将其开源供你们使用node

咱们先从zookeeper的几个功能来了解zookeeper
1.名称服务:什么是名称服务?好比DNS将域名映射到一个IP、手机通信录将人命映射到手机号...诸如此类功能就是名称服务,在分布式系统中,zookeeper的名称服务是经过名称来跟踪一些服务器或者服务的运行状态linux

2.分布式锁:在一台机器一个服务上,咱们能够用高并发中学到的对象锁,重入锁等知识,来完成不一样线程对同一资源的顺序调度。那么在分布式架构下,咱们面对的问题要复杂得多,这时候不一样进程对于同一资源的调度,就只能使用分布式锁来完成协调,zookeeper提供一种简单的方式来实现分布式互斥(distributed mutexesapache

3.配置管理:zookeeper经过集中式存储和管理分布式系统的配置,加入加入一个新的服务节点(znode),那么能够当即使用zookeeper的最新配置,也能够经过一个zookeeper客户端来更改集中式配置服务器

4.领导者选举:当分布式系统中一个服务出现故障(好比停机),zookeeper经过领导者选举来转移故障,使系统继续运行架构

zookeeper的安装

首先在linux上安装zookeeper,必须保证linux上装有jdk,由于zookeeper是在jvm上运行的
下载地址:http://www.apache.org/dist/zo...并发

使用wget下载后,
打开解压文件夹,进入到conf文件下,拷贝zoo_sample.cfg副本,命名为zoo.cfg框架

此步骤的缘由是:Zookeeper 在启动时会找zoo.cfg这个文件做为默认配置文件jvm

启动zookeeper(在解压根目录下输入):./bin/zkServer.sh start(关闭stop)
固然为了方便,在etc/profile下添加:分布式

export ZOOKEEPER_HOME=/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin

这样即可直接使用zkServer.sh start启动

zookeeper的UI模型

zookeeper的数据模型是由zondes构成的,你能够把zookeeper的数据模型当作是操做系统中的目录结构,每一个目录的文件夹名就是一个zonde,在每一个文件夹(znode)下都有一些存储数据,相似于目录下的文件,可是在zookeeper下这些数据通常很小(1M如下),只是用来存储一些必要信息

每一个zookeeper服务器下都存储了znodes,这也遵循了分布式的原则,由于zookeeper自己也是一个分布式应用,此外每一个zookeeper服务器都维护了一个事务日志(记录的是全部的请求)

zk客户端与zk服务器的交互

在启动一个zk服务器的时候,咱们先来看下它的配置
默认启动的配置文件在zookeeper/conf/下:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper/data
dataLogDir=/tmp/zookeeper/log
clientPort=2181
#端口2888由对等的zookeeper服务器使用,用于互相通讯
#端口3888用于领导者选举
server.1=106.15.205.155:2888:3888

clientPort是给客户端链接用的端口
dataDir是节点数据存储的目录
dataLogDir是日志输出的目录,不指定的话默认在dataDir下

/tmp/zookeeper/data目录下新建一个文件myid,并存入一个值为1
它对应zoo.cfg中的server.1

server.1=106.15.205.155:2888:3888这行代码中
106.15.205.155是Ip(写本身的)
2888是领导者选举端口
3888是zookeeper服务器间的通讯端口

打开zookeeper服务器(关闭为stop):

zkServer.sh start

打印出如下日志说明zookeeper启动成功:

ZooKeeper JMX enabled by default
Using config: /zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

启动zk客户端:

zkCli.sh

成功链接以后,即可以对zkServer进行节点操做

1.增长节点而且给予success数据:

create /znode1 success

2.查看该zk服务器znode明细:

ls /

3.查看指定节点详情:

get znode1

4.设置节点(好比修改数据:sunnces变为error)

set /znode1 error

5.关闭zkCli:

close

6.删除节点

delete /znode1

一样可使用java代码来实现对zookeeper服务器的操做
可是不少框架已经封装了操做类
若是想要本身实现,推荐使用nio的模型来操做
能够去看下Doug Lea的PPT:Scalable io in java

监听日志

咱们监听的是zookeeper/bin下zookeeper.out日志
由于咱们已经配置了系统环境变量,因此直接在根目录下启动:

tail -f zookeeper.out

以上即是zookeeper服务器的简单介绍谢谢阅读

相关文章
相关标签/搜索