zookeeper是可以自己恢复的
1.zookeeper是二进制安全的
2.zkCli.sh开启zookeeper
3.cZxid是创建时的id号,0x2是第二个leader
4.mZxid是修改时的id
5.pZxid是当前节点的最后一个子节点的创建的id号
6.ephemeralOwner=0x0是持久化的节点,为其他的就是临时的节点
7.每个zookeeper的session都会在每一个session同步的,每次开启或者关闭都会使用其他的客户端的事务
8.每个节点只能存1m的数据
8.create -s可以进行不覆盖,不重复的创建节点,创建顺序节点的
9.create -e创建临时节点
10.get /ooxx
11.set /ooxx/xxoo
12.当zookeeper挂了,session创建的事务id不会改变
用netstat -natp | egrep '(2888|3888)'命令查看zk的进程前提是得有net工具
yum install net-tools下载net工具
zk的存储过程
1.zk从机接收客户端的发送请求
2.从机将请求转发给leader
3.leader创建事务id
4.leader维护发送的队列,每个follower都会有一个发送队列,将日志发送给从机保存到磁盘
5.follower接收到日志,会发送确认信息给leader,leader也会有一个确认信息,当确认信息过半了,leader会发送write发送到队列中(异步)
6.leader回复follower创建节点OK了
7.follower回复客户端创建节点ok
队列:先进先出
当客户端没有选择同步的选项时,就有可能取出过时的数据
ZAB轩主
当leader挂了,所有的zk都会停止服务直到选出新的主
zkAPI
zk有session的概念,没有连接池的概念
watch
watch分为两类:
1.第一类,在new zk的时候 ,传入的watch,是session级别的,跟path,note没有关系
2.第二类,在getData的时候,传入的watch,是path级别的,watch的getData方法有两种传入watch的方式,一种是创建新的watch,一种是在watch中,参数为true,使用new zookeeper时传入的watch,使watch重新注册
watch注册的发生只发生在读类型:get,exists
watch只能使用一次
getData可以异步的获取,异步的获取会有一个回调函数,当zk中取出值后,会执行回调函数
CountDownLatch方法
1.await阻塞
2.countdown方法,去除阻塞,可以用来
分布式锁
1.抢锁
线程存储到zk中都是按顺序排列的
进行获取根节点的所有节点,并进行排序
只有排序第一的才能进行干活
其他线程进行睡眠,并监听前一个节点是否存活
前一个节点死亡,再进行获取根节点的所有节点,并进行排序
再抢锁
进行干活
2.干活
只有排名第一的人才会干活
3.释放锁
删除节点