Zookeeper学习记录及简单上手代码展示

zookeeper

zookeeper:定义是一个开源的分布式,为分布式应用提供协调服务的Apache的项目
zookeeper是一个基于观察者模式设计的分布式服务管理框架,负责存储和管理大家的关心的数据,然后接受观察者注册,一旦数据的状态发生变化,zookeeper将负责通知已经在zookeeper上注册的那些观察者做出相应的反应
zookeeper= 文件系统+通知机制

特点

  • 一个leader ,多个follower组成的集群
  • 集群中只要半数以上的节点存活,zookeeper集群就能正常服务
  • 全局数据一致,每个server保存一份相同的数据副本,client无论链接那个server,数据都是一致的
  • 更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行
  • 数据更新原子性,要么成功要么失败
  • 实时性,一定时间范围内,client能读到最新数据

zookeeper的数据结构

数据模型的结构与Unix文件系统很相似,整体上可以看作是一个树,每个节点称作一个ZNode,每个ZNode默认能够存储1mb的数据,每个ZNode都可以通过其路径唯一标识

zookeeper应用场景

  • 统一命名服务
    分布式环境下,经常需要对应用/服务进行统一命名,便于识别(例如:ip不容易识别,域名容易记住)
  • 统一配置管理
    分布式环境下配置文件同步非常常见(集群中所有节点的配置信息是一致的.例如Kafka集群,配置文件修改后,希望能够快速同步到各个节点,配置管理可交由zookeeper,可将配置信息写入zookeeper上的一个Znode,各个客户端服务器监听这个Znode,一旦Znode中的数据被修改,Zookeeper将通知各个客户端服务器)
  • 统一集群管理
    分布式环境下,实时掌握各个节点的状态(可根据节点实时状态做出一些调整,实时监控节点状态变化,可将节点信息写入Znode,监听这个Znode可获取它的实时状态变化)
  • 服务器节点动态上下线
    实时洞察服务器的上下线
  • 软负载均衡等
    记录每台服务器的访问数,让访问数最少的服务器去处理最新的客户端请求

下载地址:http://archive.apache.org/dist/zookeeper/

本地模式安装zookeeper

  • 安装jdk
  • 下载zookeeper包到linux你指定的目录,并解压
  • 配置修改
    解压文件的conf文件夹下zoo_sample.cfg 文件修改为zoo.cfg
    修改zoo.cfg 修改dataDir路径(存储数据路径)

zoo.cfg 配置参数

# The number of milliseconds of each tick 心跳包时间间隔
tickTime=2000 
# The number of ticks that the initial 初始化最大时延tickTime*initLimit,leader与follower超过这个时间就断掉,通讯机制
# synchronization phase can take
initLimit=10 
# The number of ticks that can pass between
# sending a request and getting an acknowledgement 启动完成之后的最大时延tickTime*syncLimit,leader与follower超过这个时间就断掉,通讯机制
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 存储数据的地方
# example sakes.
dataDir=/home/zookeeper/zkdata
# the port at which the clients will connect 客户端端口号
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients 客户端最大连接数 
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#

启动zookeeper

bin目录下

zkCleanup.sh
zkCli.cmd 客户端
zkCli.sh 客户端
	回车无参启动 
	quit 退出客户端

	
zkEnv.cmd
zkEnv.sh
zkServer.cmd 服务端
zkServer.sh 服务端
	start 启动
	status 状态
	stop 关闭

zookeeper选举master内部原理简析

半数机制:集群中只要半数以上机器存活,集群可用,集群适合奇数台服务器
server启动没有历史数据的情况下,先自投,选举状态一直是looking,集群相互交换选举信息,所以后加的server票数更多,超过半数以上的投票作为leader ,其他为follower

节点类型

  • 持久(Persistent)节点 客户端和服务端断开后节点不删除
  • 临时(Ephemeral)节点 客户端和服务端断开后节点自删除

zookeeper集群搭建

  • 首先单机zookeeper装好
  • 集群环境善于利用xsync脚本同步文件数据
  • 在相应的指定目录线面创建节点信息,zkdata在节点下 创建一个myid文件其中的就是对应相应的server唯一标识,创建后同步到进群信息中并修改成相应的机器的唯一标识
  • 修改zoo.cfg文件dataDir文件路径到指定目录,添加集群配置
    server.A=B:C:D
    A对应一个服务器的你在myid里面配置的唯一标识 B是一个ip或者主机名 C是本服务器与集群中的leader服务器交换信息的端口 D 是集群中的leader挂掉之后,从新选举通信的端口
    特别注意,集群检验需要把所有集群机器启动

zookeeper shell

客户端命令
help 显示所有操作命令

ls  显示当前znode所包含的数据内容  eg:ls /

ls2 / 显示当前节点节点的详细数据 eg: ls2 /

create 
创建节点(如果不写入数据,则无法创建相应节点) eg:create /master "master"
创建短暂节点 eg:create -e /master1 "master1"
创建带序号的节点 eg:create -s /master3 "master3"


get 获得节点的值 eg:get /master 

显示结构体的字段属性 
23134234
cZxid = 0x100000002			创建节点的事务zxid 
ctime = Wed Feb 26 23:39:12 CST 2020			znode创建的毫秒数
mZxid = 0x10000000e			znode最后更新事务的zxid
mtime = Thu Feb 27 00:25:55 CST 2020 最后修改的毫秒数 
pZxid = 0x100000002			最后更新子节点的zxid
cversion = 0			znode子节点的变化号,znode子节点的修改次数
dataVersion = 2			znode数据变化号
aclVersion = 0			znode访问控制列表的变化号
ephemeralOwner = 0x0			如果是临时节点,这是znode拥有者得session_id,如果不是则是0
dataLength = 8				znode数据长度 
numChildren = 0				znode子节点的数量


set 修改节点的值 eg:set /master1 "master111111"

watch 监听节点值变化 eg:get /master watch  一次有效

delete 
删除节点 eg:delete /master
递归删除节点 eg:rmr /master 

stat 查看节点状态 stat /master 

quit 退出客户端

zookeeper监听器原理

  • 创建一个main线程
  • 其中在main线程中创建一个zookeeper的客户端,同时这个客户端拥有两个线程,一个负责网络通信(connection)一个负责监听(listener)
  • 通过connection将注册的监听事件发送给zookeeper
  • 在zookeeper的注册监听器列表将注册的监听事件添加到列表中
  • zookeeper监听到数据或者路径变化,就会将这个消息告诉给listener线程
  • listener就会调用相应的process()方法处理

常见的监听

监听节点的数据变化
get path [watch]

监听子节点的增减变化
ls path [watch]

面试主要考察点

zookeeper的选举机制,半数投票机制
zookeeper的监听原理
zookeeper的部署方式(单机,集群,伪集群),集群中的角色(leader,follower),集群至少三台服务器
zookeeper的常用命令

上手代码地址:https://gitee.com/ArnoldSu/zookeeper

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值