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  | //注入  |