服务器与存储之间的通信协议,Zookeeper系列六:服务器角色、序列化与通信协议、数据存储...

一、服务器角色

1. Leader

1)事务请求的唯一调度者和处理者。保证事务处理的顺序性

事务请求:导致数据一致性的请求(数据发生改变)。如删除一个节点、创建一个节点、设置节点数据,设置节点权限就是一个事物请求,全局的事物id(zxid)只能由leader来分配

2)集群内部个服务器之间的调度者

2. Follower

1)处理客户端的非事务请求。事务请求必须转发给Leader服务器。

非事物请求:读取数据

2)参与事务请求Proposal(议案)的投票

3)参与Leader选举

3. Observer

在实际运行中,它只是负责读,Leader不会将事务的投票发送给Observer。

在zk的配置server.1=master:2888:3888后面加:observer以后就是一个Observer

server.1=master:2888:3888:observer

f4a57d7780e28881dd7130fab23b8f1f.png

二、序列化与通信协议

1. zookeeper序列化

常见序列化协议:

ProtoBuf

Thrift

Hessian

Kryo

Avro

JDK Serializable

Jsoniter/Jackson

Jute是zookeeper序列化、反序列化协议。

2. zookeeper通信协议

基于TCP/IP协议,所以是一个长连接。zookeeper在这个基础上完成客户端和服务器,服务器和服务器之间的通信。

zookeeper请求包:请求头+请求体

0-3

4-11

12-n

len

4-7

8-11

12-15

16-(n-1)

n

xid

type

len

path

watch

zookeeper响应包:响应头+响应体

0-3

4-19

20 - n

len

4-7

8-15

16-19

20-23

len位

48位

8位

xid

zxid

err

len

data

......

pzxid

0-3位:version+dbid+magic(魔数)

三、数据存储

1. 内存数据

Zk有个内存数据库:ZkDataBase、DataTree、DataNode

2. 日志数据FileTxnLog

运行时,不停地有数据写入。

当日志的剩余空间不足4K(4096),日志就做扩充,扩充64M,后面以“0”填充。

log都是使用zxid作为文件名的后缀。

查看日志方式:

cd /software/zookeeper-3.4.6

java -cp ./zookeeper-3.4.6.jar::./lib/log4j-1.2.16.jar:./lib/slf4j-api-1.6.1.jar:./lib/slf4j-log4j12-1.6.1.jar org.apache.zookeeper.server.LogFormatter /zookeeper/zk1/version-2/log.100000001

5f5c0ed16dbbd8d678a20d5e7dd3ce1b.png

说明:

1)必须在zookeeper的安装目录下执行

2)/zookeeper/zk1/是zookeeper配置文件里面配置的数据目录(dataDir)

3. 快照数据

快照数据:在某一时刻内存所有全量数据的一个磁盘文件。举例:快照阈值100000,触发快照数据。

快照数据都是使用Zxid作为文件名的后缀。这样的话,获取快照数据的时候就不用遍历了,直接根据Zxid去获取就行了

查看快照命令:

cd /software/zookeeper-3.4.6

java -cp ./zookeeper-3.4.6.jar::./lib/log4j-1.2.16.jar:./lib/slf4j-api-1.6.1.jar:./lib/slf4j-log4j12-1.6.1.jar org.apache.zookeeper.server.SnapshotFormatter /zookeeper/zk1/version-2/snapshot.100000050

98787b730ea94fcdbf8f27de0942b59a.png

说明:

1)必须在zookeeper的安装目录下执行

2)/zookeeper/zk1/是zookeeper配置文件里面配置的数据目录(dataDir)

快照触发机制,非“半数机制”,过半随机策略。

logcount > (snapcount/2 + randroll)

logcount: 代表当前记录日志数量

snapcount: 多少次事务日志记录后触发一次数据快照

randroll: 1~snapcount/2 之间的一个随机数

原文:https://www.cnblogs.com/leeSmall/p/9611041.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值