ZooKeeper_基础知识

张淳
2023-12-01

本文ZooKeeper版本3.7.0

基础知识

存储结构

使用树形存储节点信息,类似Linux文件系统。

每一个存储节点对应一个Znode节点,每个Znode节点默认存储1MB数据。

Znode包含ACL权限控制,修改/访问时间,最后一次操作的事物ID等等。

对Znode节点修改保证顺序和原子性。

节点分类

持久节点 : create /xxx
持久顺序节点 : create -s /xxx

临时节点 : create -e /xxx
临时顺序节点 : create -e -s /xxx

超时节点 : create -t /xxx
超时顺序节点 : create -t -s /xxx

容器节点 : create -c /xxx

参考create命令

监听机制

可以对节点的变更进行监听

监听节点事件:添加,删除,修改,子节点变化

一次监听事件,只会触发一次,如果想要监听到znode的第二次变更,需要重新注册监听。

zk集群:高性能,高可用,强一致性(CP)

  • Master/Slave模式
zk节点角色:Leader节点与Learner节点(Folloer节点,Observer节点)

集群中只有一个Leader节点,进行写请求

每次写都会生成全局唯一ID(64位整数)

Learner节点单独处理读请求,转发写请求

Leader节点挂掉,冲Follower节点中通过选举出一个Leader.

Follwer节点与Observer节点区别是不参与选举和提议事物过半处理

集群通常奇数个节点部署
  • 数据一致性(zab协议-原子广播协议)

    类似2PC提交。

Leader包装写请求,生成zxid,广播给所有Follower。

Follower节点收到提议,写入本地事务日志,回应是否同意事务提交

Leader收到过半的Follow同意,自己先添加事务,然后对所有的Learner节点发送提交事务请求。
  • Master选举
1.Follower节点第一次投票先投自己,然后将自己的选票广播给剩余的Follower节点。

2.Follower节点接收到其他的选票。

3.选票比较:比较自己的与接收的选票的投票更有。

4.如果自己的选票不是最优选票,变更自己的选票,投最优选票的节点。

5.统计自己收到的选票,如果某个节点获得了过半的节点的投票。确认该节点为新的Leader节点。

6.确认Leader节点后,每个节点变更自己的角色。完成投票选举。

选举原则:谁的数据最新,谁就有优先被选为Leader的资格。

应用场景

分布式锁

使用临时顺序节点

client判断当前节点顺序号,是否最小,最小获取锁

其他client注册监听,比它小一个的节点, 保证获取锁的顺序

锁释放,删除节点

其他client监听到,重新获取锁

集群管理与master选举

使用临时节点

zk保证数据节点唯一性,创建成功的client为master
 
非master,在已创建的节点上注册节点删除事件监听
 
当master宕机后,其他节点收到节点删除事件,重新选举

其他

(1)集群统一配置管理
(2)集群统一命名服务
(3)集群统一管理
(4)服务器的动态上下线感知
(5)负载均衡

其他

zkCli.sh

./zkCli.sh -server host:port

create

create [-s] [-e] [-c] [-t ttl] path [data] [acl]
-s : sequential node
-e : ephemeral node
-c : container node, singe V3.5.3, 子节点清空,容器节点也会被zookeeper删除。定时任务默认60s 检查一次
-t : ttl node, set zookeeper.extendedTypesEnabled=true

https://zookeeper.apache.org/doc/current/zookeeperCLI.html

ACL控制参考:zookeeper的ACL权限控制

Clustered

https://zookeeper.apache.org/doc/r3.7.0/zookeeperAdmin.html#sc_zkMulitServerSetup

Zookeeper_集群搭建.md

AdminServer

  • admin.enableServer : (Java system property: zookeeper.admin.enableServer) Set to “false” to disable the AdminServer. By default the AdminServer is enabled.
  • admin.serverAddress : (Java system property: zookeeper.admin.serverAddress) The address the embedded Jetty server listens on. Defaults to 0.0.0.0.
  • admin.serverPort : (Java system property: zookeeper.admin.serverPort) The port the embedded Jetty server listens on. Defaults to 8080.
  • admin.idleTimeout : (Java system property: zookeeper.admin.idleTimeout) Set the maximum idle time in milliseconds that a connection can wait before sending or receiving data. Defaults to 30000 ms.
  • admin.commandURL : (Java system property: zookeeper.admin.commandURL) The URL for listing and issuing commands relative to the root URL. Defaults to “/commands”.

https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_adminserver_config

来源:https://www.jianshu.com/p/67feadaa74ae

 类似资料: