Zookeeper 分布式协调服务开源项目

1,Zookeeper是什么?

ZooKeeper是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper通过其简单的架构和API解决了这个问题。 ZooKeeper允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。ZooKeeper框架最初是在“Yahoo!”上构建的,用于以简单而稳健的方式访问他们的应用程序。后来,Apache ZooKeeper成为Hadoop,HBase和其他分布式框架使用的有组织服务的标准。

官方文档上这么解释zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

2,树形结构(类似unix文件系统)

每个子目录项如 NameService 都被称作为 znode(目录节点),和文件系统一样,我们能够自由的增加、删除znode,在一个znode下增加、删除子znode,唯一的不同在于znode是可以存储数据的。

有四种类型的znode:

a,PERSISTENT-持久化目录节点

客户端与zookeeper断开连接后,该节点依旧存在

b,PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点

客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号

c,EPHEMERAL-临时目录节点

客户端与zookeeper断开连接后,该节点被删除

d,EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点

客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

3, 监听通知机制

客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端。

4,Zookeeper与客户端


Leader 服务器是整个 ZooKeeper 集群工作机制中的核心,其主要工作有以下两个:

事务请求的唯一调度和处理者,保证集群事务处理的顺序性。

集群内部各服务器的调度者。

从角色名字上可以看出,Follewer 服务器是 ZooKeeper 集群状态的跟随者,其主要工作有以下三个:

处理客户端非事务请求,转发事务请求给 Leader 服务器。

参与事务请求 Proposal 的投票。

参与 Leader 选举投票。

Observer 充当了一个观察者的角色,在工作原理上基本和 Follower 一致,唯一的区别在于,它不参与任何形式的投票。

5,ZooKeeper 特点

顺序一致性:从同一客户端发起的事务请求,最终将会严格地按照顺序被应用到 ZooKeeper 中去。

原子性:所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说,要么整个集群中所有的机器都成功应用了某一个事务,要么都没有应用。

单一系统映像:无论客户端连到哪一个 ZooKeeper 服务器上,其看到的服务端数据模型都是一致的。

可靠性:一旦一次更改请求被应用,更改的结果就会被持久化,直到被下一次更改覆盖。

6,分布式锁的实现
有了zookeeper的一致性文件系统,锁的问题变得容易。锁服务可以分为两类,一个是保持独占,另一个是控制时序。

    对于第一类,我们将zookeeper上的一个znode看作是一把锁,通过createznode的方式来实现。所有客户端都去创建 /distribute_lock 节点,最终成功创建的那个客户端也即拥有了这把锁。厕所有言:来也冲冲,去也冲冲,用完删除掉自己创建的distribute_lock 节点就释放出锁。

    对于第二类, /distribute_lock 已经预先存在,所有客户端在它下面创建临时顺序编号目录节点,和选master一样,编号最小的获得锁,用完删除,依次方便。

7,队列管理

两种类型的队列:

1, 同步队列,当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达。

2,队列按照 FIFO 方式进行入队和出队操作。

第一类,在约定目录下创建临时目录节点,监听节点数目是否是我们要求的数目。

第二类,和分布式锁服务中的控制时序场景基本原理一致,入列有编号,出列按编号。

     终于了解完我们能用zookeeper做什么了,可是作为一个程序员,我们总是想狂热了解zookeeper是如何做到这一点的,单点维护一个文件系统没有什么难度,可是如果是一个集群维护一个文件系统保持数据的一致性就非常困难了

8,Zookeeper客户端常用命令
create /parh data      创建一个名为/path的zNode节点,并包含数据data

    delete /path         删除名为/path的zNode节点

    exists /path         检查是否存在名为/path的zNode节点

    setData /path data     设置名为/path的zNode的数据为data

    getData /path        返回名为/path的zNode节点的数据信息

    getChildren /path      返回所有/path节点的所有子节点列表

  zNode节点还有不同的类型,持久(persistent)节点和临时(ephemeral)节点。持久的zNode,如/path,只能通过调用delete来进行删除,而临时的zNode则与之相反,当创建该节点的客户端崩溃或者关闭了与ZooKeeper服务器的连接时候,这个临时zNode节点就会被删除了。其中临时节点可用于实现分布式锁。

9,集群搭建

Zookeeper 官网下载地址:
https://archive.apache.org/dist/zookeeper/

三台linux系统的ip(安装有java环境):
ip1:192.168.1.201
ip2:192.168.1.202
ip3:192.168.1.203
Zookeeper目录结构如下:

重命名zoo-sample.cfg文件名统一修改为zoo.cfg
vim zoo.cfg

initLimit=10: 对于从节点最初连接到主节点时的超时时间,单位为tick值的倍数。

    syncLimit=5:对于主节点与从节点进行同步操作时的超时时间,单位为tick值的倍数。

    dataDir=/tmp/zookeeper: 用于配置内存数据库保存的模糊快照的目录。即刚刚创建的data文件夹就是在此目录中。文件信息都存放在data目录下。

    clientPort=2181: 表示客户端所连接的服务器所监听的端口号,默认是2181。即zookeeper对外提供访问的端口号。

    server.1=192.168.1.201:2888:3888 (主机名, 心跳端口、数据端口)
    server.2=192.168.1.202:2888:3888
    server.3=192.168.1.203:2888:3888
在zookeeper安装目录下新建data目录并新建myid文件,然后写入对应的编号
在192.168.1.201机器上输入1,保存退出;在192.168.1.202机器上输入2,保存退出;在192.168.1.203机器上输入3,保存退出。这里的1,2,3是与server1,2,3相对应的。

查看防火墙状态,并关闭禁用防火墙
centos7下查看防火墙状态的命令:

      firewall-cmd --state

    关闭防火墙的命令:

      systemctl stop firewalld.service

      systemctl disable firewalld.service (禁止开机启动,永久关闭防火墙)

然后重启三个zookeeper服务:zkServer.sh restart,在zkServer.sh status后发现成功了。

10 ,连接到zookeeper并测试
在命令行中输入:zkCli.sh -server 192.168.1.201:2181 即可连接到其中一台ZooKeeper服务器。其他自动实现同步,客户端只需要和一台保持连接即可。连接成功后,系统会输出ZooKeeper的相关配置信息和相关环境,并在屏幕上输出Welcome to ZooKeeper!等信息

在任意一台上创建节点并关联测试数据,然后在另外一台上查看是否可以看到相关节点保存的数据

原文地址:https://blog.51cto.com/13718210/2369533

时间: 2024-08-29 02:30:04

Zookeeper 分布式协调服务开源项目的相关文章

Hadoop系列之zookeeper(分布式协调服务)安装配置

Hadoop系列之zookeeper(分布式协调服务)安装配置 1.安装cd /root/softtar zxvf zookeeper-3.4.6.tar.gzmv zookeeper-3.4.6 /usr/local/hadoop/zookeeper2.修改配置文件mkdir -p /data/zookeeper/data //3个节点都需要创建此目录cd /usr/local/hadoop/zookeeper/confcp zoo_sample.cfg zoo.cfg#vim zoo.cfg

知识链-分布式协调服务zookeeper

分布式协调服务 Zookeeper zookeeper是一个开源的分布式协调服务.是典型的分布式数据一致性的解决方案. 集群内所有server基于Zab(ZooKeeper Atomic Broadcast)协议进行通信 Zookeeper官网地址: http://zookeeper.apache.org/ Zookeeper官网文档地址:http://zookeeper.apache.org/doc/trunk/index.html 认识ZooKeeper ZooKeeper概述 ZooKee

分布式协调服务Zookeeper原理

CAP理论 C: (Consistency) 一致性 ???????在分布式系统中,数据能够在多个副本之间保持一致的特性.对于有多个副本的分布式系统来说,如果数据在一个节点上进行修改,其他节点尚未同步数据,当在其他节点上读取操作的时候,读取的还是老的数据.这就是分布式数据不一致. ???????在分布式系统中,如果更新一个节点,其他节点的数据也能保证有相应的更新.那么系统被认为具有强一致性. A: (Availability) 可用性 ???????在分布式系统中,可用性指的是系统提供的服务,一

搞懂分布式技术3:初探分布式协调服务zookeeper

搞懂分布式技术3:初探分布式协调服务zookeeper 1.Zookeepr是什么 Zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅,负载均衡,命名服务,分布式协调/通知.集群管理,Master选举,分布式锁和分布式队列等功能. 2.zookeeper可以保证的分布式一致性 a.顺序一致性 从一个客户端发起的事务请求,最终将会严格地按照其发起顺序被应用到zookeeper中去 b.原子性 所有事务请求的处理结果在整个集群中所有机器上的应用情

[转载] zookeeper 分布式锁服务

转载自http://www.cnblogs.com/shanyou/archive/2012/09/22/2697818.html 分布式锁服务在大家的项目中或许用的不多,因为大家都把排他放在数据库那一层来挡.当大量的行锁.表锁.事务充斥着数据库的时候.一般web应用很多的瓶颈都在数据库上,这里给大家介绍的是减轻数据库锁负担的一种方案,使用zookeeper分布式锁服务. zookeeper是hadoop下面的一个子项目, 用来协调跟hadoop相关的一些分布式的框架, 如hadoop, hiv

百度DMLC分布式深度机器学习开源项目(简称“深盟”)上线了如xgboost(速度快效果好的Boosting模型)、CXXNET(极致的C++深度学习库)、Minerva(高效灵活的并行深度学习引擎)以及Parameter Server(一小时训练600T数据)等产品,在语音识别、OCR识别、人脸识别以及计算效率提升上发布了多个成熟产品。

百度为何开源深度机器学习平台? 有一系列领先优势的百度却选择开源其深度机器学习平台,为何交底自己的核心技术?深思之下,却是在面对业界无奈时的远见之举. 5月20日,百度在github上开源了其深度机器学习平台.此番发布的深度机器学习开源平台属于"深盟"的开源组织,其核心开发者来自百度深度学习研究院(IDL),微软亚洲研究院.华盛顿大学.纽约大学.香港科技大学,卡耐基·梅陇大学等知名公司和高校. 通过这一开源平台,世界各地的开发者们可以免费获得更优质和更容易使用的分布式机器学习算法源码,

微服务开源项目ServiceComb

一.微服务开源项目ServiceComb全球最大的开源软件基金会Apache软件基金会(以下简称Apache)于北京时间10月24日宣布Apache ServiceComb 毕业成为Apache 顶级项目.二.有关下载,文档以及参与Apache ServiceComb的方法请访问http://servicecomb.apache.org/https://twitter.com/ServiceComb. 原文地址:http://blog.51cto.com/14042154/2309063

ZooKeeper分布式锁浅谈(一)

一.概述 清明节的时候写了一篇分布式锁概述,里面介绍了分布式锁实现的几种方式,其实那时候我一直沉迷于使用redis的悲观锁和乐观锁来实现分布式锁,直到一个血案的引发才让我重新认识了redis分布式锁的弊端,所以才痛定思痛潜心研究Zookeeper:自己装了三台Centos虚拟机,搭建了ZooKeeper集群.二.ZooKeeper基本概念1.前言 ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现.分布式应用程序可以基于 ZooKeeper 实

ZooKeeper 分布式共享锁的实现

原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/8352919.html ---------------------------------------------------------------------------------------------------------------------------------------------------------- 笔记中提供了大量的代码示例,需要说明的是,大部分代码示例都是本