Zookeeper分享
Zookeeper:
是一个分布式的,为分布式应用提供数据一致性服务的程序.
Zookeeper是怎么来的?
分布式系统:是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。
在这个消息传递的过程中遇到的问题:传输中数据被篡改,数据丢失处理,数据超时处理,数据的事务控制,可以统称为数据的一致性问题.
解决分布式系统中数据传输的一致性问题的理论基础:CAID,CAP(一致性,可用性,分区容错性),BASE等一致性方面的理论
结合理论基础,演变出分布式数据一致性协议算法,如2PC,3PC,Raft ,Paxos算法等.
解决消息传递过程中的两个问题:
1,消息传递中的消息篡改,消息容错机制
拜占庭将军问题:
拜占庭帝国有许多支军队,不同军队的将军之间必须制定一个统一的行动计划,从而做出进攻或者撤退的决定,同时,各个将军在地理上都是被分隔开来的,只能依靠军队的通讯员来进行通讯。然而,在所有的通讯员中可能会存在叛徒,这些叛徒可以任意篡改消息,从而达到欺骗将军的目的。
解决方式:比如系统中的数字签名,数据加密
2,消息在分布式中的数据一致性问题
故事描述一致性遇到的问题:
在古希腊有一个Paxos小岛,岛上以议会的形式通过法令。议会中的议员通过信使传递消息,议员和信使都是兼职的,随时可能离开议会厅,并且信使可能重复投递消息,也可能一去不返。议会协议要保证在这种情况下法令仍然能够正确的产生,并且不会出现冲突。
故事来自于Paxos算法论文,该论文通篇用故事的形式讲述了小岛议会是如何解决这个问题的.
基于算法的应用实践:
Google Chubby:分布式锁服务,以Paxos算法为基础
雅虎 ZooKeeper: 分布式协调服务 , 以ZAB算法为基础
Zookeeper介绍
官网:http://zookeeper.apache.org/
源码地址: https://github.com/apache/zookeeper
Zookeeper提供的特性:
1, 顺序一致性 :同一个客户端连续的请求能够被ZooKeeper顺序的处理,尤其是写命令的顺序执行
2, 原子性 :Zookeeper集群上的数据操作具有原子性
3, 单一视图 :Zookeeper集群上的数据一致
4, 可靠性:保证被修改的数据持久不变,提供了数据的可靠性
5, 实时性:Zookeeper仅仅能保证最终一致性,而不是实时的(CAP定理)
Zookeeper的几个基本概念:
1, 集群:zookeeper采用leader(写),follower(读,推举leader),observer(读)的方式实现集群
2, 会话:客户端与zookeeper的连接会话
3, 数据节点:树形结构的节点,每个节点可以存储信息
4, 版本:每个节点维护的版本信息
5, 事件监听器:可以为用户在节点上注册事件,节点改动触发注册的事件(监听者模式)
6, ACL:权限控制,控制节点操作访问的权限
应用场景:
在分布式的场景中,Zookeeper可应用于数据发布/订阅,负载均衡,命名服务,分布式协调/通知,集群管理等。
Zookeeper使用
下载地址:http://zookeeper.apache.org/releases.html
要求:
JAVA1.6+
系统多平台支持
目录解释
支持三种模式:单机模式,集群模式,伪集群模式
配置文件:
tickTime= : 服务器或者客户端与服务器之间维持心跳的时间间隔 dataDir=/var/lib/zookeeper : 数据存放目录 clientPort= : 监听的端口 dataLogDir=E:\\test-tool\\zookeeper-3.4.\\log : 日志目录 集群相关配置 initLimit= : 集群初始化连接超时时间 syncLimit= :集群心跳超时时间 server.=127.0.0.1:: server.=127.0.0.2::
IP:程序通讯监听端口:选举端口
当使用集群模式时
在DataDir目录下创建myid文件,里面是集群编号
单机模式配置:
tickTime= dataDir=/var/lib/zookeeper clientPort= dataLogDir=E:\\test-tool\\zookeeper-3.4.\\log initLimit= syncLimit= server.=127.0.0.1::
集群模式配置:
tickTime= dataDir=/var/lib/zookeeper clientPort= dataLogDir=E:\\test-tool\\zookeeper-3.4.\\log initLimit= syncLimit= server.=127.0.0.1:: server.=127.0.0.2::
伪集群模式配置:
tickTime= dataDir=/var/lib/zookeeper clientPort= dataLogDir=E:\\test-tool\\zookeeper-3.4.\\log initLimit= syncLimit= server.=127.0.0.1:: server.=127.0.0.1:: //多进程运作
启动方式有两种:
1, bin脚本
2, jar包Main方法
命令解释:
zkCleanup:清理ZooKeeper历史数据,包括shiwu日志文件和快照数据文件
zkCli:ZooKeeper的一个简易客户端,可以做一些简易操作
zkEnv:设置ZooKeeper的环境变量
zkServer:ZooKeeper服务器的启动,停止和重启脚本
启动:zkServer.Sh
停止:zkServer.sh stop
客户端连接:zkCli –server ip:port
zkCli操作Zookeeper基本命令:
(1)创建节点
Create [-s] [-e] path data acl
-s顺序 -e临时节点 path节点路径和名称 data节点存储的数据 acl权限控制
(2)列出节点列表
ls path [watch]
path节点路径和名称 watch事件监听器
(3)查看节点数据和信息
get path [watch]
(4)设置节点数据
get path data [version]
(5)删除
Delete path [version]
查看日志
基于Zookeeper API的开发提供了更加丰富的接口,如创建会话,创建节点,删除节点,读取数据,更新数据,检测节点是否存在,权限控制,事件监听等
对zookeeper API封装的工具,他们提供了更方便的调用方式:
Zkclient:地址https://github.com/sgroschupf/zkclient
Curator:地址https://github.com/Netflix/curator
Dubbo如何在zookeeper上工作

Zookeeper在Dubbo的整个体系中充当服务注册中心的作用.
通常的服务注册中心可以有多种形式去实现,比如:数据库,zookeeper,redis,文件系统等
Dubbo数据信息在Zookeeper中的存储方式:

/dubbo dubbo根节点
/dubbo/com.foo.BarService 服务节点
/dubbo/com.foo.BarService/providers 提供者根节点
/dubbo/com.foo.BarService/consumers 消费者根节点
1,服务提供者
在/dubbo/com.foo.BarService/providers节点下创建提供者节点
2,服务消费者
在/dubbo/com.foo.BarService/consumers节点下创建提供者节点
注册与消费过程:
1,dubbo服务提供者启动,向Zookeeper上的提供者根节点下创建服务提供临时节点,包括地址类型等信息
2,dubbo服务消费者启动,向Zookeeper请求服务提供列表,并向服务消费根节点下创建消费者临时节点
3,启动dubbo监控中心,向Zookeeper中获取提供者与消费者的节点列表,并在节点上注册事件监听器进行变化监控.
Zookeeper分享的更多相关文章
- Zookeeper技术分享
内容整理自组内分享PPT 一.概述 ZooKeeper 遵循一个简单的客户端-服务器模型,其中客户端 是使用服务的节点(即机器),而服务器 是提供服务的节点.ZooKeeper 服务器的集合形成了一个 ...
- 一直对zookeeper的应用和原理比较迷糊,今天看一篇文章,讲得很通透,分享如下(转)
本文转自http://blog.csdn.net/gs80140/article/details/51496925 一直对zookeeper的应用和原理比较迷糊,今天看一篇文章,讲得很通透,分享如下: ...
- zookeeper 实战案例分享:cruator客户端编程
上两篇介绍了zookeeper服务器端的安装和配置,今天分享下利用zookeeper客户端编程来实现配置文件的统一管理,包括文件添加.删除.更新的同步. 比如,连接数据库信息的配置文件,一般每个应用服 ...
- 分享java常用技术教程:dubbo、zookeeper、ActiveMq、多线程、Redis、PowerDesigner等
游戏是自己整理的邮箱来源于网上,下面是我的有道云的分享地址: https://note.youdao.com/share/?id=c5f258fa9efd1b28b2d8f0d37e59b194&am ...
- 【原创】大叔问题定位分享(4)Kafka集群broker节点从zookeeper上消失
kafka_2.8.0-0.8.1 一 现象 生产环境一组kafka集群经常发生问题,现象是kafka在zookeeper上的broker节点消失,此时kafka进程和端口都在,然后每个broker都 ...
- Zookeeper笔记分享
Zookeeper采用zap协议来保证数据的一致性 常见的数据一致性协议采用raft协议 参数解读: tickTime=2000:心跳包发送间隔时长 initLimit=10:leader与fol ...
- 【很好的分享】zookeeper系列
http://blog.csdn.net/tswisdom/article/details/41522069
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- [资料分享]dubbo视频教程流行版
一.基础篇 第001节–课程介绍 第01节–使用Dubbo对传统工程进行服务化改造的思路介绍 第02节–使用Dubbo对传统工程进行服务化改造 第03节–ZooKeeper注册中心安装 第04节–使用 ...
随机推荐
- 如何开发auto complete 智能提示功能
目录(?)[+] 如何开发auto complete 智能提示功能 最近网上好像流传用redis实现,其实智能提示和用什么存储关系不大 07年,我过一个类似的项目 我有几千个名字,随着用户在输入框中不 ...
- MSA2312 enclosure 闪断后
故障描述:由于电源原因,导致整个扩展柜闪断,硬盘全部为leftover状态. 存储划分配置:之前满配的一套MSA2312,划分为4个vd,后面两个vd无影响,前面2个VD都是一半在1号柜子,一半在2号 ...
- eclipse package,source folder,folder差别及相互转换
在eclipse下, package, source folder, folder都是目录. 它们的差别例如以下: package:当你在建立一个package时,它自己主动建立到source ...
- opencv 训练自己的分类器汇总
原地址:http://www.cnblogs.com/zengqs/archive/2009/02/12/1389208.html OpenCV训练分类器 OpenCV训练分类器 一.简介 目标检测方 ...
- Android周报
Android周报 原文 http://www.race604.com/android-weekly-25/ 文章/教程 使用 Kotlin 开发 Android 应用系列 看起来用 Kotli ...
- POJ 3340 & HDU 2410 Barbara Bennett's Wild Numbers(数学)
题目链接: PKU:http://poj.org/problem?id=3340 HDU:http://acm.hdu.edu.cn/showproblem.php?pid=2410 Descript ...
- Extjs4.2 Desktop 拖动黑色和白色的桌面图标的解决方案
最近做了一个extjs4.2的desktop桌面demo,该desktop从原来的包中剥离出来,并实现了桌面图标休息,拖动桌面图标,但是,用户抱怨拖动桌面图标会出现黑色和白色,测试,在 extjs4. ...
- python语言学习9——使用list和tuple
list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 位置 用索引来访问list中每一个位置的元素,记得索引是从0开始的,到 len-1结 ...
- ASA failover应用
failover的条件: 1.硬件型号必须相同 2.系统版本必须一致 3.模式必须一致 4.相同的许可和许可的数量 步骤: step 1:配置failover interface,确保状态 up LZ ...
- 百度map android sdk3.5实现定位 并跳转的指定坐标,加入标记
前几天又下载了新的百度地图sdk,3.5版本号.发现百度地图api有了较大变化 定位和3.0版本号差点儿相同 可是设置地图中心和加入maker标记有较大变化 设置地图中心点 // 定义地图状态zoom ...