【Zookeeper之轨迹】Zookeeper 入门使用(集群使用 Docker 模拟)

大数据-Zookeeper的单机安装 一、Zookeeper单机安装 一、安装步骤 1、关闭Linux(CentOS6.X版本)的防火墙 临时关闭防火墙:serviceiptablesstop 永久关闭防火墙:chkconfig iptables off 2、下载安装JDK :先卸载后安装 1、先输入java -version 查看是否安装了jdk 2、如果安装了,检查下安装的路径which java(查看JDK的安装路径) 3、卸载 rm -rf JDK地址(卸载JDK) rm -rf /usr/java/jdk/... 阅读详情


1. 安装启动与单机测试

① 下载安装包

https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/
选择 apache-zookeeper-3.5.7-bin.tar.gz

② 在 Linux 服务器中解压

得到以下目录,然后新增 data 目录存放 zookeeper 数据(mkdir data)

bin  conf  docs  lib  LICENSE.txt  logs  NOTICE.txt  README.md  README_packaging.txt

③ 配置模板

进入 conf 目录,修改 zoo_sample.cfg
将模板中的 dataDir 模板路径改成上边新增的 data 目录(否则存放在 /tmp 下,数据会被定期清除)

④ 启动 zookeeper

进入 bin 目录,执行 ./zkServer.sh start 启动服务端
之后再执行 ./zkCli.sh 启动客户端

在启动完服务端后,可以通过 jps 命令查看服务端是否启动完毕
如果启动成功的话,将会看到 QuorumPeerMain 进程

[root@IceClean data]# jps
6173 QuorumPeerMain

也可以通过 ./zkServer.sh status 查看服务端状态

》》》问题排查

——(1) 服务端启动有带 start,而客户端没有
如果服务端忘记带 start,此时服务并没有真正启动,这是客户端连接就会报错

——(2) 服务端异常关闭
如果服务端异常关闭了,也会导致客户端连接报错

以上两种情况,客户端连接时,都会抛出以下错误:

[myid:localhost:2181] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1244] - Socket error occurred: localhost/127.0.0.1:2181: Connection refused

该怎么解决呢?
可以直接使用 ./zkServer.sh stop关闭服务
也可以进入 data 目录(也就是配置文件中 dataDir 所配置的那个目录),将 zookeeper_server.pid 删除,在用正确的方法启动服务就好了

——(3) 启动步骤正确了,却没有 QuorumPeerMain 进程
这时候可能是 zookeeper 3.5 特性所致,默认使用了 8080 端口,结果该端口被 tomcat 占用了,导致服务端启动失败,可以打开 logs/ 下的日志文件进行验证:

Caused by: java.io.IOException: Failed to bind to /0.0.0.0:8080

如果看到了这个异常,那多半就是这个问题了
解决方法是修改配置文件的服务端默认端口,在 zoo.cfg 下,加入以下内容:

(端口随意设置)
admin.serverPort=8888

再次以正确的方式启动,会发现服务端正常启动,客户端也正常连接啦~

》》》成功消灭


2. Zookeeper 集群操作

注意:以下操作均在集群中操作,与服务器主机无关

这里需要用到的集群,可以使用虚拟机搭
而如果使用的是云服务器,而又不想买多台服务器的(就像我,家里没矿)
就可以使用 Docker 来搭建集群了,可以看我这篇文章(挺长的,不过真的是保姆级哦)
【Docker x Hadoop】使用 Docker 搭建 Hadoop 集群(从零开始保姆级)

终于搭好集群啦,是不是很不容易?(本人搞了几天,也是跌跌碰碰摸索出来的)
那接下拉切入另一个正题叭

① 将 Zookeeper 安装到每个容器中

这个按照实际情况来,然后再每个容器中解压
scp apache-zookeeper-3.5.7-bin.tar.gz root@hadoop001:/home/hadoop
scp apache-zookeeper-3.5.7-bin.tar.gz root@hadoop002:/home/hadoop
scp apache-zookeeper-3.5.7-bin.tar.gz root@hadoop003:/home/hadoop

② 为每台 hadoop 定一个编号
在解压目录下,创建 data 文件夹(也就是自定义的那个),在里边创建 myid 文件,写入编号
即在 hadoop001 hadoop002 hadoop003 中,该文件的内容依次为 1 2 3

③ 在 zoo.cfg 文件末尾补充配置

server.1=hadoop001:2888:3888
server.2=hadoop002:2888:3888
server.3=hadoop003:2888:3888

格式可以总结为 server.A=B:C:D

  • A 表示服务器的编号,即上边设置的 myid
  • B 表示服务器的地址
  • C 表示服务器 Follower 与集群中 Leader 服务器交换信息的端口
  • D 表示在 Leader 挂掉时,用来选举新 Leader 的端口

③ 启动 zookeeper 集群

在 3 个容器中,分别执行 ./zkServer.sh 启动 zookeeper
每次执行完毕可以使用 ./zkServer status 查看状态
然后我们就会发现,但第一行个容器启动时,状态为:
在这里插入图片描述
这是因为,我们一共配置了三台服务器,但现在只启动了一台
根据 zookeeper 的规则,必须有过半的服务器处于运行状态,集群才算正常运行
而现在只启动 1 台,没有过半,所以状态值为 ERROR

我们再以相同的方式,启动 hadoop002 和 hadoop003
再回过头看状态,就会发现 hadoop002 是 leader,而其他两台是 follower
在这里插入图片描述

④ Leader 选举机制

选举存在两个阶段:服务器启动时的选举、运行过程中 leader 服务器宕机重新选取
规则如下:

  • 服务器 ID (myid):编号越大在选举算法中权重越大
  • 事务 ID (zxid):值越大说明数据越新,权重越大
  • 逻辑时钟 (epoch-logicalclock):同一轮投票过程中的逻辑时钟值是相同的,每投完一次值会增加

⑤ 集群启动与停止脚本

⑥ 写入流程

只有 Leader 有处理写请求的能力
所以有两种情况
① Leader 收到了写入请求:他将自己先写入一份,然后通知其他 follower 执行写入操作,follower 写入完毕后,将放回消息给 leader,一旦 leader 发现写入数量已经达到集群半数,便会放回给客户端写入成功的消息,然后一般继续通知其他服务器尽心感谢如操作
② 如果是 follower 收到了写入请求,由于没有执行写入操作的权限,它将会把请求交给 leader,leader 依旧先将数据写入自己的,再通知其他服务器写入,等到写入数量过半时,leader 会通知被请求的 follower 已经写入成功,再由该 follower 放回给客户端写入成功的消息

3. 命令行操作

通过 ./zkCli.sh 进入 zookeeper 后,可以进行以下操作

1)	查看指定路径的子节点__例:ls -R /
	ls [选项] <结点路径>
		-s	显示节点详情
		-R	递归显示所有子节点

2)	create <节点路径> <节点值>__例:create /xxx/node1 "node data"
		-s	创建带序号的节点
			不带序号的节点不允许重复创建,会报错
			而带序号的节点被多次创建时,由于节点带序号可重复创建,只不过序号 +1
			注意,该序号是相对与整个系统的,系统中有一个默认的计数器,决定所有带序号节点的序号
		-e	创建临时节点
			临时节点在客户端关闭后,将被清除

3)	查看节点数据
	get -s <节点路径>
	
4)	修改节点值
	set <节点路径> <新值>

5)	监控节点变化,但该节点值发生变化时,便会被监听到,但一次监听只能监听一次变化
	get -w <节点路径>

6)	监听子节点变化,铜钴盐也是注册一次监听只能生效一次
	ls -w <节点路径>

7)	删除节点
	delete <节点路径>
		这种只能删除最小节点(及空节点)
	delete
【HBase之轨迹】(1)使用 Docker 搭建 HBase 集群 继 hadoop 和 zookeeper 之后,再次使用 docker 搭建 hbase 集群,详细说明搭建过程以及 docker 搭建过程中会才踩到的坑。同时 阅读详情

相关推荐

Flink部署模式解析:Local、Standalone与YARN对比

分布式计算框架Flink的部署模式直接影响系统性能和运维效率。作为流批一体处理引擎,Flink支持Local、Standalone和YARN三种主流部署方式,每种模式在资源管理、任务调度和容错机制上各有特点。Local模式适合开发测试,通过内存队列实现微秒级延迟;Standalone模式采用静态Slot分配,需要配合ZooKeeper实现高可用;YARN模式则支持动态资源协商,适合生产环境。理解这些部署原理,能帮助开发者根据数据规模、团队技能和SLA要求做出合理选择,例如金融风控系统常采用YARN实现异构资

weixin_34242331的博客 390

从渗透测试视角复盘:若依(RuoYi)框架的几类常见未授权访问漏洞与实战利用

本文从渗透测试视角深入分析了若依(RuoYi)框架的常见未授权访问漏洞及其实战利用方法。通过Druid监控控制台突破、Swagger接口沙箱逃逸等技术手段,揭示了框架默认配置的安全风险,并提供了防御体系构建建议,帮助开发者提升系统安全性。

天天开心 519

hcaptcha逆向实战:从API解析到参数构造的完整链路

本文详细拆解了hcaptcha验证码的逆向实战流程,从环境准备、捕获API与版本号,到解析核心加密逻辑hsw.js,再到构造getcaptcha请求参数,最后完成验证提交。文章重点剖析了motionData、n、c等关键参数的获取与构造方法,为开发者模拟浏览器行为、实现自动化验证提供了清晰的完整链路指南。

ik678901的博客 629

从Starlink看NTN:SSB波束数量少,用户体验真的会差吗?

当SpaceX的Starlink以每月新增上百颗卫星的速度扩张其星座时,一个有趣的技术现象正在引发行业讨论:为何这个全球最大的低轨卫星网络选择使用相对较少的波束数量?波束数量的选择远非简单的技术参数,而是系统设计哲学、商业策略与终端用户体验的复杂平衡。传统地面网络可以依赖密集基站实现精准覆盖,而卫星通信必须面对一个根本性挑战:如何在数百公里的高空,用有限的射频资源服务广阔的地理区域。当我们在撒哈拉沙漠测试不同波束方案时,发现了一个关键洞见:最佳波束数量不是固定的技术参数,而是随网络发展阶段变化的动态值。

weixin_32308101的博客 332

【代码】获取高级行情数据,并通过 qmt 进行实际下单交易,自动实现止盈止损管理

【代码】获取高级行情数据,并通过 qmt 进行实际下单交易,自动实现止盈止损管理

XD1996CD的博客 4108

逆变器方案(工频全套)工频正弦波逆变器开发板全套设计资

逆变器方案(工频全套)工频正弦波逆变器开发板,24V-72V通用12只TO-247封装MOS管,额定输出功率6500W以下;配有触摸屏操作界面,运行数据一目了然,带市电互补UPS功能,可选择电池优先或市电有限工作,我们的开发板均从实战角度出发,让您的学习更便捷,包含全套设计资料,PCB.原理图.源代码,程序均有中文注释,MCU选用美国微芯公的PIC-8位单片机,民用数字电源首选单片机,抗干扰能力强,运行稳定。...

m0_73494033的博客 892

ClawManager实战:OpenClaw批量部署+精细化权限管控,运维效率拉满90%

ClawManager彻底解决了OpenClaw规模化部署的运维痛点,它不是简单的“批量部署工具”,而是一套完整的企业级管理方案——从模板配置、批量部署,到权限管控、监控审计、AI治理,覆盖OpenClaw全生命周期管理,让OpenClaw从“个人工具”升级为“企业级AI基础设施”。对于中小企业,Docker一键部署即可快速落地,无需复杂配置;对于大型企业,K8s部署支持高可用、横向扩展,结合Keycloak对接企业现有认证系统,可完美融入企业IT架构。

2601_94871597的博客 608

Vue3+Openlayers教程导航页【目录】

欢迎来到 Vue3+Openlayers 系列教程,这里是我在 优快云 编写的所有 Vue3+Openlayers 系列相关文章的索引页,适合初学者到进阶用户系统阅读。👀 更多教程正在持续更新中,欢迎关注我,一起探索 Openlayers 的强大魅力!

小彭的博客 1263

Open3D 可视化(1)——简单可视化【2026最新版】

简单可视化,博客长期更新,本文最新更新时间为:2026年5月10日。

点云侠的博客 5685

基于MATLAB的井筒多相流模拟

井筒多相流的模拟可以基于不同的数学模型和计算方法。其中,最常用的模型之一是多相流模型,它基于质量守恒、动量守恒和能量守恒等原理,描述了流体在井筒中的流动行为。对于井筒多相流的模拟和分析可以帮助我们理解和优化油气田开发过程中的流体行为,从而提高产量和效率。在本文中,我们将介绍如何使用MATLAB进行井筒多相流的模拟,并提供相应的源代码。需要注意的是,以上示例是一个简化的模拟,仅用于演示如何使用MATLAB进行井筒多相流模拟。实际应用中,我们需要考虑更多的物理过程和参数,并使用更复杂的数值方法和模型进行模拟。

AtdiHtml的博客 706

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: 【Hadoop之轨迹】Hadoop 使用(纯干货!)(用 Docker 模拟的集群)
下一篇: 【Linux之轨迹】1核2G 内存不够怎么办?Swap 交换分区解决内存不足问题
寒冰小澈IceClean
博客等级 码龄6年 344粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒冰小澈IceClean

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值