第 1 章 Zookeeper 入门跟学尚硅谷Zookeeper,自我总结
Zookeeper 是一个开源的分布式的,为分布式框架提供协调服务的 Apache 项目。
数据结构
ZooKeeper 数据模型的结构与 Unix 文件系统很类似,整体上可以看作是一棵树,每个 节点称做一个 ZNode。每一个 ZNode 默认能够存储 1MB 的数据,每个 ZNode 都可以通过 其路径唯一标识。
应用场景
提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等。
详见尚硅谷Zookeeper
配置参数解读 Zookeeper中的配置文件zoo.cfg中参数含义解读如下:
1)tickTime = 2000:通信心跳时间,Zookeeper服务器与客户端心跳时间,单位毫秒
2)initLimit = 10:LF初始通信时限——Leader和Follower初始连接时能容忍的最多心跳数(tickTime的数量)
3)syncLimit = 5:LF同步通信时限——Leader和Follower之间通信时间如果超过syncLimit * tickTime,Leader认为Follwer死 掉,从服务器列表中删除Follwer。
4)dataDir:保存Zookeeper中的数据 注意:默认的tmp目录,容易被Linux系统定期删除,所以一般不用默认的tmp目录。
5)clientPort = 2181:客户端连接端口,通常不做修改。
第 3 章 Zookeeper 集群操作 3.1 集群操作3.1.1 集群操作集群安装详见尚硅谷Zookeeper
(1)分别启动或关闭 Zookeeper
[henry@hadoop102 zookeeper-3.5.7]$ bin/zkServer.sh start / stop [henry@hadoop103 zookeeper-3.5.7]$ bin/zkServer.sh start / stop [henry@hadoop104 zookeeper-3.5.7]$ bin/zkServer.sh start / stop
(2)查看状态
[henry@hadoop102 zookeeper-3.5.7]# bin/zkServer.sh status JMX enabled by default Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg Mode: follower [henry@hadoop103 zookeeper-3.5.7]# bin/zkServer.sh status JMX enabled by default Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg Mode: leader [henry@hadoop104 zookeeper-3.4.5]# bin/zkServer.sh status JMX enabled by default Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg Mode: follower3.1.2 选举机制(面试重点)
启动客户端
[henry@hadoop102 zookeeper-3.5.7]$ bin/zkCli.sh -server hadoop102:2181
查看当前znode中所包含的内容
[zk: hadoop102:2181(CONNECTED) 0] ls / [zookeeper]
查看当前节点详细数据
[zk: hadoop102:2181(CONNECTED) 5] ls -s / [zookeeper]cZxid = 0x0 ctime = Thu Jan 01 08:00:00 CST 1970 mZxid = 0x0 mtime = Thu Jan 01 08:00:00 CST 1970 pZxid = 0x0 cversion = -1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 0 numChildren = 1
节点类型(持久/短暂/有序号/无序号)
创建4种节点
#(永久节点 + 不带序号) [zk: localhost:2181(CONNECTED) 3] create /sanguo "diaochan" Created /sanguo #(永久节点 + 带序号) [zk: localhost:2181(CONNECTED) 2] create -s /sanguo/weiguo/zhangliao "zhangliao" Created /sanguo/weiguo/zhangliao0000000000 #(短暂节点 + 不带序号) [zk: localhost:2181(CONNECTED) 7] create -e /sanguo/wuguo "zhouyu" Created /sanguo/wuguo #(短暂节点 + 带序号) [zk: localhost:2181(CONNECTED) 2] create -e -s /sanguo/wuguo "zhouyu" Created /sanguo/wuguo0000000001
获得节点的值
[zk: localhost:2181(CONNECTED) 5] get -s /sanguo diaochan ...
查看节点
[zk: localhost:2181(CONNECTED) 3] ls /sanguo [wuguo, wuguo0000000001, shuguo] #查看节点状态 [zk: localhost:2181(CONNECTED) 17] stat /sanguo cZxid = 0x100000003 ...
修改节点数据值
[zk: localhost:2181(CONNECTED) 6] set /sanguo/weiguo "simayi"
注册监听/sanguo 节点数据变化
[zk: localhost:2181(CONNECTED) 26] get -w /sanguo
删除节点
[zk: localhost:2181(CONNECTED) 4] delete /sanguo/jin #递归删除节点 [zk: localhost:2181(CONNECTED) 15] deleteall /sanguo/shuguo
监听器原理
3.3 客户端向服务端写数据流程(了解)
第 5 章 ZooKeeper 分布式锁案例详见尚硅谷Zookeeper
5.1 原生 Zookeeper 实现分布式锁案例 5.2 Curator 框架实现分布式锁案例 第 6 章 企业面试真题(面试重点) 6.1 选举机制详见尚硅谷Zookeeper
详见3.1.2 选举机制(面试重点)
半数机制,超过半数的投票通过,即通过。
(1)第一次启动选举规则: 投票过半数时,服务器 id 大的胜出
(2)第二次启动选举规则: ①EPOCH 大的直接胜出 ②EPOCH 相同,事务 id 大的胜出 ③事务 id 相同,服务器 id 大的胜出
6.2 生产集群安装多少 zk 合适?安装奇数台。
生产经验: ⚫ 10 台服务器:3 台 zk; ⚫ 20 台服务器:5 台 zk; ⚫ 100 台服务器:11 台 zk; ⚫ 200 台服务器:11 台
zk 服务器台数多:好处,提高可靠性;坏处:提高通信延时
6.3 常用命令详见3.2 客户端命令行操作(常用了解)
ls、get、create、delete



