ZK 分布式协调服务介绍
ZK 简介
官方介绍
ZooKeeper 是一种集中式服务,用于维护配置信息,命名,提供分布式同步
和提供组服务。所有这些类型的服务都以分布式应用程序的某种形式使用。
每次实施它们都需要做很多工作来修复不可避免的错误和竞争条件。由于难
以实现这些类型的服务,应用程序最初通常会吝啬它们,这使得它们在变化
的情况下变得脆弱并且难以管理。即使正确完成,这些服务的不同实现也会
在部署应用程序时导致管理复杂性。
通俗理解
Zookeeper 是一个分布式协调服务,就是为用户的分布式应用程序提供协调
服务。只要半数以上的节点存活, Zookeeper 就能正常提供服务。
Zookeeper 在底层管理(存储、读取)用户提交的数据,为数据提供节点
监听的服务。
分布式协调框架
分布式框架的好处
可靠性: 一个或几个节点的崩溃不会导致整个集群的崩溃
可伸缩性: 可以通过动态添加主机的方式以及修改少量配置文件,以便提升集群性能
透明性: 隐藏系统的复杂性,对用户体现为一个单一的应用
分布式框架的弊端
竞态条件:一个或多个主机尝试运行一个应用,但是该应用只需要被一个主机所运行
死锁: 两个进程分别等待对方完成
不一致性: 数据的部分丢失
分布协调服务,解决分布式服务在工作时产生的问题
- 竞态条件(多个主机同时对一个文件进行操作,俗称抢资源)
- 死锁(多个主机互相等待对方完成)
- 不一致性(资源文件丢失或者主机宕机)
典型应用场景: Hadoop 高可用的自动容灾
ZK 的作用
名字服务 //标识集群中的所有节点,(节点能够向其注册并产生唯一标识)
配置管理 //存储配置文件,以便共享
集群管理 //添加或删除节点同时,实时更新集群信息
选举机制
锁和同步服务 //当文件进行修改,会将其进行加锁,防止多用户同时写入
高有效性数据注册
ZK 集群的安装部署
节点说明
Zookeeper 安装在 s102、s103、s104上,这三个节点同时是 Hadoop 的 DataNode
ZK 本地模式安装配置
1 | # 0.安装配置在s101 |
ZK 完全分布式安装配置
脚本 xcall.sh
脚本 xsync.sh
1 | # 1.修改 zoo.cfg 文件,指定工作目录, |
配置 Hadoop 高可用的自动容灾
1 | # 0.关闭 Hadoop |
ZK 数据结构、命令
ZK 数据结构
Zookeeper 特性:
- Zookeeper 文件系统以 / 为根目录,文件系统为树形结构,每一个目录我们称之为结点
- Zookeeper 不存文件,只存数据
- 每个结点(znode)存放的数据最多1M
ZK 命令
1 | # 进入 Zookeeper 客户端 |
ZK API 的使用
编写 xzk.sh 脚本
1 |
|
编写 xzk.sh 脚本,是为了方便在 s101 节点上启动所有的 Zookeeper 进程
可执行的命令为:
- xzk.sh start
- xzk.sh stop
- xzk.sh status
ZK 的原理以及选举机制
ZK 的读写操作
读操作:所有zk节点都可以提供读请求(包括follower和leader)
写操作:需要先通过leader节点,leader同意之后,可以向指定节点写入
ZK 的选举机制
Zookeeper 虽然在配置文件中并没有指定 master 和 slave,但是 Zookeeper 工作时,是有一个节点为 leader,其他则为 follower
Leader是通过内部的选举机制临时产生的
Zxid: ZooKeeper 的事务 id,每次处理请求(读或写),此 id 会 +1
myid: 在配置时指定的 Zookeeper id
初始化选举
3个节点组成的 ZooKeeper 集群,myid 分别为102、103、104
- 启动 s102 ,选举状态为 looking 状态,
- 启动 s103 ,和 s102 进行通信,交换选举结果,根据 myid 的大小确认 s103 为 leader
启动 s104 ,和 s102 、s103 进行通信,交换选举结果,虽然 s104的 myid 的大于 s103 ,但是 s103 获得了一半以上的选票,s103 还是 leader
非全新集群选举机制
适用于 ZooKeeper 节点故障之后的重新选举
- 先比较 Zxid ,Zxid 大的胜出
- Zxid 相同的情况下, myid 大的胜出