一,Zookeeper 是雅虎开发的后来贡献给了Apache,是一套用于分布式管理的框架
下载
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz
安装zookeeper 前先安装java jdk
wget https://download.oracle.com/java/18/latest/jdk-18_linux-x64_bin.tar.gz
安装
单机模式 ,单机运行,无法运行全部功能
伪分布模式 ,在单机运行,使用多线程模拟多个节点
完全分布式,多节点运行
- 关闭防火墙 systemctl stop firewall
- 禁止防火墙启动 systemctl disable firewall
- 解压: tar -xvf zookeeper-3.8.0-bin.tar.gz
- cd $(ZOOKEEPER_HOME)
- cp zoo_simple.cfg zoo.cfg ,ZK 启动时会自动找到 zoo.cfg
- vim zoo.cfg
- 修改 zoo.cfg 中的dataDir 数据存储目录 dataDir=/home/$(ZK_HOME)/tmp,保存,不指定默认 在 /tmp 下
- cd $(ZK_HOME)/bin 执行 zkServer.sh start 启动 ZK
- sh zkCli.sh 启动客户端
特点
- zookeeper 时一个树状结构,类似linux 文件系统 ,根节点是 /
- ZK 中的每个节点称为 Znode , 称为 Znode 树
- ZK 自带了一个根节点 [zookeeper]
- 创建节点时可以携带数据也可以不携带数据
- 在 zookeeper 中没有相对路径,所有路径必须从根节点开始 ls /test/tt
- Zookeeper 会将每个操作看成一个事务(Create Update Delete ),会生成事务id ,并且时全局递增的
节点信息
节点类型
命令
命令 | 解释 | 示例 |
---|---|---|
create | 创建节点 | create /test,创建一个 test 节点 |
ls | 查看根节点目录 | ls / |
delete | 删除节点 | delete /test |
rmr | 递归删除 | rmr /test |
get | 获取节点数据 | get /test |
set | 设置节点数据 | set /test ‘aaa’ |
get -s | 获取节点信息 | get -s /test |
create -e | 创建临时节点 | create -e /test/temp 临时节点不能有子节点 |
create -s | 创建持久顺序节点 | create -s /test/tttt |
完全分布式
- 准备3台服务器
- 关闭防火墙
- 服务器设置ssh免密登录
ssh-keygen ; ssh-copy-id servername
- 安装java JDK ,设置 环境变量
- 安装ZK,修改zoo.cfg 中的 dataDir = $ZK_HOME/tmp; 同时添加
server.1=ip:2888:3888 server.2=ip:2888:3888 server.3=ip:2888:3888 - 在每台服务器的dataDir 目录中创建 myid 文件,输入服务器每台服务器的id 和server.x 对应
- 启动所有服务器 sh zkServer.sh
- jps 查看进程 QuorumPeerMain 此进程说明启动成功
- sh zkServer.sh status 查看server 状态
执行 zkServer.sh status 时出现错误 Client port found: 2181. Client address: localhost. Error contacting service. It is probably not run
解决办法: 1. 确保JAVA JDK 已经正确安装; 2.关闭防火墙 systemctl stop firewalld.service 3.禁用防火墙 systemctl disable firewalld.service;
Zookeeper 选举机制
ZAB 协议
ZAB(zookeeper atomic broadcast) 原子广播,zookeeper进行原子广播和崩溃恢复的协议
ZAB 是基于 2PC 算法设计实现的,利用 过半性+PAXOS改进
原子广播: 保证每个节点的数据是同步的
zookeeper 查看日志
zookeeper 状态
- leader 管理者
- follower 跟随者,会参与选举和投票
- observer 观察者不会参与选举和投票,但是会监控选举结果,根据结果做出动作,大型集群中选举投票效率较低,将 90% 设置为 observer
- observer 配置
- 进入conf 目录,vim zoo.cfg
- 添加 peerType = observer
- server.x=ip:2888:3888:observer