实战:ZooKeeper 操作命令和集群部署
ZooKeeper 操作命令
ZooKeeper的操作命令主要用于对ZooKeeper服务中的节点进行创建、查看、修改和删除等操作。以下是一些常用的ZooKeeper操作命令及其说明:
一、启动与连接
-
启动ZooKeeper服务器:
./zkServer.sh start
这个命令用于启动ZooKeeper服务器。
-
连接ZooKeeper客户端:
./zkCli.sh
或者,指定服务器地址和端口号进行连接:
./zkCli.sh -server <ip>:<port>
-
退出ZooKeeper客户端:
quit
-
关闭ZooKeeper服务器:
./zkServer.sh stop
-
查看ZooKeeper服务器状态:
./zkServer.sh status
二、节点操作
1. 查看节点
-
ls命令:用于列出指定节点下的所有子节点。
ls <path> [watch]
其中,
<path>
是节点的路径,[watch]
是可选参数,用于监听该节点的变化。 -
ls2命令:与ls命令类似,但会同时列出子节点和节点的状态信息。
ls2 <path> [watch]
-
get命令:用于获取指定节点的数据内容和属性信息。
get <path> [watch]
2. 创建节点
-
create命令:用于创建一个新的节点。
create <path> <data> [acl]
其中,
<path>
是节点的路径,<data>
是节点存储的数据,[acl]
是可选的访问控制列表。create -s <path> <data>
顺序节点会在节点名后自动添加一个递增的序列号。
create -e <path> <data>
临时节点在客户端会话结束后会自动删除。
-
创建临时节点:使用
-e
选项。 -
创建顺序节点:使用
-s
选项。
-
3. 修改节点
-
set命令:用于修改指定节点的数据内容。
bash set <path> <data> [version]
其中,<path>
是节点的路径,<data>
是新的数据内容,[version]
是可选的数据版本号,用于控制更新的条件。
4. 删除节点
-
delete命令:用于删除指定节点。
delete <path> [version]
其中,
<path>
是节点的路径,[version]
是可选的数据版本号。注意,delete命令只能删除空节点(即没有子节点的节点)。-
删除非空节点:一些ZooKeeper版本或扩展可能提供了
deleteall
命令来删除非空节点,但这不是ZooKeeper核心功能的标准部分。在实际使用中,需要先删除非空节点的所有子节点,然后再删除该节点。
-
三、其他命令
-
stat命令:用于获取指定节点的状态信息。
stat <path> [watch]
-
help命令:在ZooKeeper客户端中,可以使用help命令来查看所有可用的命令及其说明。
help
这些命令是ZooKeeper操作中常用的基本命令,它们涵盖了节点的创建、查看、修改和删除等核心功能。在实际使用中,可以根据需要选择合适的命令进行操作。
ZooKeeper 集群部署
ZooKeeper集群部署是一个涉及多个步骤和配置的过程,主要包括环境准备、ZooKeeper安装、配置文件修改、启动和验证集群等关键步骤。以下是一个以3台服务器详细的部署指南:
一、环境准备
-
硬件资源:
-
通常建议使用3台或更多(推荐为2n+1台,n为大于1的整数)的服务器来部署ZooKeeper集群,以确保高可用性和容错性。
-
每台服务器应具有足够的CPU、内存和存储空间来支持ZooKeeper的运行。
-
三个节点, 修改操作系统的/etc/hosts文件,添加IP与主机名映射:
-
10.109.142.53 zk-001
10.109.190.32 zk-002
10.109.165.20 zk-003
-
操作系统:
-
选择支持ZooKeeper的操作系统,如Linux(推荐CentOS、Ubuntu等)。
-
-
网络配置:
-
确保所有服务器都能相互通信,且网络延迟和丢包率保持在较低水平。
-
配置好服务器的IP地址和主机名,并确保它们能在集群中正确解析。
-
-
软件依赖:
-
安装Java环境,因为ZooKeeper是用Java编写的。推荐使用Java 8或更高版本。
-
安装必要的工具和库,如tar、wget等,以便下载和解压ZooKeeper安装包。
-
二、ZooKeeper安装
-
下载ZooKeeper安装包:
-
访问Apache ZooKeeper的官方网站(https://zookeeper.apache.org/)或镜像站点,下载最新版本的ZooKeeper安装包。
-
可以使用wget命令或浏览器下载到本地,然后上传到服务器。
-
-
解压安装包:
-
将下载的ZooKeeper安装包解压到指定的目录,如
/usr/local/
。 -
重命名解压后的文件夹,以便更容易识别,如
zookeeper-3.x.x
。
-
三、配置文件修改
1. 复制配置文件:
-
进入ZooKeeper的
conf
目录,复制zoo_sample.cfg
文件为zoo.cfg
。
2. 编辑zoo.cfg
文件:
配置如下:
# 服务器之间或客户端与服务器之间维持心跳的时间间隔
# tickTime以毫秒为单位。tickTime=2000# 集群中的follower服务器(F)与leader服务器(L)之间的初始连接心跳数initLimit=10# 集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数syncLimit=5# 快照保存目录# 不要设置为/tmp,该目录重新启动后会被自动清除dataDir=/data/zookeeper/zk1/data# 日志保存目录dataLogDir=/data/zookeeper/zk1/logs# 客户端连接端口clientPort=2181# 客户端最大连接数。# 根据自己实际情况设置,默认为60个# maxClientCnxns=60# 三个接点配置,格式为:# server.服务编号=服务地址、通信端口、选举端口server.1=zk-001:2888:3888server.2=zk-002:2888:3888server.3=zk-003:2888:3888
说明:
-
修改
dataDir
参数,指定ZooKeeper存储快照的目录。 -
如果需要,还可以设置
dataLogDir
参数,指定ZooKeeper存储事务日志的目录。 -
修改
clientPort
参数,设置ZooKeeper服务监听的端口号(默认为2181)。 -
在配置文件末尾添加集群配置,格式为
server.n=host:peerPort:electionPort
,其中n
是服务器的唯一标识(与myid
文件中的值对应);host
是服务器的IP地址或主机名;peerPort
是用作leader与follwer之间的通信端口号(数据同步),默认为2888;electionPort
是用于选举Leader投票的端口号(默认为3888)。
这一步主要是配图中的框出来的内容:
3. 创建myid
文件:
-
在每台服务器的
dataDir
指定的目录下,创建一个名为myid
的文件,内容为该服务器的唯一标识(与zoo.cfg
中配置的server.n
中的n
相对应)。
以第一台为例 vim myid:
按照以上步骤,三台服务器做同样的操作。
四、启动ZooKeeper集群
-
启动ZooKeeper服务:
-
在每台服务器上,进入ZooKeeper的
bin
目录,执行./zkServer.sh start
命令分别启动ZooKeeper服务。
-
-
验证集群状态:
-
在每台服务器上执行
./zkServer.sh status
命令,查看ZooKeeper服务的状态。 -
正常情况下,集群中应该有一个Leader和多个Follower。可以通过查看日志或使用ZooKeeper客户端工具(如zkCli.sh)来进一步验证集群的运行状态。
-
如第三台服务器:
五、注意事项
-
防火墙和安全组配置:
-
确保ZooKeeper服务监听的端口(默认为2181)在服务器的防火墙和安全组中已开放。
-
-
数据备份和恢复:
-
定期备份ZooKeeper的数据目录和日志目录,以便在数据丢失或损坏时能够恢复。
-
-
监控和日志:
-
配置监控工具来监控ZooKeeper集群的性能和健康状况。
-
定期查看ZooKeeper的日志文件,以便及时发现并解决问题。
-
-
版本兼容性:
-
确保集群中所有服务器上的ZooKeeper版本相同,以避免版本不兼容导致的问题。
-
通过以上步骤,您可以成功部署一个ZooKeeper集群,并确保其能够稳定运行。
相关文章:

实战:ZooKeeper 操作命令和集群部署
ZooKeeper 操作命令 ZooKeeper的操作命令主要用于对ZooKeeper服务中的节点进行创建、查看、修改和删除等操作。以下是一些常用的ZooKeeper操作命令及其说明: 一、启动与连接 启动ZooKeeper服务器: ./zkServer.sh start这个命令用于启动ZooKeeper服务器…...
linux运维一天一个shell命令之 top详解
概念: top 命令是 Unix 和类 Unix 操作系统(如 Linux、macOS)中一个常用的系统监控工具,它提供了一个动态的实时视图,显示系统的整体性能信息,如 CPU 使用率、内存使用情况、进程列表等。 基本用法 root…...

大模型微调:参数高效微调(PEFT)方法总结
PEFT (Parameter-Efficient Fine-Tuning) 参数高效微调是一种针对大模型微调的技术,旨在减少微调过程中需要调整的参数量,同时保持或提高模型的性能。 以LORA、Adapter Tuning 和 Prompt Tuning 为主的PEFT方法总结如下 LORA 论文题目:LORA:…...

Spark+实例解读
第一部分 Spark入门 学习教程:Spark 教程 | Spark 教程 Spark 集成了许多大数据工具,例如 Spark 可以处理任何 Hadoop 数据源,也能在 Hadoop 集群上执行。大数据业内有个共识认为,Spark 只是Hadoop MapReduce 的扩展(…...

WPF多语言国际化,中英文切换
通过切换资源文件的形式实现中英文一键切换 在项目中新建Language文件夹,添加资源字典(xaml文件),中文英文各一个。 在资源字典中写上想中英文切换的字符串,需要注意,必须指定key值,并且中英文…...

Halcon深度学习分类模型
1.Halcon20之后深度学习支持CPU训练模型,没有money买显卡的小伙伴有福了。但是缺点也很明显,就是训练速度超级慢,推理效果也没有GPU好,不过学习用足够。 2.分类模型是Halcon深度学习最简单的模型,可以用在物品分类&…...

洗地机哪种牌子好?洗地机排行榜前十名公布
洗地机市场上品牌琳琅满目,每个品牌都有其独特的魅力和优势。消费者在选择时,往往会根据自己的实际需求、预算以及对产品性能的期望来做出决策。因此,无论是哪个品牌的洗地机,只要能够满足用户的清洁需求,提供便捷的操…...
C++中的虚函数与多态机制如何工作?
在C中,虚函数和多态机制是实现面向对象编程的重要概念。 虚函数是在基类中声明的函数,可以在派生类中进行重写。当基类的指针或引用指向派生类的对象时,通过调用虚函数可以实现动态绑定,即在运行时确定要调用的函数。 多态是指通…...

《LeetCode热题100》---<哈希三道>
本篇博客讲解 LeetCode热题100道中的哈希篇中的三道题。分别是 1.第一道:两数之和(简单) 2.第二道:字母异位词分组(中等) 3.第三道:最长连续序列(中等) 第一道࿱…...

秒懂C++之string类(下)
目录 一.接口说明 1.1 erase 1.2 replace(最好别用) 1.3 find 1.4 substr 1.5 rfind 1.6 find_first_of 1.7 find_last_of 二.string类的模拟实现 2.1 构造 2.2 无参构造 2.3 析构 2.4.【】运算符 2.5 迭代器 2.6 打印 2.7 reserve扩容 …...

github简单地操作
1.调节字体大小 选择options 选择text 选择select 选择你需要的参数就可以了。 2.配置用户名和邮箱 桌面右键,选择git Bash Here git config --global user.name 用户名 git config --global user.email 邮箱名 3.用git实现代码管理的过程 下载别人的项目 git …...

模型改进-损失函数合集
模版 第一步在哪些地方做出修改: 228行 self.use_wiseiouTrue 230行 self.wiou_loss WiseIouLoss(ltypeMPDIoU, monotonousFalse, inner_iouTrue, focaler_iouFalse) 238行 wiou self.wiou_loss(pred_bboxes[fg_mask], target_bboxes[fg_mask], ret_iouFalse…...

C++模板(初阶)
1.引入 在之前的笔记中有提到:函数重载(特别是交换函数(Swap)的实现) void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(double& left, double& right) {do…...
下面关于Date类的描述错误的一项是?
下面关于Date类的描述错误的一项是? A. java.util.Date类下有三个子类:java.sql.Date、java.sql.Timestamp、java.sql.Time; B. 利用SimpleDateFormat类可以对java.util.Date类进行格式化显示; C. 直接输出Date类对象就可以取得日…...

【Python面试题收录】Python编程基础练习题①(数据类型+函数+文件操作)
本文所有代码打包在Gitee仓库中https://gitee.com/wx114/Python-Interview-Questions 一、数据类型 第一题(str) 请编写一个Python程序,完成以下任务: 去除字符串开头和结尾的空格。使用逗号(","&#…...

C# Nmodbus,EasyModbusTCP读写操作
Nmodbus读写 两个Button控件分别为 读取和写入 分别使用控件的点击方法 ①引用第三方《NModbus4》2.1.0版本 全局 public SerialPort port new SerialPort("COM2", 9600, Parity.None, 8, (StopBits)1); ModbusSerialMaster master; public Form1() port.Open();…...
spark常用参数调优
目录 1.set spark.grouping.sets.reference.hivetrue;2.set spark.locality.wait.rack0s3.set spark.locality.wait0s;4.set spark.executor.memoryOverhead 2G;5.set spark.sql.shuffle.partitions 1000;6.set spark.shuffle.file.buffer 256k7. set spark.reducer.maxSizeInF…...

C#/WinFrom TCP通信+ 网线插拔检测+客服端异常掉线检测
Winfor Tcp通信(服务端) 今天给大家讲一下C# 关于Tcp 通信部分,这一块的教程网上一大堆,不过关于掉网,异常断开连接的这部分到是到是没有多少说明,有方法 不过基本上最多的两种方式(1.设置一个超时时间,2.…...

一篇文章掌握Python爬虫的80%
转载:一篇文章掌握Python爬虫的80% Python爬虫 Python 爬虫技术在数据采集和信息获取中有着广泛的应用。本文将带你掌握Python爬虫的核心知识,帮助你迅速成为一名爬虫高手。以下内容将涵盖爬虫的基本概念、常用库、核心技术和实战案例。 一、Python 爬虫…...
【用户会话信息在异步事件/线程池的传递】
用户会话信息在异步事件/线程池的传递 author:shengfq date:2024-07-29 version:1.0 背景: 同事写的一个代码功能,是在一个主线程中通过如下代码进行异步任务的执行,结果遇到了问题. 1.ThreadPool.execute(Runnable)启动一个子线程执行异步任务 2.applicationContext.publis…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...