前言:个人学习笔记,不专业。勿怪
一、入门
1.1概念:
Zookeeper是一个开源的分布式的,为分布式提供协调服务的Apache项目
工作机制:
Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。
Zookeeper=文件系统+通知机制
文件系统:存放的节点信息
通知机制:节点有数据变化时会通知已经注册监听的人
1.2特点
a.Zookeeper一个领导者leader,多个follower组成的集群
b.集群中只要有半数以上的节点存活,Zookeeper就能正常工作(四个节点,挂了两个,不能继续用 )
c.全局数据一致,每个server保存一份相同的数据副本,client无论连接那个server,数据都是一致的。
d.更新请求顺序进行,来自同一个Client的更新请求按其发送顺序依次执行
e.数据更新原子性,一次数据更新要么成功,要么失败。
f.实时性,在一定时间范围内,Client能读取到最新数据
1.3数据结构
1.4应用场景
提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等。
统一命名服务
统一配置管理
统一集群管理
服务器动态上下线
软负载均衡
1.5下载
二、Zookeeper安装
配置参数:zookeeper的配置参数详解(zoo.cfg) - @ 小浩 - 博客园
三、Zookeeper内部原理
3.1选举机制(面试重点 )
1)奇数机制,集群中半数以上机器存活,集群可用。所以Zookeeper适合安装奇数台服务器
2)Zookeeper虽然在配置文件中并没有指定Master 和 Slave,但是,Zookeeper工作时,是有一个节点为Leader,其他节点为Follower,Leader是通过 内部的选举机制临时产生的
3)以一个简单的例子来说明整个选举的过程
假设有五台服务器组成的Zookeeper集群,它们的ID从1到5。同时它们都是最新启动的。在存放数据量上也一致的。假设这些服务器依次启动。
- 服务器1启动,给自己投票,然后发投票信息,由于其它机器还没有启动所以它收不到反馈信息,服务器1的状态一直属于Looking(选举状态)。
- 服务器2启动,给自己投票,同时与之前启动的服务器1交换结果,由于服务器2的编号大所以服务器2胜出,但此时投票数没有大于半数,所以两个服务器的状态依然是LOOKING。
- 服务器3启动,给自己投票,同时与之前启动的服务器1,2交换信息,由于服务器3的编号最大所以服务器3胜出,此时投票数正好大于半数,所以服务器3成为领导者,服务器1,2成为小弟。
- 服务器4启动,给自己投票,同时与之前启动的服务器1,2,3交换信息,尽管服务器4的编号大,但之前服务器3已经胜出,所以服务器4只能成为小弟。
- 服务器5启动,后面的逻辑同服务器4成为小弟。
参看:理解zookeeper选举机制 - 帅LOVE俊 - 博客园 这个比较全面
3.2节点类型
持久 :客户端和服务端断开连接后,创建的节点不删除
短暂:客户端和服务端断开连接后,创建的节点自己删除(使用场景,Client挂掉了,zk中节点删除,能通知到对应的监听客户端不再访问这个机器。)
1. 创建持久节点
使用以下命令在根目录下创建“/School”节点,存放数据为QingHua:
create /School QingHua
2. 创建持久顺序节点
在“/School”节点下创建“/Student”子节点,在“/Student”子节点下创建多个持久顺序节点。使用“-s”参数表示创建顺序节点:
create /School/Student AllTheStudents
create -s /School/Student/s_ Michael
create -s /School/Student/s_ Jack
create -s /School/Student/s_ Tom
3. 创建临时节点
在“/School”节点下创建临时节点“/Teacher”。参数“-e”表示创建临时节点:
create -e /School/Teacher EphemeralTeachers
4. 创建临时顺序节点
在“/School”节点下创建永久节点“/Teacher”。参数“-e”表示创建临时节点,使用“-s”参数表示创建顺序节点:
create /School/Teacher AllTheTeachers
在“/School/Teacher”节点下创建若干个临时顺序节点:
create -e -s /School/Teacher/t_ TeacherHuang
create -e -s /School/Teacher/t_ TeacherZhou
create -e -s /School/Teacher/t_ TeacherZhang
3.3监听器的原理 (面试重点)
3.4写数据的流程
四、分布式安装部署
4.1、分布式安装部署
4.2、操作命令
4.3API应用
1)创建连接
2)创建节点
3)获取节点,并监控节点变化
4)判断子节点是否存在