在分布式架构中,每一个服务器或者服务之间信息的协调和管理是很是有必要的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经过领导者选举来转移故障,使系统继续运行架构
首先在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的数据模型是由zondes构成的,你能够把zookeeper的数据模型当作是操做系统中的目录结构,每一个目录的文件夹名就是一个zonde,在每一个文件夹(znode)下都有一些存储数据,相似于目录下的文件,可是在zookeeper下这些数据通常很小(1M如下),只是用来存储一些必要信息
每一个zookeeper服务器下都存储了znodes,这也遵循了分布式的原则,由于zookeeper自己也是一个分布式应用,此外每一个zookeeper服务器都维护了一个事务日志(记录的是全部的请求)
在启动一个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服务器的简单介绍谢谢阅读