参考视频:慕课网【ZooKeeper分布式专题与Dubbo微服务入门】
第1章 分布式系统概念与ZooKeeper简介
1-1 zookeeper简介
zookeeper:动物园管理员

中间件,提供协调服务
作用于分布式系统,发挥其优势,可以为大数据服务
支持java,提供java和c语言的客户端API
1-2 什么是分布式系统
- 很多台计算机组成一个整体,一个整体一致对外并且处理同一请求
- 内部的每台计算机都可以相互通信(rest/rpc)
- 客户端到服务端的一次请求到响应结束会经历多台计算机
案例图解:


1-3 分布式系统的瓶颈以及zk的相关特性
高并发
zk的相关特性
- 一致性:数据一致性,数据按顺序分批入库。
- 原子性:事务要么都成功,要么都失败,不会局部化。
- 单一视图:客户端连接集群中的任一zk节点,数据都是一致的。
- 可靠性:每次对zk的操作状态都保存在服务器中。
- 实时性:客户端可以读取zk服务端的最新数据。
第2章 ZooKeeper安装
2-1 JDK的安装
zookeeper是用java编译的
1 | [machine@machinehost ~]$ java -version |
2-2 zookeeper下载、安装以及配置环境变量
“单机zookeeper安装”
下载:https://archive.apache.org/dist/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz
安装:
1 | tar -zxvf zookeeper-3.4.11.tar.gz |
/etc/profile
1 | # set java environment |
2-3 zookeeper文件夹主要目录介绍
- bin
- conf
- contrib:一些附加功能
- dist-maven:mvn编译后的目录
- docs:帮助文档
- lib:需要依赖的jar包(做cli开发时用到)
- recipes:案例demo代码
- src
2-4 zookeeper配置文件介绍,运行zk
zoo.cgf参数介绍:
- tickTime:用于计算的时间单元。比如session超时:N*tickTime.
- initLimit:用于集群,允许从节点连接并同步到 master节点的初始化连接时间,以tickTime 的倍数来表示(例如initLimit=10).
- syncLimit:用于集群, master主节点与 从节点 之间发送消息,请求和应答 时间长度(心跳机制)
- dataDir:必须配置。
- dataLogDir:日志目录(如果不配置会和dataDir公用)。
- clientPort:连接服务器的端口,默认2181
修改配置:
1 | cp zoo_sample.cfg zoo.cfg |
zoo.cfg
1 | # The number of milliseconds of each tick |
此时单机zookeeper配置完成
运行zk
1 | # 查看可用参数 |
第3章 ZooKeeper基本数据模型
3-1 zk数据模型介绍
是一个树型结构,类似前端开发中的tree.js组件。zk的数据模型也可以理解为linux/unix的文件目录:usr/local/…
每个节点称之为znode,它可以有子节点(相当于子目录),也可以有数据。
每个节点分为临时节点和永久节点,临时节点会在客户端断开后消失。(在分布式锁会涉及)
每个zk节点都各自的版本号,可以通过命令行来显示节点信息。
每个节点数据发生变化,那么节点的版本号会累加(乐观锁)。??
删除、修改过期节点,版本号不匹配则会报错。
每个zk节点存储的数据不宜过大,几K即可。
节点可以设置acl(权限控制链表),可以通过权限来控制用户的访问。
3-2 zk客户端连接关闭服务端,查看znode
客户端连接
查看znode结构
关闭客户端连接
1 | # 启动服务端 |
3-3 zookeeper的作用体现
master节点选举,主节点挂了以后,从节点就会接手工作,并且保证这个节点是唯一的,这也就是所谓的首脑模式,从而保证我们的集群是高可用的。
统一配置文件管理,即只需要部署一台服务器,则可以把相同的配置文件同步更新到其他所有服务器,此操作在云计算的特别多。(假设修改了redis统一配置,需要在以下服务器中同时生效,通过zookeeper只需要修改一台电脑 )

发布与订阅,类似消息队列MQ(amq,rmq),dubbo发布者把数据存在znode上,订阅者会读取这个数据。
提供分布式锁,分布式环境中不同进程之间争夺资源,类似多线程中的锁。

集群管理,集群中保证数据的强一致性。







