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 4588 Count The Carries 数位DP || 打表找规律

    2013年南京邀请赛的铜牌题...做的非常是伤心.另外有两个不太好想到的地方.. ..a 能够等于零,另外a到b的累加和比較大.大约在2^70左右. 首先说一下解题思路. 首先统计出每一位的1的个数, ...

  2. CentOs虚拟机能够互相ping通,但无法訪问虚拟机服务

    CentOs虚拟机能够互相ping通,但无法訪问虚拟机服务 虚拟机ip:192.168.0.57 主机 ip:192.168.0.80 在虚拟机上搭建了php环境.虚拟机CentOs,主机win7 虚 ...

  3. C/C++(数据结构栈的实现)

    栈的实现 特点FILO(先进后出) 假设栈的空间为8 top == 0 不能出栈,已到栈底 top == 8 不能入栈,已到栈顶 top始终指向一个待插入的位置 push操作,1.写入数据,2.top ...

  4. 用Vue+axios写一个实时搜索

    刚刚在学vue,试着写了一个实时搜索文件. 思路:1.input 通过v-model绑定.2.通过watch检测输入结果变化.3根据结果变化从api调用不同的数据. 代码如下: <!DOCTYP ...

  5. 深入研究java.lang.ThreadLocal类 (转)

    深入研究java.lang.ThreadLocal类     一.概述   ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是thr ...

  6. 洛谷 P1850 换教室

    P1850 换教室 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n2n 节课程安排在 nn 个时间段上.在第 ii(1 \leq ...

  7. hash_set和hash_map

    1.hash_set集合容器 hash_set利用链式哈希表,进行数据的插入.删除和搜索.与set容器同样,不同意插入反复键值的元素.SGIC++哈希表是一个链式的结构,由表头和一系列单链组成.表头是 ...

  8. android 自己定义状态栏和导航栏分析与实现

    效果 android 4.4之后,系统是支持自己定义状态栏和导航栏的.举个最典型的样例就是bilibiliclient了(iOS版本号和android版本号能用两套全然不一样符合各自系统的设计ui,良 ...

  9. home.pl 正在促销,一些域名免费(终止于2017.4.4)

    home.pl 正在促销,一些域名免费(终止于2017.4.4) home.pl 成立于1997年,是波兰顶尖的互联网服务公司.专注于域名登记,托管网站,保持电子邮件帐户等.  home.pl 正在促 ...

  10. theme- 工作原理

    首先看一下theme中的设置,代码如下 <?xml version="1.0" encoding="utf-8"?> <resources&g ...