当前位置: 代码迷 >> 综合 >> Apache Zookeeper 基本知识 安装部署
  详细解决方案

Apache Zookeeper 基本知识 安装部署

热度:89   发布时间:2023-12-03 10:18:56.0

Zookeeper基本知识

1、Zookeeper 作用:是用来管理hadoop服务 实现hadoop的高可用(HA)主服务 备份服务
2、Zookeeper 是一个分布式协调服务的开源框架 主要是用来解决分布式集群中应用系统的一致性问题
3、Zookeeper 本质上是一个分布式的小文件存储系统

Zookeeper的特性:

  • 全局数据一致: 集群中每个服务器保存一份相同的数据副本 ,客户端(client)无论链接到那个服务器,展示的数据都是一致的。
  • 可靠性: 如果消息被其中一台服务器接收 那么将被所有的服务器接收。
  • 顺序性: 包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布; 偏序是指如果在一个消息b在消息a后被同一个发送者发布,a必将排在b前面。
  • 数据更新原子性: 一次数据更新要么成功(半数以上节点成功) 要么失败 不存在中间状态 类似于 我做人的目标 要么第一 要么最后 哥没有中间
  • 实时性: Zookeeper 保证客户端将在一个时间间隔范围获得服务器的更新消息 或者服务器失效的消息 (心跳机制

Zookeeper集群角色

先看张图
在这里插入图片描述

  • 角色一:Leader 这家伙是Zookeeper 集群工作的核心
    事务请求(写操作)的唯一调度和处理者,保证集群事务处理的顺序性; 集群内部各个服务器的调度者。 对于create,setData,delete等有写操作的请求,则需要统一转发给leader处理,leader需要决定编号、执行操作,这个过程称为一个事务

  • 角色二:Follower 处理客户端翡事务(读操作)请求,转发事务请求给Leader
    参与集群Leader选举投票
    针对访问量较大的Zookeeper集群,还可新增观察者角色。

  • 角色三:Observer 观察者角色 ,观察Zookeeper集群的最新状态变化并将这些状态同步过来,其对于非事务请求可以进行独立处理,对于事务请求,则会转发给Leader服务器进行处理。
    --------不会参与任何形式的投票只提供非事务服务,通常用于在不影响集群事务处理能力的前提下提升集群的非事务处理能力。

Zookeeper集群搭建

Zookeeper集群搭建指的是ZooKeeper分布式模式安装 服务器数据 2n+1 台 奇数台服务器 保证Leader的选举
Zookeeper的运行需要JAVA环境 所以提前安装JDK
大致的安装步骤:

  • 配置主机名称到IP地址映射配置
  • 修改Zookeeper配置文件
  • 远程复制分发安装文件
  • 设置myid
  • 启动Zookeeper集群
  • 如果想要Observer模式 可在对应的节点的配置文件添加 配置peerType = observer 其次 必须在配置文件指定那个节点被指定为Observer 比如server.1:node1:2181:3181:obserrver

以下根据我自己的CentOS 7 环境 安装 我这里是3台

#cd 到根目录下
cd /#在根目录下创建文件夹 export
mkdir /export  #在export 文件夹下面创建 data 、software、server 文件夹
mkdir -p /export/server  #软件安装
mkdir -p /export/software #安装包
mkdir -p /export/data     #数据存放

我这里的JAVA 的JDK 版本是1.8.0 我是在官网下载的 是离线的安装方法 没有使用 yum
jdk:jdk-8u65-linux-x64.tar.gz 记得上传到上面创建的 software文件下

#使用一下命令解压要server文件夹下
tar zxvf jdk-8u65-linux-x64.tar.gz -C /export/server

这里是环境变量

#进入环境变量的配置文件
vim /etc/profile
#将一下的变量添加到末尾
export JAVA_HOME=/export/server/jdk1.8.0_65
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

一定仔细一点 不要出偏差 这就跟吸毒一样 一步错 步步错 完了你还不知道哪里错

JDK搞定以后 下面进入zookeeper的安装操作中

  1. 上传文件到/export/software 文件夹下
#这是我的zookeeper安装包 zookeeper-3.4.6.tar.gz#在software文件夹下 将安装包解压到server文件夹下
tar xzvf zookeeper-3.4.6.tar.gz -C /export/server
#进入server文件夹对解压后的文件夹 改名字
MV zookeeper-3.4.6/ zookeeper
  1. **配置环境变量 **
#修改/etc/profile文件
vim /etc/porfile#将下面的变量 添加到文件末尾
export ZOOKEEPER_HOME=/export/server/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin#保存退出以后 使用以下命令刷新环境变量
source /etc/profile    
  1. 进入zookeeper 的conf 配置
cd /export/server/zookeeper/conf
#修改conf 文件夹下的zoo_sample.cfg 文件名字
mv zoo_sample.cfg zoo_sample#修改配置文件的内容
vim zoo_sample
#文件中添加一下的变量
dataDir=/export/data/zkdata
#(心跳端口、选举端口)
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888

4、创建存储目录

mkdir /export/data/zkdata#指定服务编号
echo 1 > /export/data/zkdata/myid 

5.将node1中zookeeper服务文件拷贝到其他计算上

scp -r /export/server/zookeeper root@node2:/export/server
scp -r /export/server/zookeeper root@node3:/export/server

6.修改其他计算机的服务编号

#node2主机中
mkdir /export/data/zkdata
echo 2 > /export/data/zkdata/myid 
#node3主机中
mkdir /export/data/zkdata
echo 3 > /export/data/zkdata/myid 

7.- 修改其他计算机的环境变量配置文件 /etc/profile

  • 启动服务是会自动在当前目录小生成日志文件通过cat查看日志信

```powershell
zkServer.sh start  启动服务
zkServer.sh stop  停止服务
zkServer.sh status  查看状态

编写脚本 一键启动

#!/bin/bash
hosts=(node1 node2 node3)
for host in ${
    hosts[*]}
dossh $host "source /etc/profile;/export/server/zookeeper/bin/zkServer.sh start"
done#!/bin/bash
hosts=(node1 node2 node3)
for host in ${
    hosts[*]}
dossh $host "/export/server/zookeeper/bin/zkServer.sh stop"
done##查看集群状态
jps(查看进程)
zkServer.sh status(查看集群状态,主从信息)如果启动不成功,可以观察zookeeper.out日志,查看错误信息进行排查

截止到目前 我的zookeeper集群已经创建OK了

下面来点儿操作
连接

zkCli.sh -server node1

创建节点

 create [-s] [-e] path data acl-s 指定有序-e 指定临时节点path 指定创建的节点路径data 节点写入的数据acl 会自动生成

创建顺序节点:
在这里插入图片描述
创建临时节点:
在这里插入图片描述
创建永久节点:
在这里插入图片描述

查看节点

ls 节点路径 查看节点基本信息是否有子节点
ls2 节点路径 查看节点详情信息是否有子节点
get 节点路径 查看节点详情信息和节点写入的数据

在这里插入图片描述

修改

set  节点 数据

set path data [version]
data就是要更新的新内容,version表示数据版本。
在这里插入图片描述
现在dataVersion已经变为1了,表示进行了更新。

删除

delete 节点 数据

节点限制

setquota -n|-b val path
-n 限制个数
-b 限制数据大小
val 限制的数据
path 节点路径delquota path 删除限定

在这里插入图片描述
listquota path 列出指定节点的quota
子节点个数为2,数据长度-1表示没限制
子节点个数为2,数据长度-1表示没限制
delquota [-n|-b] path 删除quota

删除多层

rmr /路径

查看历史信息

history

在这里插入图片描述

数据模型

树状层次结构,每个节点称之为Znode

  • Znode兼具文件和目录两种特点
  • Znode具有原子性操作
  • Znode存储数据大小限制 1M
  • Znode通过路径引用
  • 节点信息
    • stat 状态信息,描述节点版本,权限
    • data 与节点关联的数据
    • children 关联的子节点信息
  • 节点类型
    • 临时节点
      • 当使用客户端连接服务端整个过程,临时节点会一直存在,一旦客户端断开链接,临时节点会被清除掉
    • 永久节点
      在这里插入图片描述
    • 序列化特性
      • 会给节点指定编号,让节点有顺序性
  • 节点属性
  相关解决方案