1 | 作者: 夜泊1990 |
第一章 zookeeper简介
第1节 zookeeper的由来
1 | 1. zookeeper最早起源于雅虎研究院的一个研究小组 |
第2节 zookeeper名字的由来
1 | 雅虎研究院很多项目都以动物命名,而zookeeper做为各个项目之间的协调,就起了一个动物管理员的名字(zookeeper),简称zk |
第3节 zk应用场景
1 | 1. 注册中心(Dubbo框架介绍) |
第二章 zk的下载
1 | 这里以3.4.9版本为例,下面是下载地址,下载zookeeper-3.4.9.tar.gz压缩包(在Windows/Linux/Mac下通用) |
第三章 zk的单点安装
1 | 1. 平台支持 |
第四章 zk客户端使用
第1节 客户端连接
1 | 连接命令: zkCli.sh -server 127.0.0.1:2181 |
第2节 zk节点概述
2.1 zk节点概念
1 | zk可以看成是一个小型的数据存储系统,他的数据存储结构和Unix文件系统类型类似(树形结构). |
zk节点图例 | Unix/Linux文件系统图例 |
1 | 1. zk的数据存储在树形结构的节点中(例如根节点/、app1节点、app2节点以及子节点等) |
2.2 zk节点类型
1 | zk节点类型分为4种: |
2.3 zk节点操作
- zk常见命令
1 | 0. help命令 -- 查看当前环境下都可以使用哪些命令 |
- zk节点属性详情
序号 | 属性 | 数据类型 | 描述 |
---|---|---|---|
1 | cZxid | long | 该节点被创建时的事物id |
2 | ctime | long | 该节点被创建时的创建时间 |
3 | mZxid | long | 该节点最后被修改时的事务id |
4 | mtime | long | 该节点最后修改时间 |
5 | pZxid | long | 该节点子节点列表最后一次修改的事物id(如果修改子节点里面的数据内容那么事物id不会变化,添加或者删除子节点时此id会变化) |
6 | cversion | long | 子节点版本号(子节点每次修改数据版本号+1) |
7 | dataVersion | long | 数据版本号(数据每次修改该版本号+1) |
8 | aclVersion | long | 权限版本号(权限每次修改该版本号+1) |
9 | ephemeralOwner | long | 创建该临时节点的会话的sessionId,如果不是临时节点那么为0 |
10 | dataLength | int | 该节点的数据长度 |
11 | numChildren | int | 该节点子节点的数量 |
- zk常见命令使用
1 | 注意: 所有命令设计到的路径操作必须是绝对路径,不可以是相对路径 |
- 创建节点
1 | 1. 创建持久化节点: |
- 给节点设置数据
1 | 1. 设置普通数据(如果set设置值时不加版本,那么数据版本会随着每次set递增,可以在每次set成功之后查看dataVersion属性) |
- 获取节点
1 | 1. 获取普通数据: get /ukoko |
- 查看节点状态
1 | 1. 查看节点状态: stat /ukoko |
- 删除节点
1 | 1. 删除节点 |
第3节 使用Java客户端操作znode
1 | zk的Java客户端常见的有两种: |
3.1 zk客户端依赖
1 | /* zk官网提供 */ |
3.2 节点数据操作
3.2.1 zookeeper操作
1 | @Test |
3.2.2 curator操作
- curator基本操作
1 | @Test |
- curator高级操作
1 | @Test |
第五章 zookeeper的高可用
- zk集群介绍
1 | 单点zk服务在正式环境很容易造成单点故障,导致服务器不可用,为了解决这个问题,需要将zk服务部署成集群,可以解决单点问题. |
- 集群配置
1 | 我们以3个实例节点作为例子部署,正常每一个节点分别在不同的机器上面,由于硬件有限,将3个节点部署到一台机器上进行测试 |
- zk1实例
1 | 1. 解压zk压缩包 |
- zk2实例
1 | 1. 解压zk压缩包 |
- zk3实例
1 | 1. 解压zk压缩包 |
1 | 将各个节点启动,然后使用客户端连接其中的某一个进行测试. |
第六章 配置中心
第1节 在Java项目中时时获取zk数据
1 | 举例: 以京东宙斯开放平台举例,平台地址为 https://jos.jd.com/ |
1.1 案例实现一
1 | 1. 创建JavaWeb项目,添加zk客户端依赖 |
- Spring配置文件
1 | <!-- |
- 控制器中调用
1 | //IOC容器注入 |
1.2 案例实现二
1 | 案例一缺点就是每次都需要zk客户端去数据节点查询数据,性能较差(网络延时) |
编写监听器
- 监听器一(监听某一个节点的子节点变化)
1 | import org.apache.curator.framework.CuratorFramework; |
- 监听器二(监听特定的某一个节点变化)
1 |
- 监听器三(监听某一个节点的所有的后代节点)
1 | import org.apache.curator.framework.CuratorFramework; |
- 将三个监听配置到xml配置文件中
1 | <!-- |
- 使用zkCli.sh或者zkCli.cmd 测试
1 | 使用zk的常见命令在客户端进行操作,查看监听是否会被执行... |
第2节 Config-Toolkit可视化配置中心
2.1 Config-Toolkit简介
1 | 介绍: Config-Toolkit是一款由当当网开源的分布式配置管理工具,通过web界面维护属性配置和配置的导入导出功能 |
2.2 Config-Toolkit下载地址
1 | 1. GitEE地址 : https://gitee.com/mirrors/Config-Toolkit |
2.3 Config-Toolkit安装
1 | 1. 下载源码 git clone https://gitee.com/mirrors/Config-Toolkit.git |
2.4 Config-Toolkit使用
- 访问
1 | config-face项目运行起来之后 通过地址访问: http://localhost:8080 需要用户名和密码 |
登陆页面 | 登陆成功初始化页面 |
- 页面配置文件操作
1 | 1. 创建版本 |
2.5 Config-Tools API使用
- 添加依赖
1 | <dependency> |
- 通过API获取配置信息
1 | //创建ZookeeperConfigProfile加载zk的/projectx/modulex节点的1.0版本的配置 |
2.6 Config-Tools集成Spring
- spring配置文件的头约束
1 | <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
- 基础配置
1 | <!-- |
- Java代码
1 | //注入 |