详解使用:zookeeper ->理论篇(有重点)

本文深入讲解ZooKeeper的特性及应用场景,包括数据结构、配置管理、集群管理等,并介绍了配置参数、选举机制、节点类型及常见命令等内容。

特点:

1:一个领导者,多个跟随者集群
2:每个服务器存放的数据信息都一直
3:原子性,一次数据更新要么成功要么失败
4.实时性,要对集群进行同步更新操作
5.来自同一个client的更新请求依次执行,先进先出.


数据结构:

与unix文件系统类似,树形结构,每个节点称作一个ZNode,每个节点默认存放1MB的数据,
每个ZNode都可以通过其路径唯一标识


应用场景

1,统一命名服务
2.统一配置管理

一般要求集群中所有的节点的配置信息是一致的

3.统一集群管理

监听每个节点状态,可将节点信息写入zookeeper上的一个ZNode,坚挺这个ZNode文件
可获取他的实时状态

4.服务器动态上下线

实时洞察到服务器上下线的变化

5.软负载均衡

在zookeeper中记录每一个服务器的访问数,让访问最少的服务器去处理最新的请求


配置文件参数解释

  1. tickTime=2000 ,是指通信心跳时间,zookeeper服务器与客户端心跳时间,单位毫秒
  2. initTime=10: 代表10乘tickTime,是leader和follower的初始通信时间限制数
  3. synclimit=5: 代表5乘tickTime,是leader和follower服务器的同步通信时间限制数
  4. dataDir=/tmp/zookeeper 代表保存zookeper的数据位置,默认tmp目录,容易被定期删除,一般不用默认
  5. clientport =2181 客户端连接端口号,默认不修改

zookeeper集群安装

  1. 创建zkData 目录文件夹
  2. 在zkData目录下创建一个myid文件夹,输入唯一身份表示

配置参数

	service.A = B : C : D

A表示给服务器编号,B代表服务器地址 ,C值服务器follower与集群中leader服务器交换信息的端口号,D表示当集群中老大挂了,用来重新选举老大的那些服务器通信的端口号.

 例如:
 service.1=地址:端口号:端口号
 service.2=地址:端口号:端口号
 service.3=地址:端口号:端口号
 ......

zookeeper 选举机制

1.第一次选举

假设五台机器,根据myid大小选举,只要有超过半数的服务器投票就能选出来leader,
第一台台服务器启动的时候都是先投自己一票,后续第二台启动先投自己,然后第一台发现第二台的myid比自己大就会把自己的一票投给第二台,依次类推,只要超过半数服务器投票,即为leader选出,一旦有了leader后续都是follower .

  1. mydi 指的是服务器的编号
  2. ZXID 事务id,zxid是用来标识每次服务器状态变更
  3. sid: 服务器id 和myid一致
  4. Epoch : 每个 leader的任期的代码(没有leader的时候由逻辑时钟值代替)
2. 非第一次启动

当有一台follower挂了,这台follower 重新启动后会发起leader选举,如果这时候还有leader,直接告诉这台follower 谁是leader,如果leader也同时挂了,就开始再次选举.
假设五台机器 :
sid分别为 1,2,3,4,5
zxid 分别为 8,8,8,7,7
此时sid为3的是leader, 3和5同时挂了,投票情况如下
(EPOCH,ZXID,SID) (EPOCH,ZXID,SID) (EPOCH,ZXID,SID)
1 , 8, 1 1 , 8, 2 1, 7 , 1

选举规则如下:

  1. EPOCH大直接胜出
  2. EPOCH相同 ZXID大胜出
  3. ZXID 相同 SID胜出

所以第二台机器获胜


编写脚本关闭 zookeeper

百度,切记脚本关闭前提是服务器免密登录


zookeeper 节点类型

1.持久类型: 客户端和服务器断开连接后,创建的节点不会被删除
2.临时类型: 断开后被删除
创建持久节点,不带序号

create /文件夹名字 “节点名” 例如:create /wenchao “lwc001”

创建持久节点,带序号

create -s /文件夹名字 “节点名” 例如:create -s /wenchao “lwc001”

创建临时节点,不带序号

create -e /文件夹名字 “节点名” 例如:create -e /wenchao “lwc001”

创建临时节点,带序号

create -e -s /文件夹名字 “节点名” 例如:create -e -s /wenchao “lwc001”

zooke常用命令

create -s ,create -e -s,
修改节点名字:set /节点名 “改的名字”
获取节点值: get -s/节点名


zookeeper监听器原理

1.首先有一个main线程,在zk客户端内.
2.在main线程创建zookeeper 客户端,会创建两个线程,一个负责网络连接通信(connet),一个负责监听(listener 线程)
3.通过 connet将注册的监听事件发给zookeeper
4.zookeeper服务端记录监听事件
5.zookeeper服务监听到数据或者路径节点变化,将消息发给 listener 线程
6.listener线程内部调用process()方法.

常见的监听

1.监听节点数据的变化  get -w path [watch]
2.监听子节点路径增减变化  ls -w path [watch]

注册一次监听 只能收到一次结果


删除节点

delete /节点名称
删除节点需要从子节点开始删除,如果需要全部删除 用命令 deleteall


用idea实现 zookeeper

1.导入依赖                                                             
2.private String connectString(服务器地址) ="服务器1地址","服务器2地址","服务器3地址".... (地址之间不能有空格) 直接 new zookeeper,加入需要的参数即可
3.创建节点  zookeeper.create();
4.监听节点 getChiren();
5.判断节点是否存在 zookeeper.exists()

对于生成环境实现 ,一个集群只需要创建一个根目录,其他无论是服务器还是客户端 对于zookeeper集群来说都是客户端

zookeeper 分布式锁

1.客户端访问集群,会创建一个临时顺序节点,带序号
2.判断自己是不是当前节点下最小的节点,是,就获取到锁,不是对前一个节点监听
3. 获取到锁处理完业务后,删除节点释放锁,然后下面的节点将收到通知,重复第三部判断


curator 是专门解决zk的框架,具体使用百度.


zookeeper是使用的是 ZAB协议 ,ZAB 算法可分为消息广播和崩溃恢复


CAP理论

1.一致性== (C/) :可理解为服务集群里面的每个服务器内存放的数据要保持一致,打比方 如果 一个服务器的事务id 是5,然后宕机了,
另外两台服务器的事务id是 4,那么读取出来的操作要保持在4,即使另外宕机的服务器已经完成了事务更新
2.可用性 (A/) : 读写操作在单台服务器出问题后,在其他服务器上依然能够完成读写操作
重点在于:某个读写操作在出问题的机器上不能读写了,但是在其他机器可以完成
3.分区容错性(P/) : 可理解为 单台服务器或者多台服务器宕机后,其他的服务器造谣可以正常使用,不影响业务

无论哪个技术,最多只能满足两个 要么 cp 要么 ap, zookeeper 是cp,因为 zookeeper进行选举的时候 不能工作,集群处于不可用状态.

觉得不错的话,欢迎关注微信公众号: 码农四库全书
获取更多内容资讯,教程,软件包,电子书,最新面试文档,AI课程等内容.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值