天天看点

zookeeper

工作原理:

Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式(选举)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。

Paxos算法 :解决的问题是如何在分布式环境中保证数据的一致性;

角色分工:

Leader: 负责进行投票的发起和决议,更新系统状态

Follower:接收客户请求并向客户端返回结果,在选举过程中参与投票

Observer:接收客户端连接,将写请求转发给leader节点,不参与投票过程,只同步leader状态;主要为扩展系统,提高读取速度

各个角色的工作流程:

Leader主要有三个功能:

1 .恢复数据;

2 .维持与Learner的心跳,接收Learner请求并判断Learner的请求消息类型;

3 .Learner的消息类型主要有PING消息、REQUEST消息、ACK消息、REVALIDATE消息,根据不同的消息类型,进行不同的处理;PING消息是指Learner的心跳信息;REQUEST消息是Follower发送的提议信息,包括写请求及同步请求;ACK消息是Follower的对提议的回复,超过半数的Follower通过,则commit该提议;REVALIDATE消息是用来延长SESSION有效时间

Follower主要有四个功能:

1. 向Leader发送请求(PING消息、REQUEST消息、ACK消息、REVALIDATE消息);

2 .接收Leader消息并进行处理;

3 .接收Client的请求,如果为写请求,发送给Leader进行投票;

4 .返回Client结果。

选举阶段:

Leader选举处理过程:

1.将自己的server.id和zxid信息发送出去

2.如果收到的信息中receive.zxid>= my.zxid,但receive.server.id> my.server.id,则将自己的选票修改为(received.zxid,receive.server.id),否则是(my.zxid,my.server.id)

3.一旦收到的选票超过半数的服务器节点数,便将状态修改为LEADING,并通知投票者将状态设置为FOLLOWING状态

server.id:是节点的服务标识符

zxid:是zookeeper事物ID,zookeeper状态的每一次改变,都会对应一个递增的Transaction id,即zxid,zxid=epoch(32bit)+counter(32bit) ;epoch表示集群中leader所改变的次数

广播阶段:

同一时刻存在一个Leader节点,其他的节点为Follower,如果是更新请求,客户端连接到leader节点,由leader节点执行请求,如果连接到Follower节点,则需将转发请求到leader执行,但对于读请求,客户端可以直接从Follower上读取数据,如果需要读取到最新的数据,在发起读操作时设置强制同步,则会从Leader节点获取

配置文件说明:

tickTime:服务器和客户端之间的心跳机制,用于检测对方的健康状态,这个时间是健康检测频率,每隔tickTime会发送一个心跳,单位为ms

dataDir:zookeeper所产生的数据存放目录,目录下的myid文件要和集群的server ID对应

dataLogDir:事物日志文件存放目录

clientPort:和客户端交互时所使用的服务端口

initLimit:集群中的其他节点在于Leader建立连接,以及建立完成后同步数据所运行的最大时间,它是以tickTime的倍数计算 即initLimit*tickTime

syncTime:集群中Leader与其他节点进行数据同步所运行的最大时间,它是以tickTime的倍数计算,即syncTime*tickTime

server.x=[hostname]:port1:port2[:observer] :x表示服务器ID,即为myid文件中对应;port1 集群内各个节点进行数据交互的端口;port2 进行选举leader时所使用的端口,如果该节点为observer,可以在最后追加一个observer标识

peerType=observer 如果该节点是一个observer节点,则需要添加该配置

zookeeper监控(四字命令):

可通过nc 工具 发送四字命令,如:

zk常用命令:

服务端

客户端

zk集群演示:

IP:192.168.229.128 上启3个zk docker

zk 基础配置

zk start 脚本

zk Dockerfile

zk Build

zk Run

上一篇: Flink 时间
下一篇: zookeeper