Zookeeper学习总结

1、概述

zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目观察者模式涉及的分布式服务管理框架

负责存储和管理用户关心的数据

如果数据状态发生变化就会通知zookeeper用户做出反应

zookeeper:文件系统+通知机制

 

2、特点

  1. 有一个领导者和多个跟随者组成的集群
  2. 集群中只要有半数以上节点存活就可以正常服务,适合安装奇数台服务器(刚好一半也没办法正常服务)
  3. 全局数据一致性,每个Server保存一份相同的数据副本,client无论连接到哪个Server,数据都是一致的
  4. 更新请求顺序执行,同一个客户端更新请求依照发送顺序执行
  5. 数据更新原子性,更新要么成功要么失败
  6. 实时性,在一定时间范围内用户端能读取到最新数据

 

3、数据结构

与UNIX文件系统类似可以看做一个树,每个节点称作ZNode,默认可以存储1MB数据,通过路径唯一标识

 

4、提供的服务

  1. 统一命名服务(IP不容易记住但是域名容易)
  2. 统一配置管理(配置文件及修改同步)
  3. 统一集群管理
  4. 服务器节点动态上下线
  5. 软负载均衡

 

5、安装

安装到指定位置后打开CONF文件夹修改zoo_sample.cfg为zoo.cfg修改cfg中的数据存储目录,文件中的/tmp路径只是一个例子

问题1:JAVA_HOME路径问题

解决方法:去/etc/profile添加JAVA路径问题2:端口占用

查找8080端口占用并kill了对应PID

 

6、zoo.cfg参数解读 tickTime=2000 通信心跳时间 initLimit=10 初始通信时限 syncLimit=5 同步通信时限 dataDir:保存数据零

clientPort=2181 客户端连接端口,通常不做修改

 

7、增加配置

 

8、第一次启动选举机制

 

9、非第一次启动

 

10、zkCLi参数

 

11、节点类型

  1. 持久:客户端和服务器断开连接后创建的节点不删除
  2. 短暂:客户端和服务器断开连接后创建的节点自己删除

带序号的节点在添加时zookeeper会自动使用序号自加区分,不会报错不带序号的节点在添加时如果重名会报错

-e:临时节点

-s:自动给文件名添加序号

 

12、监听器原理

-w 监听,可以监听数据变换和路径变换

一次监听只会返回一次数据变换结果,想要继续监听就需要重新设置

delete 删除单个文件

deleteall 删除多个文件

 

13、写数据 leader端

客户端

 

14、面试真题

 

15、客户端、服务端API流程

  1. 客户端

【1】获取zk连接,Zookeeper(connectString(目标主机名),sessionTimeout(等待时长),new Watcher()(监控器))

【2】监控子节点,getChildren(监控子路径,是否监控T/F),这里会拿到子目录下所有子节点的,需要使用数组承接,后续使用遍历输出

【3】业务逻辑,睡眠

Thread.sleep(Long.MAX_VALUE),用于等待服务端节点的数据变化

  1. 服务端

【1】获取zk连接,Zookeeper(connectString(目标主机名),sessionTimeout(等待时长),new Watcher()(监控器))

【2】注册服务器到zk集群

create("/servers/"+hostname(目录名),hostname.getBytes()(数据),ZooDefs.Ids.OPEN_ACL_UNSAFE(要创建的节点的访问控制列表),CreateMode.EPHEMERAL_SEQUENTIAL(节点类型,临时/永久/是否带有序号))

【3】业务逻辑,睡眠

Thread.sleep(Long.MAX_VALUE),用于等待等待后续操作

posted @ 2023-07-27 16:01  sftsgly  阅读(22)  评论(0编辑  收藏  举报