ZooKeeper 概述
Zookeeper 是一个分布式协调服务的开源框架
实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。
ZooKeeper 特性
- 全局数据一致 :客户端无论连接到那台服务器,展示的数据都是一样的
(写主:数据修改的请求提交给主数据,对读数据请求没有限制,任何节点都能响应,写的过程中采取写主方式,所有操作只有leader进行,follower不能处理写操作) - 可靠性:如果消息被其中一台服务器接受,那么将被所有的服务器接受
- 顺序性:包括全局有序和偏序两种,偏序指到客户端
- 数据更新原子性:一次数据更新要么成功(半数以上节点成功)要么失败,不存在中间状态;
- 实时性:保证客户端将在一个时间间隔范围内获得服务器的更新信息
(允许一定的延迟,有可能一个节点同事处理多个请求,按照请求的编号处理,先来后到,后面的请求处于阻塞状态,当请求被处理时解除)
ZooKeeper 集群角色
zookeeper选举机制:
Leader选举算法采用了Paxos协议
非全新集群选举:优先采取逻辑时钟选举,选举相同时优先采取版本高的为主,当版本一致时优先选serverID高的为主
- Leader(领导者):
Zookeeper 集群工作的核心;负责发送事务(读写操作)请求
事务请求(写操作)的唯一调度和处理者,保证集群事务处理的顺序性; - Follower(追随者):
接收 处理客户端非事务(读操作)请求,转发事务请求给 Leader;
参与集群 Leader 选举投票。 - Observer(观察者):
针对访问量比较大的 zookeeper 集群,还可新增观察者角色
观察 Zookeeper 集群的最新状态变化并将这些状态同步
ZooKeeper 集群搭建
配置主机名称到 IP 地址映射配置
修改 ZooKeeper 配置文件
远程复制分发安装文件
设置 myid
启动 ZooKeeper 集群
znode节点
znode节点:既有文件功能又有目录功能
临时节点:一旦会话结束,临时节点将被自动删除,当然可以也可以手动删除。
永久节点:该节点的生命周期不依赖于会话,只有在客户端执行删除操作时,才能被删除
Znode 还有一个序列化的特性,如果创建的时候指定的话,该 Znode 的名字
后面会自动追加一个不断增加的序列号。
- cZxid :Znode 创建的事务 id。
- ctime:节点创建时的时间戳.
- mZxid :Znode 被修改的事务 id
- mtime:节点最新一次更新发生时的时间戳
- ephemeralOwner:如果该节点为临时节点, ephemeralOwner 值表示与该节点 绑定的 session id.
在 client 和 server 通信之前,首先需要建立连接,该连接称为 session。
ZooKeeper shell
客户端连接 zkCli.sh
创建节点: create -s(顺序节点)/-e(临时节点) 节点路径 节点数据 acl(权限控制)
查看节点: ls 路径 ;get 文件路径(查看节点详细信息) ;ls2 文件路径(查看节点)
更新节点: set 文件路径 更新数据
删除节点: delete 文件路径; 删除之前必须删除子节点 rmr 文件路径
设置监听watch: get 节点路径 watch(一次性触发)