3. Zookeeper-内部原理与命令

3.1 选举机制

1. 半数机制,集群中半数以上的机器存活,集群可用。所以 zookeeper 适合奇数台服务器。

2. Zookeeper 虽然在配置文件中没有指定 master 和 slave 。但是 Zookeeper 工作时,是有一个节点为 leader,其他则为 follower,leader 是通过内部选举机制临时产生的。

3. 以一个简单的例子来说明:

假设有5台机器,分别A,B,C,D,E。  注:zookeeper启动的时候,会读集群的配置Ip。

  1. A启动,当前没有leader,给自己投票,其他机器没有启动,收不到反馈信息,处于LOOKING
  2. B启动,当前没有leader,给自己投票,B发消息给其他机器,A接受到了来自B的投票,B比自己服务号大,接受投票,支持B当选,B接收到A 小于或等于自己的投票,支持A投自己。所以2:1,但是没有超过一半;following状态
  3. C启动,当前没有leader,给自己投票,广播给A和B,A和B收到比自己大的服务号,支持C当选并且A清空支持B的投票,此时比分为A:B:C=1:1:3,超过一半,C胜出,成为LEADER,状态为leading
  4. D启动,已经有leader了,同步leader状态,不参与投票,observing状态

 

 

3.2 节点的类型

持久(presistent):客户端和服务器端断开后,创建的节点不删除。

  • 持久化目录节点,客户端与 Zookeeper 断开连接后,改目录依旧存在。
  • 持久化顺序编号目录节点,客户端与 zookeeper 断开连接后,该节点依旧存在,只是 Zookeeper 给该节点进行顺序编号。

说明:创建 znode 时设置顺序标识,znode 名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护。

注意:在分布式系统中,顺序号可以被用于为所有事件在全局中排序,这样客户端可以通过顺序号推断事件的顺序。

 

短暂(ephemeral):客户端和服务器端断开后,创建的节点自己删除。

  • 客户端和服务器端断开后,该节点被删除。
  • 客户端与 zookeeper 断开连接后,该节点被删除,只是 Zookeeper 给该节点进行顺序编号。

 

 

3.3 shell 命令操作

1. 查看 znode 所包含内容  

ls /

 

2. 查看 znode 所包含内容,详细信息

ls2 /

 

3. 创建节点,获取节点数据

create /sanguo "luoguanzhong"

get /sanguo

 

4. 创建短暂节点

create -e /sanguo/weiguo "caocao"

 

5. 创建带编号的节点

create -s /sanguo/qunguo "diaochan"

 

6. 修改节点的值

set /sanguo/shuguo "liushan"

 

7. 监听数据变化

get /sanguo watch

 

8. 监听路径的变化

ls /sanguo/wuguo watch

 

9. 删除节点

delete /sanguo/qunguo0000000002

 

10 递归删除

rmr /sanguo

 

11. 查看节点的详细信息

stat /

cZxid:创建节点的事务id

ctime:znode节点的创建时间

mZxid:最后更新的事务id

mtime:znode节点最后修改时间

pZxid:最后更新子节点的zxid

cversion:znode子节点变化号,znode子节点的修改次数

dataVersion:数据变化号

aclVersion:访问控制列表的变化号

ephemeralOwner:如果是临时节点,这个是 znode 拥有者的 session id,如果不是临时节点则为0

dataLength:znode 的数据长度

numChildren:znode 子节点的数量

 

 

3.4 监听原理

1. 首先由一个 main() 线程

2. 在 main 线程中创建 Zookeeper 客户端,这时候会创建两个线程,一个负责网络通信连接(connect),一个负责监听(listener)

3. 通过 connect 线程将注册的监听事件发送给 Zookeeper

4. 在 Zookeeper 的注册监听器列表中将注册的事件添加的监听列表中

5. Zookeeper 监听到有数据或路径的变化,就会讲数据发送到 listener 线程

6. listener 线程内部调用 process() 方法

 

 

3.5 写数据流程

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值