Zookper集群搭建

article/2025/10/31 7:16:49

🍅程序员小王的博客:程序员小王的博客

🍅 欢迎点赞 👍 收藏 ⭐留言 📝

🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕

一、搭建zookper集群前的准备

1、准备三台linux并实现三台机器机器免密码登录

  • 为什么要免密登录

    • Hadoop 节点众多, 所以一般在主节点启动从节点, 这个时候就需要程序自动在主节点登录到从节点中, 如果不能免密就每次都要输入密码, 非常麻烦

  • 免密 SSH 登录的原理

    1. 需要先在 B节点 配置 A节点 的公钥

    2. A节点 请求 B节点 要求登录

    3. B节点 使用 A节点 的公钥, 加密一段随机文本

    4. A节点 使用私钥解密, 并发回给 B节点

    5. B节点 验证文本是否正确

(1)三台机器生成公钥与私钥

  • 在三台机器执行以下命令,生成公钥与私钥

ssh-keygen -t rsa

执行该命令之后,按下三个回车即可

(2)拷贝公钥到同一台机器

三台机器将拷贝公钥到第一台机器

  • 三台机器执行命令:

ssh-copy-id node1

  • 如果报错及解决办法

/usr/bin/ssh-copy-id: ERROR: ssh: Could not resolve hostname node1: 
Name or service not known
  • 解决办法:在集群上的所有机器上执行vi /etc/hosts

192.168.43.129 node1
192.168.43.130 node2
192.168.43.131 node3

(3)复制第一台机器的认证到其他机器

将第一台机器的公钥拷贝到其他机器上

在第一台机器上面指向以下命令

scp /root/.ssh/authorized_keys node2:/root/.sshscp /root/.ssh/authorized_keys node3:/root/.ssh

2、三台机器时钟同步

  • 为什么需要时间同步

    • 因为很多分布式系统是有状态的, 比如说存储一个数据, A节点 记录的时间是 1, B节点 记录的时间是 2, 就会出问题

## 安装
yum install -y ntp## 启动定时任务
crontab -e

随后在输入界面键入

*/1 * * * * /usr/sbin/ntpdate ntp4.aliyun.com;

二、Zookeeper简单介绍

1、什么是Zookeeper

  • Zookeeper 是一个开源的分布式协调服务框架 ,主要用来解决分布式集群中 应用系统的一致性问题

  • Zookeeper 是 Google Chubby 思想的一个开源实现

  • Zookeeper 本质上是一个分布式文件系统, 适合存放小文件, 通过文件系统来实现分布式协调

2、什么是分布式文件系统?

参考博客:https://blog.csdn.net/qq\_37862148/article/details/113999206

(1)一般文件系统

在我们日常生活工作中,自己使用的电脑上都会安装操作系统,比如Windows。我们经常进行的操作如新建文件夹、新建文件、删除文件等等,都是文件系统在帮助我们工作,Windows文

件系统有FATFS、VFATFS、NTFS等。除了Windows外,Linux也有ext、vfs等等文件系统,像这种一台计算机,单个存储节点、一个操作系统,一个具体的文件系统的场景称之为一般文件系统。

(2)分布式文件系统

分布式文件系统中的数据存储在多台机器上,这些专门用来存储数据的机器称之为存储节点,由多个节点构成分布式集群,节点上的小的分布式文件系统组合成总的分布式文件系统,由主服务器对总的文件系统进行管理。用户任意访问某一台主机,都能获取到自己想要的目标文件。

(3)一般文件系统和分布式文件系统的对比

 

(4)Zookeeper的分布式文件系统

  • 在上图左侧, Zookeeper 中存储的其实是一个又一个 Znode, Znode 是 Zookeeper 中的节点

    • Znode 是有路径的, 例如 /servers/host1, /``servers``/host2, 这个路径也可以理解为是 Znode 的 Name

    • Znode 也可以携带数据, 例如说某个 Znode 的路径是 /data/host1, 其值是一个字符串 "192.168.0.1"

  • 正因为 Znode 的特性, 所以 Zookeeper 可以对外提供出一个类似于文件系统的视图(前端), 可以通过操作文件系统的方式操作 Zookeeper

    • 使用路径获取 Znode

    • 获取 Znode 携带的数据

    • 修改 Znode 携带的数据

    • 删除 Znode

    • 添加 Znode

    • 等等...

3、Zookeeper是分布式的

  • 首先呢, Zookeeper 是分为服务端和客户端的, 客户端有 Java 的客户端, 有 Shell 命令行的客户端等, 客户端通过一个类似于文件系统的 API 来访问 Zookeeper 集群

  • 但是事实上, 客户端最终是直接访问 Zookeeper 集群, 集群中有两大类角色, 一类是 Leader, 一类是 Follower, 其实就是主从, Leader 负责读和写, Follower 只能读, 遇到会产生修改的请求会转发给 Leader 处理, 这是因为 Zookeeper 本质上就是为了在分布式环境中对消息的一致性的支持, 而 Zookeeper 所基于的 ZAB 协议是 Paxos 协议的一个变种, ZAB 协议中是有一个全局的事务生成者, 就是 Leader, 修改设计到在分布式环境下对事务达成一致, 必须由 Leader 发起

  • 例子

比如说一个常见的分布式主从系统, 如果有 ZK 在的话, 主节点不需要和每个从节点保持连接, 只需要监听从节点创建的 Znode, 便可以知道谁在线

4、Zookeeper 能做什么?

  • 发布订阅

  • 命名服务

  • 分布式锁

  • 分布式协调

三、Zookeeper集群部署

1、集群部署服务器规划

服务器IP主机名myid的值
192.168.43.129node11
192.168.43.130node22
192.168.43.131node33

2、下载Zookeeper的压缩包

  • 下载网站:http://archive.apache.org/dist/zookeeper/

  • 我们在这个网址下载我们使用的zk版本为3.4.9,下载完成之后,上传到我们的linux的/usr/apps路径下准备进行安装

3、解压

#1.到达/usr/apps
cd /usr/apps
#2.解压
tar -zxvf zookeeper-3.4.9.tar.gz
#将zookeeper改名
mv zookeeper-3.4.9 zookeeper

  • zookeeper结构

4、修改配置文件

  • 第一台机器修改及配置

cd /usr/apps/zookeeper/conf/
# 复制一份并改名
cp zoo_sample.cfg zoo.cfg

#创建数据存储文件
mkdir -p /usr/apps/zookeeper/zkdatas/

  • 修改zoo.cfg

# example sakes.
dataDir=/usr/apps/zookeeper/zkdatas
# 保留多少个快照
autopurge.snapRetainCount=3
# 日志多少小时清理一次
autopurge.purgeInterval=1
# 集群中服务器地址
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888

5、添加myid配置

  • 第一台机器(node1)上/usr/apps/zookeeper/zkdatas/这个路径下面创建文件,文件名为myid,文件内容为:

echo 1 > /usr/apps/zookeeper/zkdatas/myid

6、安装包分发

(1)安装包分发到其他机器

  • 第一台机器上面执行以下两个命令,将zookeeper文件转发到另外两个节点

scp -r  /usr/apps/zookeeper/ node2:/usr/apps/zookeeper/
scp -r  /usr/apps/zookeeper/ node3:/usr/apps/zookeeper/
  • 第二台机器上修改myid的值为2·

echo 2> /usr/apps/zookeeper/zkdatas/myid
  • 第三台机器上修改myid的值为3

echo 3> /usr/apps/zookeeper/zkdatas/myid

7、三台机器启动zookeeper服务

  • 三台机器启动zookeeper服务(这个命令三台机器都要执行)

/usr/apps/zookeeper/bin/zkServer.sh start
  • 查看启动状态

/usr/apps/zookeeper/bin/zkServer.sh  status

四、Zookeeper的Shell客户端操作

1、Zookeeper服务命令

ZooKeeper服务命令:
启动ZK服务:bin/zkServer.sh start
查看ZK服务状态:bin/zkServer.sh status
停止ZK服务:bin/zkServer.sh stop
重启ZK服务:bin/zkServer.sh restart

2、Zookeeper常用命令

命令说明参数
create [-s] [-e] path data acl创建Znode-s 指定是顺序节点 -e 指定是临时节点
ls path [watch]列出Path下所有子Znode
get path [watch]获取Path对应的Znode的数据和属性
ls2 path [watch]查看Path下所有子Znode以及子Znode的属性
set path data [version]更新节点version 数据版本
delete path [version]删除节点, 如果要删除的节点有子Znode则无法删除version 数据版本
rmr path删除节点, 如果有子Znode则递归删除
setquota -n|-b val path修改Znode配额-n 设置子节点最大个数 -b 设置节点数据最大长度
history列出历史记录
  • 连接Zookeeper服务

zkCli.sh -server node1:2181

显示welcome to zookeeper极为成功

  • 创建普通节点

 create /app1 hello
  • 创建顺序节点

create -s /app2 world
  • 创建临时节点

 create -s /tempnode0 world 
  • 创建顺序的临时节点

create -s -e /tempnode1 aaa

  • 获取节点数据

get /app1

  • 修改节点数据

set /app1 helloWhj

  • 删除节点

 #删除的节点不能有子节点delete  /app1 # 递归删除rmr    /app1

3、Znode的特点和类型,属性,通知类型,会话等概念

(1)Znode 的特点

  • 文件系统的核心是 Znode

  • 如果想要选取一个 Znode, 需要使用路径的形式, 例如 /test1/test11

  • Znode 本身并不是文件, 也不是文件夹, Znode 因为具有一个类似于 Name 的路径, 所以可以从逻辑上实现一个树状文件系统

  • ZK 保证 Znode 访问的原子性, 不会出现部分 ZK 节点更新成功, 部分 ZK 节点更新失败的问题

  • Znode 中数据是有大小限制的, 最大只能为1M

  • Znode是由三个部分构成

    • stat: 状态, Znode的权限信息, 版本等

    • data: 数据, 每个Znode都是可以携带数据的, 无论是否有子节点

    • children: 子节点列表

(2)Znode 的类型

  • 每个Znode有两大特性, 可以构成四种不同类型的Znode

    • 持久性(-e)

      • 持久 客户端断开时, 不会删除持有的Znode

      • 临时 客户端断开时, 删除所有持有的Znode, 临时Znode不允许有子Znode

    • 顺序性(-s)

      • 有序 创建的Znode有先后顺序, 顺序就是在后面追加一个序列号, 序列号是由父节点管理的自增

      • 无序 创建的Znode没有先后顺序

(3)Znode的属性

  • dataVersion 数据版本, 每次当Znode中的数据发生变化的时候, dataVersion都会自增一下

  • cversion 节点版本, 每次当Znode的节点发生变化的时候, cversion都会自增

  • aclVersion ACL(Access Control List)的版本号, 当Znode的权限信息发生变化的时候aclVersion会自增

  • zxid 事务ID

  • ctime 创建时间

  • mtime 最近一次更新的时间

  • ephemeralOwner 如果Znode为临时节点, ephemeralOwner表示与该节点关联的SessionId

(4)通知机制

  • 通知类似于数据库中的触发器, 对某个Znode设置 Watcher, 当Znode发生变化的时候, WatchManager会调用对应的Watcher

  • 当Znode发生删除, 修改, 创建, 子节点修改的时候, 对应的Watcher会得到通知

  • Watcher的特点

    • 一次性触发 一个 Watcher 只会被触发一次, 如果需要继续监听, 则需要再次添加 Watcher

    • 事件封装: Watcher 得到的事件是被封装过的, 包括三个内容 keeperState, eventType, path

KeeperStateEventType触发条件说明
None连接成功
SyncConnectedNodeCreatedZnode被创建此时处于连接状态
SyncConnectedNodeDeletedZnode被删除此时处于连接状态
SyncConnectedNodeDataChangedZnode数据被改变此时处于连接状态
SyncConnectedNodeChildChangedZnode的子Znode数据被改变此时处于连接状态
DisconnectedNone客户端和服务端断开连接此时客户端和服务器处于断开连接状态
ExpiredNone会话超时会收到一个SessionExpiredException
AuthFailedNone权限验证失败会收到一个AuthFailedException

(5)会话

  • 在ZK中所有的客户端和服务器的交互都是在某一个Session中的, 客户端和服务器创建一个连接的时候同时也会创建一个Session

  • Session会在不同的状态之间进行切换: CONNECTING, CONNECTED, RECONNECTING, RECONNECTED, CLOSED

  • ZK中的会话两端也需要进行心跳检测, 服务端会检测如果超过超时时间没收到客户端的心跳, 则会关闭连接, 释放资源, 关闭会话


http://chatgpt.dhexx.cn/article/Sep6eXIX.shtml

相关文章

分布式系统服务框架Zookeeper介绍与原理实现

分布式数据管理之痛点 为了确保微服务之间松耦合,每个服务都有自己的数据库, 有的是关系型数据库(SQL),有的是非关系型数据库(NoSQL)。 开发企业事务往往牵涉到多个服务,要想做到多个服务数据…

给视频加滚动字幕,给视频加字幕制作mv 录制的视频配背景音乐

给视频添加滚动字幕方法其实很简单,像我们下载的电影,歌曲,用手机录制的视频都可以加字幕,或者滚动字幕,也可以加背景音乐或其它声音,给视频开头或结尾加一张图片或多张图片等等都是可以实现的,…

手把手叫你制作一个精美的在线音乐播放器

最近项目中要增加一些特殊的功能,实现音乐的在线播放。虽说网上源码一大把,demo一大堆,但是能用的其实寥寥无几,看来关键时刻还是自己动手,丰衣足食啊。话不多说,直接看效果图吧: 看是不是很美观…

微信小程序中将图片与音乐制作成MV

最近一直在开发一个类似于小年糕的微信小程序,在开发制作MV功能时 ,花费了一些心思,其间主要遇到了以下一些问题点: 1. 上传图片的动画效果如何像播放视频一样实现播放与暂停? 2. 用户上传的图片数量不确定&#xf…

FL Studio中文版21最新免费音乐编曲软件制作工具

FL Studio较为适合专业的音乐制作者,操作难度较大,学习门槛也较高;Studio One则主打一站式的音乐制作,从编曲到录音到后期的专辑制作都可以在其中实现,同时操作难度不大,对初学者和业余爱好者都较为友好。 …

mv

mv 移动文件或改名 mv 命令(move 的缩写),既可以在不同的目录之间移动文件或目录,也可以对文件和目录进行重命名。 该命令的基本格式如下: [rootlocalhost ~]# mv 【选项】 源文件 目标文件“mv” 默认执行命令(mv -…

怎样做音乐相册怎样制作?手把手教你制作

大家平时出门游玩的时候,会拍摄一些好看的照片吗?那你们会将这些照片分享在社交平台上吗?普通的照片分享,有时会显得比较枯燥单调,其实我们可以将这些照片制作成音乐相册,这样就可以丰富照片的内容&#xf…

Audacity(电脑音频剪辑软件)官方中文版V3.0.2 | 完全免费的音乐制作软件audacity下载

Audacity 是一款专业易于使用且完全免费的音乐制作软件,高度可定制的界面能实时显示预览,具备多轨音频剪辑和音频录制功能,提供了数十种可修改或自己创建的插件以及无限的撤消和重做能力,能将磁带和唱片转换成数字唱片或 CD&#…

手把手教你批量制作MV连播视频

一、点击下载CR MVMixer解压到D盘 找到图标双击打开CR MVMixer 本软件授权注册码可以登陆酷软街获取 右下角点击注册,填入注册码激活。 软件操作页面,左侧是加载音乐MP3跟LRC歌词的 右侧可以添加视频素材,设置封面。 二、加载素材&#xf…

MV制作器UI版来噜

一、项目介绍 MV制作器UI版来噜 在之前的制作MV的项目中,我们使用代码来调用文心大模型API,批量的获取图片,然后我们需要使用专业德视频剪辑工具譬如pr或剪映等完成后续的步骤,但并不是所有人都会使用剪辑软件… 那有没有什么可…

轻音——基于Swing与JavaFx的音乐播放器

简介 轻音是一款我个人开发的支持本地和在线音乐的播放器,我制作这款软件的初衷也是为了消除不同平台之间版权的差异,让听歌不再“跨平台化”,实现听歌自由使用的技术:100% Java 编程语言,98% Swing 开发GUI&#xff…

LaTeX会议论文添加版权信息

1. 在导言区增加 \usepackage{fancyhdr} \renewcommand{\headrulewidth}{0pt} \renewcommand{\footrulewidth}{0pt} 2. maketitle后增加 \thispagestyle{fancy} \fancyhead{} \lhead{} \lfoot{\copyright~2014 IEEE} \cfoot{} \rfoot{}, 效果如下

CCF论文会议 IEEE 如何查询某个会议期刊的所有文章

1. 下载CCF英文列表 CCF英文会议期刊 列表目录 下载 2. 找到要查询的会议,点击后面的网址 3. 就可以看到该会议期刊列年的整理好的记录,随便点击一个进入 4. 可以看到该年收录的所有文章 5. 可以点击这里查看文章详情 微程序学堂

会议论文扩展摘要写作指南 conference extended abstract

简单的讲就是一个迷你版的论文,除了篇幅非常短只有2-4页之外,论文该有的部分都要有(e.g. Introduction, Methods, Discussion …)。扩展摘要可能需要包含一个abstract,也可能直接从introduction开始,视不同…

计算机发顶级会议论文难,发会议论文不如发期刊?被反驳的无言以对……

顶级会议和顶级期刊哪个牛?是不是发会议不如发期刊呢? 本期关键词:SCI期刊,顶级会议,计算机 有网友在小木虫开帖称自己投稿中了机器人和自动化领域top会议——IROS2012,引发网友关于“投会议论文还是投期刊”的大讨论。 “真心恭喜楼主呀!不过国内不太认可会议呀,有这水…

撰写全英文EI会议论文值得注意的要点!

首先,EI会议论文有用吗?当然是有用的,EI是国际上三大检索系统之一,所以EI论文肯定是有用的,是受认可的,但EI检索的不单单是学术期刊,还有学术会议,期刊论文和会议论文是不同的&#…

ISTP会议论文检索

目录 1. ISTP会议论文的概念 2. ISTP会议论文的特点 3. ISTP会议论文检索 4. ISTP会议论文检索基本检索,检索步骤 1. ISTP会议论文的概念 ISTP会议论文是指在学术会议上宣读和交流的论文、报告及其他有关资料,包括会议前参加会议者预先提交的论文文…

参考文献是会议论文应该什么格式?

“既然你诚心诚意的发问了,那我就大发慈悲的告诉你!”(请自行带入火箭队三人组语气,谢谢!) 注意啦!参考文献会议论文的必须要素在此! [序号]作者名题名[C]//(出版地)出版者出版年(…

会议论文和期刊论文在写作上有什么区别?有什么侧重点?

作为一名科研工作者,无论你是初入圈内的“小萌新”还是久经沙场的“老将”,写论文都是我们的必经之路,而要想论文投中,就需要我们的积极努力啦!其中,杂志社以及很多大型学术会议的征稿就是很好的一个途径哦…

科普文章:会议论文VS期刊论文,两者有何区别?学界的认可度两者一致吗?

文章目录 一、会议论文和期刊论文的概念1.1 会议论文1.2 期刊论文1.3 总结 二、不同之处2.1 内容的不同2.2 审稿周期的不同2.3 认可度的区别 三、投稿的一些建议四、自己的一点小想法 计算机深度学习方向研一学生一枚,论文才有想法,下一步打算开始写了&a…