zookeeper分布式协调服务的使用一
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的环境变量
- export JAVA_HOME=/usr/andy/jdk/jdk1.7.0_79
- export ZOOKEEPER_HOME=/usr/andy/zookeeper/zookeeper-3.4.8
- export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$ZOOKEEPER_HOME/bin:$PATH
- export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar:$ZOOKEEPER_HOME/lib
生效配置: source /etc/profile
2、zookeeper配置
- # The number of milliseconds of each tick
- tickTime=2000
- # The number of ticks that the initial
- # synchronization phase can take
- initLimit=10
- # The number of ticks that can pass between
- # sending a request and getting an acknowledgement
- syncLimit=5
- # the directory where the snapshot is stored.
- # do not use /tmp for storage, /tmp here is just
- # example sakes.
- dataDir=/usr/andy/zookeeper/zookeeper-3.4.8/data
- dataLogDir=/usr/andy/zookeeper/zookeeper-3.4.8/logs
- # the port at which the clients will connect
- clientPort=2181
- # the maximum number of client connections.
- # increase this if you need to handle more clients
- #maxClientCnxns=60
- #
- # Be sure to read the maintenance section of the
- # administrator guide before turning on autopurge.
- #
- # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
- #
- # The number of snapshots to retain in dataDir
- #autopurge.snapRetainCount=3
- # Purge task interval in hours
- # Set to "0" to disable auto purge feature
- #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]
- [root@localhost bin]# ./zkServer.sh start
- ZooKeeper JMX enabled by default
- Using config: /usr/andy/zookeeper/zookeeper-3.4.8/bin/../conf/zoo.cfg
- Starting zookeeper ... STARTED
- [root@localhost bin]# netstat -anp | grep 2181
- tcp6 0 0 :::2181 :::* LISTEN 14562/java
- [root@localhost bin]#
启动成功。
五、zookeeper集群的配置
暂略。
zookeeper分布式协调服务的使用一的更多相关文章
- ZooKeeper 分布式协调服务介绍
0. 说明 从自己的独立博客迁移,该部分为 Zookeeper分布式协调服务介绍 原文链接 ZooKeeper 指南 1. ZooKeeper 简介 [官方介绍] ZooKeeper 是一种集中式服 ...
- zookeeper 分布式协调服务
分布式协调服务作用是将多机协调的职责从分布式应用中独立出来,以减少系统的耦合性和增加扩展性. 而zookeeper采用分布式中经典的主从架构:master->slave,通常以动态的存储分布式应 ...
- Zookeeper分布式协调服务
1.zookeeper是一个分布式协调的服务. 2.安装zookeeper的软件的机器,我们称之为zk server 3.zk里面的角色有leader.follower.observer,注意只有一个 ...
- 分布式系统理论基础8:zookeeper分布式协调服务
本文转自 https://www.cnblogs.com/bangerlee/p/5268485.html 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到 ...
- 分布式协调服务-Zookeeper
什么是 zookeeper? Zookeeper 是google的chubby一个开源实现,是hadoop的分布式协调服务 它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名 ...
- 分布式协调服务Zookeeper集群之ACL篇
分布式协调服务Zookeeper集群之ACL篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.zookeeper ACL相关知识概览 1>.zookeeper官方文档(h ...
- 分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比
分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. JMX是用来远程监控Java应用的框架,这个也可以用来监控其他的J ...
- 分布式协调服务Zookeeper集群搭建
分布式协调服务Zookeeper集群搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装jdk环境 1>.操作环境 [root@node101.yinzhengjie ...
- 分布式协调服务Zookeeper扫盲篇
分布式协调服务Zookeeper扫盲篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 身为运维工程师对kubernetes(k8s)可能比较熟,那么etcd(go语言实现)分布式协 ...
随机推荐
- spring set注入
上篇文章说到了构造器注入.可是有时候构造器注入并非非常好用,如今来看下set注入. 构造器注入博客地址:http://blog.csdn.net/luckey_zh/article/details/4 ...
- es67
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Python 面向对象与 C++、Java 的异同
1. 子类是否自动调用父类的构造方法 C++.Java 会在子类对象的构造中自动首先调用父类的构造: Python 则相对啰嗦一点: 如果子类不覆盖父类的__init__()方法,则子类默认将执行与父 ...
- Entity Framework的原理及使用方式
ADO.NET Entity Framework操作数据库的过程对用户是透明的(当然我们可以通过一些工具或方法了解发送到数据库的SQL语句等).我们唯一能做的是操作EDM,EDM会将这个操作请求发往数 ...
- Kinect 开发 —— 骨骼追踪进阶(上)
Kinect传感器核心只是发射红外线,并探测红外光反射,从而可以计算出视场范围内每一个像素的深度值.从深度数据中最先提取出来的是物体主体和形状,以及每一个像素点的游戏者索引信息.然后用这些形状信息来匹 ...
- 获取session中存储的所有值的方法
记录一个获取系统中session存储的对象都有哪些的方法 HttpSession session = request.getSession(); for ( Enumeration e = sessi ...
- 修改url中某个参数
function changeURLArg(url,arg,arg_val){ var pattern=arg+'=([^&]*)'; var replaceText=arg+'='+arg_ ...
- canvas:画布
画布有默认宽度,如果要自己设置宽带要写在属性上 列: <canvas id = "myCanvas" width = "600" height = &qu ...
- JAVA使用YUI压缩CSS/JS
前言 JS/CSS文件压缩我们经常会用到,可以在网上找在线压缩或者本地直接使用,我这里使用的是yahoo开源组件YUI Compressor.首先介绍一下YUI Compressor,它是一个用来压缩 ...
- [置顶]
Docker学习总结(1)——Docker实战之入门以及Dockerfile(一)
一.Docker是什么? 首先Docker是软件工业上的集装箱技术 回顾,在没有集装箱出现以前,传统运输行业中,会存在这些问题: 在运输过程中,货物损坏 装卸.运输货物,效率低下 运输手续繁多及运输环 ...