Zookeeper内部原理

一、选举机制
1)、半数机制:集群中半数以上机器存活,集群可用。所以Zookeeper适合安装奇数台服务器。
2)、Zookeeper虽然在配置文件中并没有指定Master和Slave。但是Zookeeper工作时是有一个节点为Leader,其他的则为Flower,Leader是通过内部的选举机制临时产生的。
3)、以一个简单的例子来说明整个选举过程。
假设五台服务器,没有历史数据,都是最新启动的,都一样。
假设这些服务器依次启动。
server们都很单纯,1号机启动了首先都是投票选举自己,投给自己之后发现自己搞不活集群,就会把票投给id(myid)值较大的服务器。
当2号机启动,2号机自己给自己投了一票,1号机给他一票,一共才两票,还是没过半。只要没超过半数,集群就活不了,前面启动的几个就一直处于Looking(选举状态)。当启动的服务器超过半数了,集群能活下来了。
当3号机启动了,3号机有1号机的一票,2号机的一票以及3号机自己给自己的一票,3号机的总票数就是三票,票数超过总服务数的一半,集群存活。3号机当选老大,1、2号机变成Flower。后面4、 5号机启动。票数不够,只能当flower。
所以一般只要是奇数台服务器,按启动顺序来看,中间一台的服务器就是Leader,其余的都是Flower。

二、节点类型
持久(Persistent):客户端和服务器端断开连接后,创建的节点不删除。(Leader)
短暂(Ephemeral):客户端和服务器端断开连接后,创建的节点自己删除。(Flower)
在这里插入图片描述

若Client1创建的是持久型节点,断开之后不会删除。
若Client2创建的是短暂型节点,断开之后删除。
1)、持久化目录节点
客户端语Zookeeper断开连接后,该节点依旧存在。
2)、持久化顺序编号目录节点
客户端与Zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号。
3)、临时目录节点
客户端与Zookeeper断开连接后,该节点被删除。
4)、临时顺序编号目录节点
客户端与Zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号。

说明:创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护。
注意:在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样的客户端可以通过顺序号推断事件的顺序。

三、监听器原理
1、监听原理详解:
1)、首先要有一个main()线程。
2)、在main线程中创建Zookeeper客户端,这时就会创建两个线程。一个负责网络连接通信(connet),一个负责监听(listener)。
3)、通过connect线程将注册的监听事件发送给Zookeeper。
4)、在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中。
5)、Zookeeper监听到有数据活路径变化,就会将这个消息发送给listener线程。
6)、listener线程内部调用了process()方法。
2、常见的监听:
1)、监听节点数据得变化
get path [watch]
2)、监听子节点增减的变化
ls path [watch]

在这里插入图片描述
四、写数据流程
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值