1.单机1.准备 Java 环境2.下载 ZooKeeper 安装包https://www.apache.org/dyn/closer.cgi/zookeeper/3.解压tar -xzvf zookeeper-3.4.14.tar.gz /usr/local4.配置文件 zoo.cfgcp /usr/local/zookeeper-3.4.14/conf/zoo_sample.cfg /usr/local/zookeeper-3.4.14/conf/conf/zoo.cfg具体配置tickTime=2000initLimit=10syncLimit=5dataDir=/tmp/zookeeperdataLogDir=/tmp/zookeeper/logsclientPort=2181server.1=192.168.0.116:2888:38885.启动/usr/local/zookeeper-3.4.14/bin/zkServer.sh start 6.验证telnet 192.168.0.116 2181statMode : standalone2.集群机器1 : 192.168.0.116机器2 : 192.168.0.115机器3 : 192.168.0.1021.编辑 zoo.cfg 文件
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
dataLogDir=/tmp/zookeeper/logs
clientPort=2181
server.1=192.168.0.116:2888:3888
server.2=192.168.0.115:2888:3888
server.3=192.168.0.102:2888:38882.创建 /tmp/zookeeper/myid(dataDir 指定的目录) 文件,写入 Server ID3.分别在3台机器启动4.验证telnet 192.168.0.116 2181statMode : leader/follower说明:1.在集群模式下,集群中的每一台服务器都需要感知到整个集群是由哪几台机器组成的,在配置文件中,可以按照这样的格式进行配置,每一行都代表一个机器配置:server.id=host.port:port其中,id被称为 Server ID,用来标识该机器在集群中的机器序号。同时,在每台 zookeeper 机器上,我们都需要在数据目录(即 dataDir 参数指定的那个目录)下创建一个 myid 文件,该文件只有一行内容,并且是一个数字,即对应于每台机器的 Server ID 数字。2.在 zookeeper 的设计中,集群中所有机器上 zoo.cfg 文件的内容应该都是一致的。因此最好使用 svn 或者是 git 管理起来。。3.上面也提到了,myid 文件中只有一个数字,即一个 Server ID。注意,请确保每个服务器的 myid 文件中的数字不同,并且和自己所在机器的 zoo.cfg 中server.id=host:port:port 的 id 一致。另外 id 的范围是 1~255。./zkServer.sh status 查看角色3.伪集群模式1.创建zoo1.cfg,zoo2.cfg,zoo3.cfgvim zoo1.cfg :
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper/1
dataLogDir=/tmp/zookeeper/logs/1
clientPort=2181
server.1=192.168.0.116:2888:3888
server.2=192.168.0.116:2889:3889
server.3=192.168.0.116:2890:3890vim zoo2.cfg :
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper/2
dataLogDir=/tmp/zookeeper/logs/2
clientPort=2182
server.1=192.168.0.116:2888:3888
server.2=192.168.0.116:2889:3889
server.3=192.168.0.116:2890:3890vim zoo3.cfg :
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper/3
dataLogDir=/tmp/zookeeper/logs/3
clientPort=2183
server.1=192.168.0.116:2888:3888
server.2=192.168.0.116:2889:3889
server.3=192.168.0.116:2890:38902.创建 myidecho 1 > /tmp/zookeeper/1/myidecho 2 > /tmp/zookeeper/2/myidecho 3 > /tmp/zookeeper/3/myid3.启动../bin/zkServer.sh start zoo1.cfg../bin/zkServer.sh start zoo2.cfg../bin/zkServer.sh start zoo3.cfg4.查看状态../bin/zkServer.sh status zoo1.cfg../bin/zkServer.sh status zoo2.cfg../bin/zkServer.sh status zoo3.cfg4.运行服务  1.启动服务1.Java 命令行2.zookeeper 自带命令行zkCleanup.sh  //清理 zookeeper 历史数据,包括事务日志文件和快照数据文件zkCli.sh // zookeeper 的一个简易客户端zkEnv.sh // 设置 zookeeper 的环境变量zkServer.sh // zookeeper 服务器启动,停止和重启脚本5.客户端脚本./zkCli.sh  //默认本地的 zookeeper 服务器./zkCli.sh -server ip:port // 指定 zookeeper 服务器,./zkCli.sh -server 192.168.0.116:21821.创建create [-s] [-e] path data acl其中,-s 或者 -e 分别指定节点的特性:顺序或者临时节点。默认情况下是,即不添加-s 或 -e 参数的,创建的是持久节点。create /zk-book 123执行完上面的命令后,就在 zookeeper 的根节点下创建了一个叫做 /zk-book 的节点,并且节点的内容是 123。另外,create 命令的最后一个参数是 acl,它是用来进行权限控制的,缺省情况下,不做任何权限控制。2.读取ls path [watch]  使用 ls 命令,可以列出 zookeeper 指定节点下的所有子节点。当然,这个命令只能看到指定节点下第一级的所有子节点。ls /第一次部署的 zookeeper 集群,默认在根节点 '/' 下面又个叫做 /zookeeper 的保留节点。get path [watch]使用 get 命令,可以获取 zookeeper 指定节点的数据内容和属性信息。get /zk-book
123   //数据内容
cZxid = 0x30000000c   //创建该事务节点的事务id (cZxid)
ctime = Sat Sep 21 18:25:40 CST 2019
mZxid = 0x30000000c  //最后一次更新该节点的事务id (mZxid)
mtime = Sat Sep 21 18:25:40 CST 2019  //最后一次更新该节点的是时间 (mtime)
pZxid = 0x30000000c
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 03.更新set path data [version]其中,data 就是要更新的内容。注意,set 命令后面还有一个 version 参数,在 zookeeper 中,节点的数据是有版本的概念的,这个参数用于指定本次更新操作是基于 ZNode 的哪一个数据版本进的。set /zk-book 456dataVersion 从 0 变成 14.删除delete path [version]version 参数和 set 一样。注意:要删除某个指定的节点,该节点必须没有子节点存在。6.Java 客户端 API 使用注意,zookeeper 客户端和服务端会话的建立是一个异步的过程,也就是说在程序中,构造方法会处理完客户端初始化工作后立即返回,在大多数的情况下,此时并没有真正的建立好一个可用的会话,在会话的生命周期中处于 'CONNECTING' 的状态。当该会话真正创建完毕后,zookeeper 服务端会向会话对应的客户端发送一个事件通知,已告知客户端,客户端只有在获取这个通知后,才算真正的建立了会话。CAS(Compare and Swap):在 <<Java 并发编程实践>> 中提到,在现代大多数的计算机处理器体系架构中,都实现了对 cas 的指令支持。通俗的讲,CAS 的意思是 '对于值 V,每次更新前都会比较对其值是否是预期值A,只有符合预期,才会将 V 原子化的更新到新值 B'。zookeeper 的 setData接口中的 version 参数正是由 CAS 原理演化而来的。从前面的介绍中,我们已经了解到,zookeeper 的每个节点都是数据版本的概念,在调用更新操作的时候,就可以添加 version 这个参数,该参数可以对应于 cas 原理中的 '预期值',表明的是对该数据版本进行更新的。具体来说,假如一个客户端试图进行更新操作,它会携带上次获取到的 version 值进行更新。而如果在这段时间内,zookeeper 服务器上该节点的服务恰好被其他客户端更新了,那么其数据版本也一定发生了变化,因此肯定与客户端携带的 version 无法匹配,于是便无法更新成功 --- 因此可以有效的避免一些分布式更新并发问题,zookeeper 的客户端就可以利用该特性构建更复杂的应用场景,如分布式锁服务等。7.开源客户端1.ZkClient2.CuratorMaster 选举:在分布式系统中,经常碰到这样的场景:对于一个复杂的任务,仅需要从集群中选举出一台进行处理即可。诸如此类的分布式问题,我们统称为'Master 选举'。借助 zookeeper,我们可以很方便的实现 Master 选举的功能,其大体思路非常简单:选举一个根节点,例如 /master_select, 多台机器同时向该节点创建一个子节点 /master_select/lock, 利用 zookeeper 的特性,最终只有一台机器能够创建成功,成功的那台机器就是 Master。分布式锁分布式计数器:基于 zookeeper 的分布式计数器的实现思路:指定一个 zookeeper 数据节点作为计数器,多个应用实例在分布式锁的控制下,通过更新该数据节点的内容来实现计数功能。分布式 Barrier :Barrier 是一种用来控制多线程之间同步的经典方式。

5.从Paxos到Zookeeper分布式一致性原理与实践---使用ZooKeeper相关推荐

  1. 《从Paxos到zookeeper分布式一致性原理与实践》笔记

    <从Paxos到zookeeper分布式一致性原理与实践>笔记 文章目录 <从Paxos到zookeeper分布式一致性原理与实践>笔记 一.概念 二.一致性协调 2.1 2P ...

  2. 《从Paxos到zookeeper分布式一致性原理与实践》

    <从Paxos到zookeeper分布式一致性原理与实践> 一.概念 ACID: Automaticy.consistency.isolation. Durability CAP: con ...

  3. [201502][从 Paxos 到 ZooKeeper][分布式一致性原理与实践][倪超][著]

    [201502][从 Paxos 到 ZooKeeper][分布式一致性原理与实践][倪超][著] http://zookeeper.apache.org 第 1 章 分布式架构 1.1 从集中式到分 ...

  4. 《从Paxos到Zookeeper 分布式一致性原理与实践》

    第1章 分布式架构 1.1 从集中式到分布式 1.1.1 集中式的特点 集中式的特点:部署结构简单(因为基于底层性能卓越的大型主机,不需考虑对服务多个节点的部署,也就不用考虑多个节点之间分布式协调问题 ...

  5. 《从Paxos到ZooKeeper 分布式一致性原理与实践》读书笔记

    一.分布式架构 1.分布式特点 分布性 对等性.分布式系统中的所有计算机节点都是对等的 并发性.多个节点并发的操作一些共享的资源 缺乏全局时钟.节点之间通过消息传递进行通信和协调,因为缺乏全局时钟,很 ...

  6. 《从paxos到zookeeper分布式一致性原理与实践》读书笔记--第二章一致性协议--二阶段提交

    在分布式系统中,每一台机器节点虽然能够知道自己在进行事务操作过程中的结果是成功还是失败但无法直接获取其他分布式系欸但的操作结果.因此,当一个事务需要跨越多个分布式节点的时候为了保持事务的ACID特性, ...

  7. 从Paxos到Zookeeper:分布式一致性原理与实践

    网站 更多书籍点击进入>> CiCi岛 下载 电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍 电子书下载(皮皮云盘-点击"普通下载" ...

  8. Zookeeper分布式一致性原理(四):Zookeeper简介

    zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现数据发布/订阅.负载均衡.命名服务.分布式协调/通知.集群管理.master选举.分布式锁和分布式队列等.Zook ...

  9. Zookeeper分布式一致性原理(八):Zookeeper典型应用场景

    1. 简介 Zookeeper是一个高可用的分布式数据管理和协调框架,并且能够很好的保证分布式环境中数据的一致性.在越来越多的分布式系统(Hadoop.HBase.Kafka)中,Zookeeper都 ...

  10. Zookeeper分布式一致性原理(二):一致性协议

    为了解决分布式一致性问题,在长期的研究过程中,提出了一大批经典的一致性协议和算法,其中最著名的就是2PC和3PC以及Paxos算法了. 1. 2PC和3PC 在分布式系统中,每个节点都明确知道自己事务 ...

最新文章

  1. Matlab调用函数实现CIC滤波器
  2. 递归和非递归实现二叉排序树(BST)的查找操作
  3. python的内存分配
  4. struts2+jquery 实现ajax登陆
  5. BeetleX之TCP消息通讯Protobuf/TLS
  6. spring 4.3.x_如何在Spring 3.x中使用事件
  7. 【转载】用Snort巧妙检测SQL注入和跨站脚本攻击
  8. ip冲突 scan windows_如何检测IP有冲突 - 卡饭网
  9. 理解 with递归调用 Sqlserver 树查询
  10. ASP/COM+组件开发辅助软件之补充
  11. Google发布MobileNets,一种预训练的高效Tensorflow计算机视觉模型
  12. thinkphp 通过Redis实现增删改查操作
  13. Java 综合性实验 Java源代码分析程序
  14. MATLAB学习笔记————(MATLAB的矩阵及其操作②)
  15. Flash Media Server 4.5
  16. html5字体加粗斜体,font设置字体加粗
  17. shiro 自定义FormAuthenticationFilter,记住我
  18. 一些简单的css,html,js笔记分享给大家,希望能够帮助到大家
  19. Win10 桌面回收站右键没有“清空回收站”选项怎么解决
  20. DOS基本命令和批处理

热门文章

  1. 【linux基础】cuDNN版本查询
  2. PhpSpreadsheet使用
  3. 练习四十四:整数的排序
  4. hibernate第一天
  5. 一些会遗忘的代码属性
  6. jQuery Mobile组件
  7. linux时间相关结构体和函数整理
  8. 浅析那些带着“主角光环“的泰坦尼克号幸存者(下)
  9. 单选框_flutter Radio 单选框
  10. 数据之路 - Python爬虫 - 正则表达式