资讯专栏INFORMATION COLUMN

分布式协调服务:zookeeper

cocopeak / 1136人阅读

摘要:协调服务的功能在分布式架构中,每个服务器或者服务之间信息的协调和管理是非常有必要的常见的分布式协调服务有的,的因为谷歌的是不开源的,后来雅虎模仿它开发了,并捐赠给,并将其开源供大家使用我们先从的几个功能来了解名称服务什么是名称服务比如将域名

协调服务的功能

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

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

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

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

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这个文件作为默认配置文件

启动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服务器的简单介绍
谢谢阅读

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/35903.html

相关文章

  • 可能是全网把 ZooKeeper 概念讲的最清楚的一篇文章

    摘要:的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。具有不可分割性即原语的执行必须是连续的,在执行过程中不允许被中断。 该文已加入开源文档:JavaGuide(一份涵盖大部分Java程序员所需要掌握的核心知识)。地址:https://github.com/Snailclimb... showImg(https:...

    DrizzleX 评论0 收藏0
  • Zookeeper知识点整理

    摘要:当已经超过个心跳的时间也就是长度后服务器还没有收到客户端的返回信息那么表明这个客户端连接失败。 基础篇 1、zookeeper是什么 Zookeeper,一种分布式应用的协作服务,是Google的Chubby一个开源的实现,是Hadoop的分布式协调服务,它包含一个简单的原语集,应用于分布式应用的协作服务,使得分布式应用可以基于这些接口实现诸如同步、配置维护和分集群或者命名的服务。...

    linkFly 评论0 收藏0
  • zookeeper小入门(一)

    摘要:好吧,就是给指定的结点里面称之为提供了统一的名称。分布式锁服务这个特性是最吸引我的特性了,如何实现分布式锁呢,就是使用提供的有序且临时的特性实现。当然详细的可以参照分布式锁避免羊群效应这篇文章,同时写了如何避免羊群效应。 最近想学东西,于是就又拿起前段时间因为没时间而落下的zookeeper啃了起来,第一次啃完教程发现什么都不明白,第二次啃完发现,这东西,就这么简单的东西啊? 先来摘...

    mumumu 评论0 收藏0
  • 如果有人问你ZooKeeper是什么,就把这篇文章发给他。

    摘要:所以,雅虎的开发人员就试图开发一个通用的无单点问题的分布式协调框架,以便让开发人员将精力集中在处理业务逻辑上。在立项初期,考虑到之前内部很多项目都是使用动物的名字来命名的例如著名的项目雅虎的工程师希望给这个项目也取一个动物的名字。 前言 提到ZooKeeper,相信大家都不会陌生。Dubbo,Kafka,Hadoop等等项目里都能看到它的影子。但是你真的了解 ZooKeeper 吗?如...

    suosuopuo 评论0 收藏0

发表评论

0条评论

cocopeak

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<