Zookeeper是一个高性能,分布式的应用协调服务。

提供服务:

1、集群成员的管理(Group Membership)

2、分布式锁(Locking)

3、选主(Leader Election)

4、同步(Synchronization)

5、发布/订阅(Publisher/Subsriber)

一、数据模型

  • 分层结构
  • 属性结构的中的每个节点叫做Znode
  • 每个Znode都有数据(byte[]类型),也可以有子节点
  • 节点路径: 斜线分割(/zoo/duck);没有相对路径
  • 通过数据结构stat类存储数据的变化,ACL的变化和时间戳
  • 数据发生变化时,版本号递增
  • 可以对Znode中的数据进行读写操作

二、应用场景

1、数据发布/订阅

发布者将数据发布到zk的一个或者一系列的节点上,订阅者进行数据订阅,当有数据变化时,可以及时的得到数据变化的通知。

2、负载均衡

本质是利用zookeeper的配置管理功能,步骤为:
      服务提供者把自己的域名及IP端口的映射注册到zk中
      服务消费者通过域名从zk中获取到对应的IP及端口,这个IP及端口有多个,只是获取其中一个
      当服务这当及时,对于的域名与IP的对于就会减少一个映射

3、命名服务

在分布式系统中,命名服务(Name Service)也就是重要的应用场景,zk命名服务提供的是资源定位,其本质也是通过zk的集中配置管理和查找

4、分布式协调/通知

通过watcher的通知机制实现

分布式锁

分布式事务

5、集群管理

当前集群中的机器数量

集群中机器的运行时状态

集群中节点的上下线操作

集群节点的统一配置

6、Master选举

临时节点

顺序节点

7、分布式锁

排它锁

共享锁

8、分布式队列

FIFO机制

三、Zookeeper的机制

1、集群角色

Leader:为客户端提供读写服务

Follow:提供读服务,所有写服务需要交给Leader角色,参与选举

Observe:提供读服务,不参与选举过程,一般是为了增强zk集群的读请求的并发能力

2、会话(session)

zk的客户端与zk服务器之间的连接

通过心跳检测保持客户端连接的存活度

接受来自服务端的watch事件通知

可以设置超时间

3、数据节点(Znode)

zk树形结构中的数据节点,用于存储数据

持久节点:一旦创建,除非主动调用删除操作,否者一直存储在zk上

临时节点:与客户端的回话绑定,一旦客户端回话消失,这个客户端创建的临时节点都会被移除

SEQUENTIAL Znode:创建节点时,如果设置属性SEQUENTIAL,则会自动在节点名后面追加一个整型数字

4、版本

Version:当前Znode的版本

Gversion:当前Znode的子节点的版本

Aversion:当前Znode的ACL(访问控制)版本

5、Watcher

作用于Znode节点上

多种事件通知:数据更新,子节点状态等

6、ACL(Access Control Lists)权限控制

CREATE:创建子节点的权限

READ:获取节点数据和子节点列表的权限

WRITE:更新节点数据的权限

DELETE:删除子节点的权限

ADMIN:设置节点ACL的权限

其中:CREATE和DELETE是针对子节点的权限控制

四、zookeeper的配置部署(单机配置)

1、配置环境变量

在/etc/profile文件中配置zk的环境变量

  1. export JAVA_HOME=/usr/andy/jdk/jdk1.7.0_79
  2. export ZOOKEEPER_HOME=/usr/andy/zookeeper/zookeeper-3.4.8
  3. export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$ZOOKEEPER_HOME/bin:$PATH
  4. export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar:$ZOOKEEPER_HOME/lib

生效配置:  source /etc/profile

2、zookeeper配置

  1. # The number of milliseconds of each tick
  2. tickTime=2000
  3. # The number of ticks that the initial
  4. # synchronization phase can take
  5. initLimit=10
  6. # The number of ticks that can pass between
  7. # sending a request and getting an acknowledgement
  8. syncLimit=5
  9. # the directory where the snapshot is stored.
  10. # do not use /tmp for storage, /tmp here is just
  11. # example sakes.
  12. dataDir=/usr/andy/zookeeper/zookeeper-3.4.8/data
  13. dataLogDir=/usr/andy/zookeeper/zookeeper-3.4.8/logs
  14. # the port at which the clients will connect
  15. clientPort=2181
  16. # the maximum number of client connections.
  17. # increase this if you need to handle more clients
  18. #maxClientCnxns=60
  19. #
  20. # Be sure to read the maintenance section of the
  21. # administrator guide before turning on autopurge.
  22. #
  23. # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
  24. #
  25. # The number of snapshots to retain in dataDir
  26. #autopurge.snapRetainCount=3
  27. # Purge task interval in hours
  28. # Set to "0" to disable auto purge feature
  29. #autopurge.purgeInterval=1

1、将conf下的zoo_sample.cfg修改配置为zoo.cfg

2、tickTime:默认2000ms,作为基本单元,用它的配属来表示系统内部的时间间隔配置,比如:

2*tickTime是客户端回话的超时时间

1*tickTime是客户端与zk服务器端的心跳时间

dataDir:用于配置存储快照文件的目录,如果没有配置dataLogDir,事务日志也会存储在该目录【需要配置】,一般创建data文件夹

dataLogDir:事务日志母了路径,一般在zookeeper下创建logs文件夹

clientPort:zk的运行端口,默认2181

3、启动与关闭

cd zookeeper-3.4.8/bin

./zkServer.sh  [start|start-foreground|stop|restart|status|upgrade|print-cmd]

  1. [root@localhost bin]# ./zkServer.sh  start
  2. ZooKeeper JMX enabled by default
  3. Using config: /usr/andy/zookeeper/zookeeper-3.4.8/bin/../conf/zoo.cfg
  4. Starting zookeeper ... STARTED
  5. [root@localhost bin]# netstat -anp | grep 2181
  6. tcp6       0      0 :::2181                 :::*                    LISTEN      14562/java
  7. [root@localhost bin]#

启动成功。

五、zookeeper集群的配置

暂略。

zookeeper分布式协调服务的使用一的更多相关文章

  1. ZooKeeper 分布式协调服务介绍

    0. 说明 从自己的独立博客迁移,该部分为 Zookeeper分布式协调服务介绍 原文链接  ZooKeeper 指南 1. ZooKeeper 简介 [官方介绍] ZooKeeper 是一种集中式服 ...

  2. zookeeper 分布式协调服务

    分布式协调服务作用是将多机协调的职责从分布式应用中独立出来,以减少系统的耦合性和增加扩展性. 而zookeeper采用分布式中经典的主从架构:master->slave,通常以动态的存储分布式应 ...

  3. Zookeeper分布式协调服务

    1.zookeeper是一个分布式协调的服务. 2.安装zookeeper的软件的机器,我们称之为zk server 3.zk里面的角色有leader.follower.observer,注意只有一个 ...

  4. 分布式系统理论基础8:zookeeper分布式协调服务

    本文转自 https://www.cnblogs.com/bangerlee/p/5268485.html 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到 ...

  5. 分布式协调服务-Zookeeper

    什么是 zookeeper? Zookeeper 是google的chubby一个开源实现,是hadoop的分布式协调服务 它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名 ...

  6. 分布式协调服务Zookeeper集群之ACL篇

    分布式协调服务Zookeeper集群之ACL篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.zookeeper ACL相关知识概览 1>.zookeeper官方文档(h ...

  7. 分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比

    分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. JMX是用来远程监控Java应用的框架,这个也可以用来监控其他的J ...

  8. 分布式协调服务Zookeeper集群搭建

    分布式协调服务Zookeeper集群搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装jdk环境 1>.操作环境 [root@node101.yinzhengjie ...

  9. 分布式协调服务Zookeeper扫盲篇

    分布式协调服务Zookeeper扫盲篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 身为运维工程师对kubernetes(k8s)可能比较熟,那么etcd(go语言实现)分布式协 ...

随机推荐

  1. HDU——T 1166 敌兵布阵

    http://acm.hdu.edu.cn/showproblem.php?pid=1166 Time Limit: 2000/1000 MS (Java/Others)    Memory Limi ...

  2. 讲的好,php后端模式,php-fpm以及php-cgi, fast-cgi,以及与nginx的关系

    关于cgi是什么,fast-cgi是什么,php-cgi是什么,fast-cgi是什么,下面这篇讲的很清楚: https://segmentfault.com/q/1010000000256516 另 ...

  3. [React] Controlling Form Values with React

    In this lesson we'll talk about controlling the value for inputs, textareas, and select elements. We ...

  4. Android Netroid解析之——断点续传下载及问题修正

    提到Netroid也许非常多人不知道这个框架,但我假设说Volley想必没有人不知道吧. Netroid是一个基于Volley实现的Android Http库.提供运行网络请求.缓存返回结果.批量图片 ...

  5. IOCP模型总结(总结回想)

    IOCP旧代码重提.近期一直在玩其它方面的东东.时不时回想一下,收益多多. IOCP(I/O Completion Port,I/O完毕port)是性能最好的一种I/O模型.它是应用程序使用线程池处理 ...

  6. OJ刷题---猜算式

    题目要求: 输入代码: #include<iostream> using namespace std; void Calc(); int main() { Calc(); return 0 ...

  7. 内网使用 IPV6 之 Chrome 浏览器 扩展程序 篇

    手机端的 Google Chrome 浏览器在打开 "流量节省程序"后,它会通过 Google 的服务器中转流量,这台服务器支持 IPV4 和 IPV6.想在PC端使用类似的&qu ...

  8. vim 帮助文档汉化

    我们在使用vim 的时候,经常会碰到一些陌生的命令,这时候我们可以通过 :help *** 来查询一些命令的使用方法.不过呢,我们安装的vim默认的都是英文的,看起来很费劲,尤其是向我这样英语比较差的 ...

  9. javaweb一

    JavaWeb就是在服务器端以Java语言为解释运行基础的web程序. php代码要想在服务器端运行,需要在服务器软件(通常是Apache)上加php的解释器,Java也一样,但是这个解释器是Tomc ...

  10. cap理论理解

    一个分布式系统里面,节点组成的网络本来应该是连通的.然而可能因为一些故障,使得有些节点之间不连通了,整个网络就分成了几块区域.数据就散布在了这些不连通的区域中.这就叫分区. 当你一个数据项只在一个节点 ...