Zookeeper

Zookeeper笔记

Zookeeper入门

1.Zookeeper是分布式的,为分布式框架提供协调服务的Apache项目

2.设计模式的角度来说采用了观察者模式设计的分布式服务管理框架,将业务功能注册到Zookeeper集群中,客户端通过Zookeeper集群来调用业务功能,监听业务功能的下线

3.特点:

1)Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群
??2)集群中只要有半数以上节点存货,Zookeeper集群就能正常服务,所以Zookeeper适合安装奇数台服务器==
3)全局数据一致,每个server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的
4)来自同一Client发送的请求,会按照其发送顺序依次执行
5)数据更新具有原子性,一次数据更新要么成功,要么全失败
6)实时性,在一定时间范围内,Client能读取到最新数据

4.数据结构

数据结构模型与Unix文件系统相似,类似于树形结构,每个节点称作一个ZNode,每个Znode默认能够存储1MB的数据,每个ZNode都可以通过其路径来唯一标识

5.安装ZooKeeper

	1) 在虚拟机安装zookeeper 修改zookeeper配置文件 修改dataDir路径
	2) 配置文件参数解读
			1) tickTime = 2000  通信心跳时间  Zookeeper服务器与客户端心跳时间 单位毫秒
			2) initLimit = 10 Leader-Follower初始通信时限  10个心跳时间 表示L和F初始连接时可容忍的最大心跳数
			3) synLimit = 5  Leader-Follower同步通信时限  5个心跳时间  超过此时间会认为F已经死掉,会在服务器中删除F
			4)   dataDir = .... 保存zookeeper的数据路径
			5) clentPort = 2181 客户端连接端口 通常不修改

6.配置集群方式启动Zookeeper

	1)  分别在3台不同服务器中安装好Zookeeper
	2) 修改每台服务器中dataDir的路径 存储为 zkData中
	3) 在zkData文件夹中创建文件 在其中编写服务器的编号
	4)在配置文件中 添加配置项:
			server.A=B:C:D:
					A:一个数字,表示服务器的编号
					B:服务器的地址
					C:服务器Follower与服务器Leader交换信息的端口
					D:Leader挂机后,其他Follower服务器需要通过D端口 重新推举出新的Leader
					举例: server.1=102.168.111.100:2888:3888
	5)启动所有服务器中的Zookeeper服务 使用 zkServer.sh  status 命令查看服务器状态

7.Zookeeper选举机制
在这里插入图片描述

第一次启动时:(5台服务器为例)
	服务一启动,发起选举 投自己一票,此时服务器数量不够半数以上 选举无法完成,服务一状态保持为LOOKING
	服务二启动,发起选举 投自己一票,与服务一交换选票信息,如果服务二的myid大于服务一的myid 则服务一的选票会投票
						给服务二,此时服务一0票,服务二2票,此时服务器数量不够半数以上,无法完成选举 ,服务一二保持状态
						为LOOKING
	服务三启动,发起选举,投自己一票,与服务一、二交换选票讯息,此时服务三的myid大于服务二,所以服务三获取所有
						选票,此时服务器数量达到半数以上,服务三的选票最多,则服务三当选为Leader, 其他服务状态改为
						FOLLOWING,服务三状态改为LEADING
	 服务四启动:发起选举,投自己一票,交换选票信息,由于服务一二三的状态已经不是LOKKING ,所以不会更改选票信息
	 					服务四为一票,服务三为三票,此时服务四服从多数,更改投票给服务三,更改状态为FOLLOWING
	服务五启动,同服务四
非第一次启动:(5台服务器为例)
	1)当Zookeeper集群中的一台服务器出现以下两种情况之一时,就会开始进入Leader选举
		服务器初始化启动
		服务器于行期间无法和Leader保持连接
	2)当一台机器及惹怒Leader选举流程时,当前集群也可能会处于以下两个状态
		集群中本来就已经存在一个Leader
			对于已经存在Leader的情况,机器试图选举Leader时会被告知当前服务器的Leader信息,仅需要和Leader机器建立连
			接,状态同步即可
		集群中确实不存在Leader
			假设Zookeeper集群有5台服务器组成 SID分别为1,2,3,4,5,ZXID分别为8,8,8,7,7,并且此时SID为3的服务器时
			Leader,某一时刻,3和5服务出现故障,因此重新开始进行Leader选择
			SID为1,2,4的机器投票情况为
				选举Leader规则: ① EPOCH打的直接当选,②EPOCH相同,事务ID大的当选,③事务ID相同,服务器ID大的当选

8.编写zookeeper服务启动关闭脚本

#!/bin/bash

case $1 in
"start") {
	for i in 192.168.114.100 192.168.114.101 192.168.114.102
	do
 		echo ---------- zookeeper $i 启动 ------------
		ssh $i "/opt/module/apache-zookeeper-3.5.7-bin/bin/zkServer.sh start"
	done
};;
"stop") {
	for i in 192.168.114.100 192.168.114.101 192.168.114.102
	do
 		echo ---------- zookeeper $i 停止 ------------
		ssh $i "/opt/module/apache-zookeeper-3.5.7-bin/bin/zkServer.sh stop"
	done
};;
"status") {
	for i in 192.168.114.100 192.168.114.101 192.168.114.102
	do
 		echo ---------- zookeeper $i 状态 ------------
		ssh $i "/opt/module/apache-zookeeper-3.5.7-bin/bin/zkServer.sh status"
	done
};;
esac

9.节点信息

1) czxid:创建节点的事务zxid
2) ctime:znode被创建的毫秒数(从1920年开始)
3)mzxid:znode最后更新的事务zxid
4)mtime:znode最后修改的毫秒数(从1920年开始)
5)pZxid:znode最后更新的子节点zxid
6) cversion:znode子节点变化号,znode子节点修改次数
7)dataversion:znode数据变化号
8)aclVersion:znode访问控制列表的变化号
9)ephemeralOwner:如果是临时节点,这个是znode拥有者的session id 如果不是临时节点是0
10)dataLength:znode的数据长度
11)numChildren:znode子节点数量

10.节点类型

1.持久化目录节点:客户端与Zookeeper断开连接后,该节点依旧存在
2.持久化顺序编号目录节点:客户端与Zookeeper断开连接后,该节点依旧存在,知识Zookeeper会自动给节点排序
3.临时目录节点:客户端与Zookeeper断开连接后,该节点被删除
4.临时顺序编号目录节点:客户端与Zookeeper断开连接后,该节点被删除。知识Zookeeper给该节点名称进行顺序编号

11.监听器原理

监听原理详情
	1首先要有一个main()线程
	2.在main线程中创建Zookeeper客户端,这时会创建了两个线程 一个负责网络连接通信(connect),一个负责监听(listener)
	3.通过connect线程将注册的监听事件发送给Zookeeper
	4.在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中
	5.Zookeeper监听到有数据与或路径变化,就会将这个消息发送给listener线程
	6.listener线程内部调用process()方法
常见的监听:
	1)监听节点数据的变化
	2)监听子节点增减的变化
注意:
	1)注册一次监听,只能被监听一次,监听后就无效了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值