了解zookeeper

Posted xanlv

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了了解zookeeper相关的知识,希望对你有一定的参考价值。

ZooKeeper作为高可用的一致性协调框架,有着一致性算法的实现,ZooKeeper使用的是ZAB协议作为数据一致性的算法,即ZAB(ZooKeeper Atomic Broadcast )。

ZAB在Paxos算法上做了重要改造,和Paxos有着明显的不同。为讨论ZAB,我们假定ZooKeeper已经开启仲裁模式(ZooKeeper还有一种独立模式,除实验需求以外不要开,因为它无法避免脑裂)。

/conf/zoo.cfg解释

tickTime=2000 #zookeeper中使用的基本时间单位, 毫秒值.服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。

nitLimit=5 #zookeeper集群中的包含多台server, 其中一台为leader, 集群中其余的server为follower. initLimit参数配置初始化连接时, follower和leader之间的最长心跳时间. 此时该参数设置为5, 说明时间限制为5倍tickTime, 即5*2000=10000ms=10s.

syncLimit=2 #该参数配置leader和follower之间发送消息, 请求和应答的最大时间长度. 此时该参数设置为2, 说明时间限制为2倍tickTime, 即4000ms.

dataDir=/usr/local/zdata # 数据目录. zdata目录需要自己创建.可以是任意目录.

dataLogDir=/usr/local/zlog #log目录,zlog目录需要自己创建.同样可以是任意目录. 如果没有设置该参数, 将使用和dataDir相同的设置.
clientPort=2180 # 监听client连接的端口号.

server.0=127.0.0.1:8880:7770 #server.X=A:B:C 其中X是一个数字, 表示这是第几号server.

server.1=127.0.0.1:8881:7771 #A是该server所在的IP地址. B配置该server和集群中的leader交换消息所使用的端口.

server.2=127.0.0.1:8882:7772 #C配置选举leader时所使用的端口. 由于配置的是伪集群模式, 所以各个server的B, C参数必须不同.集群模式下b,c可以一样

ZAB协议作用:

1.集群半数以上存活,对外提供服务

2.客户端请求follower,增删改转leader处理,并确保同步到其他节点…读取follower直接返回数据

3.leader宕机,或整个集群重启时,确保已经在leader上提交事物.如果没有,当集群重启完成时快速回到故障之前状态,由新leader根据日志内的操作继续完成

保证数据缓存可靠性,数据广播一致性

数据一致性(数据库集群也有这个概念):

1.强一致性:写入数据,立即可以读出数据,如购买火车票.这种用户体验很好,但是响应速度慢,系统开销大

2.弱一致性(默认状态):写入数据库之后不保证能够立即读到和在一定时间达到一致,只尽可能保证在某一时间达到数据一致性,如网购秒杀抢购时的库存量

3:最终一致性:弱一致性的特例(1和2的中和状态).系统保证在一定时间内达到一致性状态(在性能和速度之间取舍)

以上是关于了解zookeeper的主要内容,如果未能解决你的问题,请参考以下文章

树是有向图还是无向图?

Zookeeper实战之嵌入式执行Zookeeper集群模式

一文了解Zookeeper

Kafka快速上手(2017.9官方翻译)

一文了解Zookeeper

深入了解Zookeeper核心原理