第01篇_ZooKeeper

第01章_ZooKeeper快速入门

第一节 ZooKeeper简介

1. 什么是ZooKeeper?

ZooKeeper 是一个基于观察者模式设计的开源分布式协调服务,它负责存储和管理大家都关心的数据,一旦这些数据发生变化,便会通知相应的观察者做出响应。

数据模型结构如下,和Unix文件系统非常相似:

image-20241127101657568

其中每个节点称为ZNode,可以通过其路径唯一标识,并存储不超过 1MB 的数据。

 

2. 基本特性

image-20241127102305707

 

3. 选举机制

1) 第一次启动时

image-20241127110922783

总结:投票过半数时,服务器 id 大的胜出

 

2) 非第一次启动时

image-20241127212539375

总结: ①EPOCH大的直接胜出 ②EPOCH相同,事务id大的胜出 ③事务id相同,服务器id大的胜出

 

4. 应用场景

Zookeeper 提供的服务包括:统一命名服务统一配置管理统一集群管理服务器节点动态上下线(注册中心)软负载均衡等。

 

1) 统一命名服务

image-20241127102735347

 

2) 统一配置管理

image-20241127105215344

 

3) 统一集群管理

image-20241127105329569

 

4) 注册中心

image-20241127105403308

 

5) 负载均衡

image-20241127105512341

 

 

第二节 安装部署

1. 集群部署

ZooKeeper一般部署为集群模式,且节点数为奇数,如3或5台等,当整个集群中有半数以上的节点存活时,那么整个集群环境才可用。

服务器台数多:好处,提高可靠性;坏处:提高通信延时。

image-20241127212709118

为什么ZooKeeper集群一般为奇数个节点呢?

答:因为ZooKeeper集群选举leader时,必须要求半数以上的节点通过(不包含半数),因此3台和2台服务器都是要求至少2台可用,整个集群才可用,以防止“脑裂”现象,同理,5台和4台也是类似情况。

 

1) 前置准备

 

2) 配置zoo.cfg

 

3) 创建myid文件

 

4) 设置环境变量

修改用户启动配置文件:vim ~/.bash_profile,然后重新加载:source ~/.bash_profile

 

5) 设置开机启动

cd /etc/rc.d/init.d目录创建zookeeper服务:vim zookeeper,并授权:chmod +x /etc/rc.d/init.d/zookeeper

然后添加到开机启动项:chkconfig --add zookeeper,可通过chkconfig --list查看是否添加成功。

最后,可以通过reboot命令重启机器,查看zookeeper是否开机启动:service zookeeper status

注意:若出现“服务 zookeeper 不支持 chkconfig”错误,请检查/etc/init.d/zookeeper文件的内容。

 

2. ZooKeeper启停

注意:如果查看ZK状态时发现ZK不在运行中,先使用`./zkServer.sh start-foreground查看启动报错信息。

 

3. 连接ZooKeeper

 

 

第三节 客户端命令

1. 查询命令

 

2. 修改命令

 

3. 其它命令

 

 

第四节 客户端API

1. 基础案例

注意:

  1. ZooKeeper集群中,只有 Leader 有权限发起数据修改操作,如果向 Follower 发起修改请求,则会转给 Leader 处理。

 

2. 实现注册中心

1) 服务注册

 

2) 服务监听

 

3) 测试

 

 

3. 实现分布式锁

1) 原生方式

 

2) Curator 方式

首先需导入 Curator 相关依赖:

然后创建一个可重入锁并测试:

提示:

  1. 更多 Curator 框架的用法请参考:https://curator.apache.org/index.html