Zookeeper(2)

复习:
1. Zookeeper:提供了分布式环境下的协调服务
a. 分布式环境下的引发问题
b. Zookeeper的单机安装 — 修改conf目录下的zoo.cfg
c. Zookeeper的特点:Znode树;znode节点;每一个节点都必须存储数据;所有路径都是从根路径/开始计算;持久节点下一定可以有子节点;Znode是维系在内存中;不适合存储海量数据;每一次事务操作都会分配一个递增的全局事务id
d. Zookeeper的基本指令:create/delete/get/ls/set/rmr
e. API操作
f. Zookeeper的集群安装 — 修改zoo.cfg,在数据目录下添加myid
g. 节点状态:looking,follower,leader,observer
h. 观察者:不参加选举和投票,但是监听选举和投票结果。适用于网络不稳定的场景

ZAB协议

基于2PC算法来进行了扩展和延伸。ZAB是针对Zookeeper而专门设计的一套用于崩溃恢复和原子广播的协议。
功能:
1. 崩溃恢复
2. 原子广播

崩溃恢复
当Zookeeper集群中的leader宕机之后,Zookeeper集群不会出现单点问题,而是在满足过半性的条件下会快速的重新选举出一个新的leader,然后对外服务。在Zookeeper的选举过程中,不会对外提供服务的。
原子广播
在这里插入图片描述
server.x=ip:port1:port2;
port1代表原子广播的端口号,也就意味着leader和follower的通信是通过这个端口进行传送
port2代表选举的端口号。选举信息是通过这个端口进行接收的
在这里插入图片描述
在这里插入图片描述

log日志文件时二进制的文件,不能直接利用vim或者cat之类的工具查看。
查看日志文件
1. 到Zookeeper的安装目录下
2. 打开lib
3. 将slf4j-api-1.6.1.jar拷贝到version-2目录下 cp slf4j-api-1.6.1.jar …/tmp/version-2/
4. 回到Zookeeper的安装目录下
5. 将zookeeper-3.4.8.jar拷贝到version-2目录下 cp zookeeper-3.4.8.jar tmp/version-2/
6. 进入到version-2目录下
7. 运行java命令来查看日志文件

java -cp .:zookeeper-3.4.7.jar:slf4j-api-1.6.1.jar org.apache.zookeeper.server.LogFormatter ./log.500000001

snapshot - 快照文件 - 记录当前Zookeeper中的一部分节点信息

java -cp .:zookeeper-3.4.8.jar:slf4j-api-1.6.1.jar org.apache.zookeeper.server.SnapshotFormatter ./snapshot.400000004

在集群环境中,事务id一共有64位二进制来组成,其中高32位表示epoch id,低32位才是当前的事务id

配置信息 zoo.cfg
tickTime - 是Zookeeper中的时间单元。意味着后边计算时间都是以当前单元为基准进行计算。默认值是2000,单位是毫秒
initLimit - 当Zookeeper节点重新启动之后需要将当前节点中的数据进行恢复并且最大事务id,如果事务越大恢复时间就越长。这个属性就是限制恢复时间。默认值为10,也就意味着默认初始时间为:10*tickTime=20s。但是实际开发中,如果数据量较大,可以适当调大这个属性
syncLimit - 当有新的操作的时候,leader和follower进行通信,leader等待响应的时间。默认值是5,也就意味着,leader会等待follower10s中,如果10s中之后leader依然没有收到follower的反馈,就认为这个消息无效或者丢失
dataDir - 数据目录。快照文件默认就是存在dataDir中的version-2目录中
dataLogDir - 日志文件的存放目录。如果不配置,那么默认和dataDir一致。
server.x=ip@p1:p2 - 集群配置信息
snapCount - 1)如果一个节点中的事务操作达到了snapCount次,就会生成一个快照文件,默认数量时100000。2)每次选举出来一个leader,就会生成一个快照文件
autopurge.purgeInterval - 定时清理快照文件。默认值是1,默认单位是小时,表示每隔1个小时清理一次快照文件。从Zookeeper的3.4.0版本开始,Zookeeper新添了自动清理快照文件的功能。
autopurge.snapRetainCount - 快照文件的剩余数量。清理快照文件的时候,需要留下最新的snapRetainCount个快照
jute.maxbuffer - Zookeeper的每一个节点都要存储信息,限制每一个节点的数据大小。默认值是1M,表示每一个节点的数据大小不能超过1M
globalOutstandingLimit - 最大积压数 - leader在接收到操作之后,将操作放到一个队列中发送给follower,队列是一个阻塞式队列,也就意味着leader给follower发送的操作个数是有限的。队列已满,有了新的请求,先接受这个请求进行缓存到leader,然后等follower执行完成之后再将缓存的请求发送给follower,这样子的好处是提供了Zookeeper的吞吐量。leader缓存的操作越多,越耗费内存,会降低整体的效率,所以这个时候需要限制缓存的操作的个数。
preAllocSize - 预先开辟的磁盘空间,用于存储日志文件。默认值是64M,也就意味着日志文件的大小是64M
leaderServers - 在一个Zookeeper集群中,leader也可以对外提供服务。如果需要leader专心于协调服务而不对外提供服务,这个时候将这个属性设置为no,提高了Zookeeper的运行效率。
maxClientCnxns - 限制客户端的连接数量。默认值是60

Zookeeper的集群指令
1. 下载nc-1.84-22.el6.x86_64.rpm — netcat,是基于TCP进行网络通信的组件
2. 安装netcat

Zookeeper的集群指令
1. 查看节点状态 echo stat|nc 10.9.152.65 2181
2. 判断节点的存活状态 echo ruok|nc 10.9.152.65 2181 返回imok,说明节点依然存活
3. 查看节点的配置echo conf|nc 10.9.152.65 2181
4. 关闭节点 echo kill|nc 10.9.152.65 2181

Zookeeper的特性总结
1. 数据一致性 - 从任意一个节点获取到数据是相同的
2. 原子性
3. 可靠性
4. 顺序性 - 操作a先于b发生,那么在Zookeeper中,a的事务一定是先于b
5. 实时性 - 在网络条件较好的情况下,可以对子节点进行监控
6. 过半性 - 过半选举、过半服务、过半执行 - 集群中的节点个数一般是奇数个

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值