Zookeeper应用——

SecureCRT应用

========

create /testnode test

==通过API写入内容:

get /testnode2/demo  //查看写入文件内容

zkServer.sh start/stop zoo01.cfg  // 启动、停止服务器zoo01

zkCli.sh -server  192.168.92.102:2181  //连接服务器 ——启动三个zookeeper节点

===========zk权限管理

[zk: 192.168.92.102:2183(CONNECTED) 24] getAcl /bigData
'world,'anyone
: cdrwa

===新增权限

[zk: 192.168.92.102:2181(CONNECTED) 22] getAcl /aclTest
'digest,'macro1:ZFny+YH8T3K0CCIonclKCqtjRuE=
: rw
'digest,'macro2:tP7WsiSfaNqc9BFzeSaE9rJ2NhY=
: cdrwa

====赋予对应节点的权限

[zk: 192.168.92.102:2181(CONNECTED) 23] addauth digest macro2:123456
[zk: 192.168.92.102:2181(CONNECTED) 24] ls /aclTest
[]

======对应代码中:zooKeeper.addAuthInfo("digest", "macro2:123456".getBytes());

区别:ip方式创建:

[zk: 192.168.92.102:2181(CONNECTED) 9] getAcl /aclTest2
'ip,'192.168.92.102
: cdrwa

API调用模式

(1) 创建和zk的连接

(2) 创建节点

(3) 获取节点

① 获取节点的值

② 获取节点的状态

(4) 修改节点

(5) 删除节点

(6) 关闭连接

观察者模式

(1) keeperState:反应当前的节点状态,节点发生了什么样的变化

(2) eventType:反应当前的事件状态,对节点做了什么操作

可以监听的范围:

(1) 可以监听的范围:

① 创建连接的时候

② 子节点操作

③ 当前节点的数据操作

④ 监听指定节点的存在情况

(2) 监听器默认情况下,只能监听到一次;如果需要让他一直生效,需要循环监听

(3) 由于监听者是由一个守护线程来维持的,所以当用户线程结束后,守护线程自动结束;由代理来调用该process方法

zk权限管理

(1) 为什么要ACL权限管理:


(2) 权限分为2个部分:

① 以何种方式进行验证

② 当前权限可以对节点做什么

帕索斯算法

(1) 帕索斯算法的目标是为了保证数据一致性

(2) 帕索斯算法是一种思想

(3) 两个总要的组件:

① 提案发起人

② 提案批准人

(4) 两个原则:

① 产生结果的过程中一定不能错

② 只要产生结果后,所有节点一定要学习到

(5) 流程

① 要发起一个提案,每个提案会有一个编号

② 发起提案的人会向所有提案的审批人发送提案,并附带提案编号

③ 审批人在接收到提案之后,会用当前接受到新的提案编号和当前保存的提案编号进行比较,如果是新的编号大于当前保存的编号;

④ 审批人会先判断当前是否有结果,如果没有结果,则保留新提案提供的结果;如果有结果,则返回结果给提案发起人

⑤ 如果半数以上的提案被允许,那么该提案发起者将广播该提案

⑥ 接受到广播的会再次和当前自己保存的提案编号进行比较,如果发现小于当前自己保存的提案编号,则拒绝,从新发起新的一轮提案

(6) 帕索斯算法的目的:

① 正常情况下的数据一致性解决方案:

1) 没有数据备份,数据不安全。

2) 有数据备份,那么这个时候就要决定,以哪一个备份作为最终结果。

② 如果多个节点的数据不统一

1) 发起提案:

a. 提案ID:s % n = ir => s = m * n + ir

2) 审批提案:

③ 异常:

1) 活锁的问题

2) 节点异常的问题

2. Zookeeper选举和同步机制

(1) ZAB:Zookeeper真正采用的算法

(2) zookeeper选举

① 找到新的leader(myid:zxid)[标准:zxid最大,myid最小]

② 新的leader广播信息,告诉所有的follower我要进行数据同步

③ follower接受到信息准备好之后会告诉leader我准备好了

④ leader判断是否有半数以上follower准备好了

⑤ 如果超过半数则再次广播同意写入,follower接受到同意的信息后,完成写入工作

⑥ 如果有新节点加入或者有数据要写入,过程参照上面数据同步的流程(2-5)

3. Zookeeper的选举和同步机制相对hadoop来说比较粗暴

===

【1】崩溃恢复:参考上面的选举机制

【2】消息广播:zxid——全局唯一的自增id

【3】数据同步:quorum机制——准leader

WARO    &&&     Quorum机制

【1】write all read one

【2】假设有N个副本,更新操作wi 在W个副本中更新成功之后,才认为此次更新操作wi 成功。称成功提交的更新操作对应的数据为:“成功提交的数据”。对于读操作而言,至少需要读R个副本才能读到此次更新的数据。其中,W+R>N ,即W和R有重叠。一般,W+R=N+1.

====Qurom缺陷:

1)如何读取最新的数据?---在已经知道最近成功提交的数据版本号的前提下,最多读R个副本就可以读到最新的数据了。

2)如何确定 最高版本号 的数据是一个成功提交的数据?---继续读其他的副本,直到读到的 最高版本号副本 出现了W次。


补充:网络通讯

route print

tracert www.baidu.com

协议:一组由整个行业约定好的、共同遵守的一种通讯方式!

RPC:远程通信协议

原文地址:https://www.cnblogs.com/macro-renzhansheng/p/13649550.html