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常见命令
- ls – 查看某个目录包含的所有文件
注:zk没有相对路径的概念,ls后需要接绝对路径ls /path
- ls2 – 查看某个目录包含的所有文件,与ls不同的是会查看到time、version等更详细的信息
- create – 创建znode,并设置初始内容
create -e 创造短暂类型的节点create /test “my test” #必须要指定文件存储的内容 create -e /my/a "lueluelue" #随着创建节点客户端的断开,创建的节点会被删除,可以用来作为服务上下线的感知
- get – 获取znode的数据
get /test
- set – 修改znode内容
set /my/b "LALALA"
- delete – 删除znode
delete /my/a
- quit – 退出客户端
- help – 帮助命令