Zookeeper简介、原理与常用操作

Zookeeper简介

1. zookeeper概述

注:文章中的zookeeper简称zk

1.1.zk简介:

一个分布式开源协调服务框架。用来解决分布式集群应用系统的一致性问题。

1.2.zk特点:

· 一个领导者(leaer),多个跟随者(follower)。

· 只要半数以上节点存活,zk集群就能正常服务。

· 全局数据一致性,client无论连接到那个server,数据都是一致的。

· 更新请求顺序进行,同一client的更新请求按其发送顺序依次执行。

· 数据更新的原子性,更新要么成功,要么失败。

· 数据的实时性,在一定时间范围内,client能读到最新数据。

1.3.zk的数据模型

层次化的树形结构,没有文件和目录而是统称为节点(znode),znode同时兼任了文件和目录的功能。所有的znode构成了层次化的命名空间,是高可用特征的文件系统。
在这里插入图片描述

注:zk一般是用来实现协调而不是直接提供存储服务的,这些协调服务一般都是小数据文件,因此znode的存储大小一个被限制在1MB以内。
	并且每个znode都可以通过路径唯一标识

2.Zookeeper工作原理

2.1选举制度

· 由于半数以上节点的要求,zk适合装在奇数节点上。

· zk通过默认机制FastLeaderElection在内部节点中来选举一个leader,其余节点作为follower。

2.1.1选举制度 三 四 概念

三:

服务器id :serverid
服务器编号,编号越大在算法中的权重越大

​ 我们曾创建过一个zkdata文件夹在myid中写入的数字就是我们自己设置的编号

数据id: zxid
存放的最大数据ID,值越大说明数据越新,在选举中的权重越大

​ 一般是相同的,出现网络波动有可能导致某follower没有收到数据导致数据id偏小

逻辑时钟: Epoch
即服务器参加投票的次数

​ 一般相同,当有几台主机长期运行,而引入新节点没有参与过投票逻辑时钟就会很小

优先级:Epoch>zxid>servereid

四:

LOOKING:竞选状态
遵循三号原则

FOLLOWING:随从状态,同步leader状态,参与选票
leader选举出来后,后来进入的会直接将票投给leader,不会考虑自己的权重

OBSERVING:观察状态,同步leader状态,不参与选票
主要作用是在zookeeper访问量较大时,增入进来能够独立进行客户端非事务(读操作)处理,对于事务请求,则会转发给leader服务器进行处理。不会参与任何形式的投票。

LEADER:领导者状态
· 集群工作的核心

3.Zookeeper的监听机制

3.1监听事件

nodedatachanged #节点数据改变

nodecreate #节点创建事件

nodedelete #节点删除事件

nodechildrenchanged #子节点改变事件

3.2监听的使用

注:监听事件依赖于文件管理系统

stat path [watch] 查看节点状态
ls path [watch]
ls2 path [watch]
get path [watch]
#只要带有watch字样的都是监听事件

举个栗子:

ls /test watch

然后我们尝试创建子节点

create /test/tt abc

此时便会触发监听

WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/test

注:触发事件被建立之后,只能被触发一次。

4.Zookeeper的写数据流程

在这里插入图片描述

①Client向Zookeeper的server1写数据发送一个写请求;

②如果server1不是leader,那么server1会把请求进一步转发给leader;

③这个leader会将写请求广播给所有server;

④各个server 写成功后就会通知leader;

⑤当leader收到半数以上的server写成功的通知,就说明数据写成功了。写成功后,leader会告诉server1 数据写成功了

⑥server1会进一步通知Client数据写成功了。这时就认为整个写操作成功。

5.Zookeeper客户端操作

5.1客户端的命令
5.1.1连接客户端
默认连接:
zkCli.sh
#默认连接的是localhost:2181本地的zookeeper服务器

指定服务器连接:
zkCli.sh -server master:2181
例:连接主机名为august02的2号主机
zkCli.sh -server august02
5.1.2常见命令
  1. ls – 查看某个目录包含的所有文件
    注:zk没有相对路径的概念,ls后需要接绝对路径
ls /path
  1. ls2 – 查看某个目录包含的所有文件,与ls不同的是会查看到time、version等更详细的信息

  2. create – 创建znode,并设置初始内容

    create -e 创造短暂类型的节点

create /test “my test”
#必须要指定文件存储的内容
create -e /my/a "lueluelue"
#随着创建节点客户端的断开,创建的节点会被删除,可以用来作为服务上下线的感知
  1. get – 获取znode的数据
get /test
  1. set – 修改znode内容
set /my/b "LALALA"
  1. delete – 删除znode
delete /my/a
  1. quit – 退出客户端

  2. help – 帮助命令

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值