分布式
- 分布式
- 分类
- Apr 21, 2018
ZK-一致性协议
参考 zookeeper与paxos的相似点: leader给予follwer提供参考值 leader提交建议之前会等待follwer的通知 每个请求建议(应该是zxid),会包含一个纪元号,和Paxos的投票选举类似 但是其主要差距在于,zab主机宕机备份恢复为主,而不是状态机副本为主。 primay-backup和state machine replication的区别 state machine replication能保证每次接收到的有序请求,都能得到正确的处理 primary-backup系统比如zookeeper,副本可以按增量式状态排序(zxid前32位表示所属会议,后32位是递增数字), 是由主要副本(应该是leader)生成发送给其他follwer的,state machine replication不一样,如果主机宕了,客户端就找不到可以处理请求的机器了。 zookeeper专门的一致性算法——zab zab是zookeeper atomic broadcast 的缩写;在以上两种概念之下,zab对于state machine repliacation的具体实现方式: 对象设计: leader: 整个zk会议中,负责更新状态的服务;兼职发起投票 leaner: follower:处理客户端的请求,并可以参与投票和选举 observer:处理客户端的请求,但是不可以参与投票和选举 zab的两种模式:...
Read More - Mar 30, 2018
ZK-Watch
在ZK的读操作上:getData(),getChildern(),exists()上,可以自己选择是否设置watch; 有三种设置: 一次性触发 getData('path',true),当path下的数据被删除或更新时,session会收到事件;path下的数据再次更新时,不会发送 发送给session 这种方式是异步的,也就是观察的节点发生了改变,发送给session的事件可能已经到达,但是节点本身的改变还未完成;对此Zookeeper提供了顺序的保证:session在收到watch事件之前都不会观察到节点的改变;这样就保证各个节点无论由于网络延时或是其他因素,最终看到数据的一致性 设置需要观察的数据 除了ZK本身在读操作上可以设置watch以外,可以在set方法上也可以设置watch
Read More - Mar 30, 2018
ZK-Session
原文的client在以下都被我作为session来解释 官网对ZK Sessions的解释 To create a client session the application code must provide a connection string containing a comma separated list of host:port pairs, each corresponding to a ZooKeeper server...
Read More - Mar 29, 2018
Zookeeper QS
本想看看kafaka的,没想到官网上来就让下载Zookeeper,所以先看看ZK ZK安装 ,参考官网 pre-requisite:对于Mac来说不支持Native Client(没有对C语言提供类似Java的客户端来调用ZK)和Contrib功能,先不管。。 下载并解压zookeeper-3.4.10.tar;启动ZK服务需要创建conf/zoo.cfg文件,按照官网标准的文档或者参考解压后的conf/zoo_sample.cfg文件即可: tickTime=2000 dataDir=/var/lib/zookeeper clientPort=2181 tickTime是心跳时间,会话最短超时时间是他的两倍(不知道翻译错没…) dataDir是数据存放目录,是快照和数据存放的位置,最好不要放\tmp下,Centos7会自动清理\tmp下的内容 clientPort是启动端口; 回到解压zk的目录下执行bin/zkServer.sh start即可启动ZK(ZK的log使用的是log4j,而且Zk是Apache用Java实现的),所以可以通过java命令设置输出日志格式和输出目录: java -cp zookeeper.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log4j-1.2.15.jar:conf org.apache.zookeeper.server.PurgeTxnLog <dataDir> <snapDir> -n <count> 通过指定参数运行jar的方式,来设置数据存储位置和日志输出位置 ZK服务启动 通过bin/zkCli.sh -server 127.0.0.1:2181连接到zk; 在连接上zk后,直接通过ls \path命令可以看到有多少个zookeeper的节点;然后可以通过create \path...
Read More