当前位置: 首页 > news >正文

实战:ZooKeeper 操作命令和集群部署

ZooKeeper 操作命令

ZooKeeper的操作命令主要用于对ZooKeeper服务中的节点进行创建、查看、修改和删除等操作。以下是一些常用的ZooKeeper操作命令及其说明:

一、启动与连接

  1. 启动ZooKeeper服务器:

    ./zkServer.sh start
    

    这个命令用于启动ZooKeeper服务器。

  2. 连接ZooKeeper客户端:

    ./zkCli.sh
    

    或者,指定服务器地址和端口号进行连接:

    ./zkCli.sh -server <ip>:<port>
    
  3. 退出ZooKeeper客户端:

    quit
    
  4. 关闭ZooKeeper服务器:

    ./zkServer.sh stop
    
  5. 查看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台服务器详细的部署指南:

一、环境准备

  1. 硬件资源:

    • 通常建议使用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
  1. 操作系统:

    • 选择支持ZooKeeper的操作系统,如Linux(推荐CentOS、Ubuntu等)。

  2. 网络配置:

    • 确保所有服务器都能相互通信,且网络延迟和丢包率保持在较低水平。

    • 配置好服务器的IP地址和主机名,并确保它们能在集群中正确解析。

  3. 软件依赖:

    • 安装Java环境,因为ZooKeeper是用Java编写的。推荐使用Java 8或更高版本。

    • 安装必要的工具和库,如tar、wget等,以便下载和解压ZooKeeper安装包。

二、ZooKeeper安装

  1. 下载ZooKeeper安装包:

    • 访问Apache ZooKeeper的官方网站(https://zookeeper.apache.org/)或镜像站点,下载最新版本的ZooKeeper安装包。

    • 可以使用wget命令或浏览器下载到本地,然后上传到服务器。

  2. 解压安装包:

    • 将下载的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集群

  1. 启动ZooKeeper服务:

    • 在每台服务器上,进入ZooKeeper的bin目录,执行./zkServer.sh start命令分别启动ZooKeeper服务。

  2. 验证集群状态:

    • 在每台服务器上执行./zkServer.sh status命令,查看ZooKeeper服务的状态。

    • 正常情况下,集群中应该有一个Leader和多个Follower。可以通过查看日志或使用ZooKeeper客户端工具(如zkCli.sh)来进一步验证集群的运行状态。

如第三台服务器: 

图片

五、注意事项

  1. 防火墙和安全组配置:

    • 确保ZooKeeper服务监听的端口(默认为2181)在服务器的防火墙和安全组中已开放。

  2. 数据备份和恢复:

    • 定期备份ZooKeeper的数据目录和日志目录,以便在数据丢失或损坏时能够恢复。

  3. 监控和日志:

    • 配置监控工具来监控ZooKeeper集群的性能和健康状况。

    • 定期查看ZooKeeper的日志文件,以便及时发现并解决问题。

  4. 版本兼容性:

    • 确保集群中所有服务器上的ZooKeeper版本相同,以避免版本不兼容导致的问题。

通过以上步骤,您可以成功部署一个ZooKeeper集群,并确保其能够稳定运行。

相关文章:

实战:ZooKeeper 操作命令和集群部署

ZooKeeper 操作命令 ZooKeeper的操作命令主要用于对ZooKeeper服务中的节点进行创建、查看、修改和删除等操作。以下是一些常用的ZooKeeper操作命令及其说明&#xff1a; 一、启动与连接 启动ZooKeeper服务器&#xff1a; ./zkServer.sh start这个命令用于启动ZooKeeper服务器…...

linux运维一天一个shell命令之 top详解

概念&#xff1a; top 命令是 Unix 和类 Unix 操作系统&#xff08;如 Linux、macOS&#xff09;中一个常用的系统监控工具&#xff0c;它提供了一个动态的实时视图&#xff0c;显示系统的整体性能信息&#xff0c;如 CPU 使用率、内存使用情况、进程列表等。 基本用法 root…...

大模型微调:参数高效微调(PEFT)方法总结

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

Spark+实例解读

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

WPF多语言国际化,中英文切换

通过切换资源文件的形式实现中英文一键切换 在项目中新建Language文件夹&#xff0c;添加资源字典&#xff08;xaml文件&#xff09;&#xff0c;中文英文各一个。 在资源字典中写上想中英文切换的字符串&#xff0c;需要注意&#xff0c;必须指定key值&#xff0c;并且中英文…...

Halcon深度学习分类模型

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

洗地机哪种牌子好?洗地机排行榜前十名公布

洗地机市场上品牌琳琅满目&#xff0c;每个品牌都有其独特的魅力和优势。消费者在选择时&#xff0c;往往会根据自己的实际需求、预算以及对产品性能的期望来做出决策。因此&#xff0c;无论是哪个品牌的洗地机&#xff0c;只要能够满足用户的清洁需求&#xff0c;提供便捷的操…...

C++中的虚函数与多态机制如何工作?

在C中&#xff0c;虚函数和多态机制是实现面向对象编程的重要概念。 虚函数是在基类中声明的函数&#xff0c;可以在派生类中进行重写。当基类的指针或引用指向派生类的对象时&#xff0c;通过调用虚函数可以实现动态绑定&#xff0c;即在运行时确定要调用的函数。 多态是指通…...

《LeetCode热题100》---<哈希三道>

本篇博客讲解 LeetCode热题100道中的哈希篇中的三道题。分别是 1.第一道&#xff1a;两数之和&#xff08;简单&#xff09; 2.第二道&#xff1a;字母异位词分组&#xff08;中等&#xff09; 3.第三道&#xff1a;最长连续序列&#xff08;中等&#xff09; 第一道&#xff1…...

秒懂C++之string类(下)

目录 一.接口说明 1.1 erase 1.2 replace&#xff08;最好别用&#xff09; 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.配置用户名和邮箱 桌面右键&#xff0c;选择git Bash Here git config --global user.name 用户名 git config --global user.email 邮箱名 3.用git实现代码管理的过程 下载别人的项目 git …...

模型改进-损失函数合集

模版 第一步在哪些地方做出修改&#xff1a; 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.引入 在之前的笔记中有提到&#xff1a;函数重载&#xff08;特别是交换函数&#xff08;Swap&#xff09;的实现&#xff09; void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(double& left, double& right) {do…...

下面关于Date类的描述错误的一项是?

下面关于Date类的描述错误的一项是&#xff1f; A. java.util.Date类下有三个子类&#xff1a;java.sql.Date、java.sql.Timestamp、java.sql.Time&#xff1b; B. 利用SimpleDateFormat类可以对java.util.Date类进行格式化显示&#xff1b; C. 直接输出Date类对象就可以取得日…...

【Python面试题收录】Python编程基础练习题①(数据类型+函数+文件操作)

本文所有代码打包在Gitee仓库中https://gitee.com/wx114/Python-Interview-Questions 一、数据类型 第一题&#xff08;str&#xff09; 请编写一个Python程序&#xff0c;完成以下任务&#xff1a; 去除字符串开头和结尾的空格。使用逗号&#xff08;","&#…...

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 通信部分&#xff0c;这一块的教程网上一大堆&#xff0c;不过关于掉网&#xff0c;异常断开连接的这部分到是到是没有多少说明&#xff0c;有方法 不过基本上最多的两种方式&#xff08;1.设置一个超时时间&#xff0c;2.…...

一篇文章掌握Python爬虫的80%

转载&#xff1a;一篇文章掌握Python爬虫的80% Python爬虫 Python 爬虫技术在数据采集和信息获取中有着广泛的应用。本文将带你掌握Python爬虫的核心知识&#xff0c;帮助你迅速成为一名爬虫高手。以下内容将涵盖爬虫的基本概念、常用库、核心技术和实战案例。 一、Python 爬虫…...

【用户会话信息在异步事件/线程池的传递】

用户会话信息在异步事件/线程池的传递 author:shengfq date:2024-07-29 version:1.0 背景: 同事写的一个代码功能,是在一个主线程中通过如下代码进行异步任务的执行,结果遇到了问题. 1.ThreadPool.execute(Runnable)启动一个子线程执行异步任务 2.applicationContext.publis…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...