实战:Zookeeper 简介和单点部署ZooKeeper

news2025/1/12 23:08:22

Zookeeper 简介

ZooKeeper是一个开源的分布式协调服务,它是Apache软件基金会下的一个项目,旨在解决分布式系统中的协调和管理问题。以下是ZooKeeper的详细简介:

一、基本定义

  • ZooKeeper是一个分布式的、开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和HBase的重要组件。

  • 它以Fast Paxos算法为基础,提供了一个简单而强大的分布式环境,可用于构建和管理大规模分布式系统。

二、主要功能

ZooKeeper提供了多种核心功能来实现分布式系统的协调和管理,包括但不限于:

  1. 配置管理:ZooKeeper可以用来管理分布式系统的配置信息。各个节点可以从ZooKeeper中获取配置信息,这样当配置变化时,所有节点可以及时感知并进行相应调整。

  2. 命名服务:ZooKeeper可以用作命名服务,类似于分布式的文件系统。它允许应用程序在ZooKeeper上创建、删除和查找节点,从而实现简单的命名空间管理。

  3. 分布式锁:ZooKeeper提供了分布式锁的支持,允许多个节点在共享资源上进行协调,从而避免并发访问冲突。

  4. 分布式队列:ZooKeeper可以实现分布式队列,用于在多个节点之间传递消息和任务。

  5. 分布式通知:ZooKeeper的Watcher机制可以让客户端监视节点的变化,并在节点状态发生变化时接收通知,实现分布式的事件触发和通知机制。

  6. Leader选举:在ZooKeeper集群中,ZAB(ZooKeeper Atomic Broadcast)协议用于选举Leader节点,Leader负责处理所有客户端的写请求,并将更改广播给其他Follower节点。

三、数据模型

  • ZooKeeper的数据模型的结构与Linux文件系统很类似,整体上可以看作是一棵树,每个节点称做一个ZNode。

  • 在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据。如果在创建znode时Flag设置为EPHEMERAL,那么当创建这个znode的节点和Zookeeper失去连接后,这个znode将不再存在在Zookeeper里。

四、特点

  • 高效性:ZooKeeper提供了高性能的分布式协调服务。

  • 可靠性:ZooKeeper通过其独特的选举机制和数据复制策略,保证了数据的一致性和服务的可靠性。

  • 一致性:ZooKeeper提供强一致性保证,确保在分布式环境中各个节点的数据状态是一致的。

五、应用场景

ZooKeeper在分布式系统中有广泛的应用场景,包括但不限于:

  • 分布式数据库、分布式缓存、分布式计算等各种分布式应用的协调和管理。

  • 实时掌握分布式系统中每个节点的状态,并根据节点状态进行动态调整和优化。

  • 分布式系统中的服务注册与发现、负载均衡等。

六、总结

ZooKeeper作为一个分布式协调服务,为分布式系统提供了高可用性、高性能和强一致性的数据存储和协调能力。它是构建分布式系统和服务的重要基础设施,广泛应用于各种分布式应用中。

单点部署ZooKeeper 

ZooKeeper单点部署相对简单,主要适用于测试环境或小规模应用场景。以下是ZooKeeper单点部署的详细步骤:

一、环境准备

  1. 硬件环境:

    • 准备一台服务器或虚拟机,确保其性能满足ZooKeeper运行的基本需求。

  2. 软件环境:

    • 确保已安装Java环境(JDK 1.8或更高版本),因为ZooKeeper是用Java编写的。

    • 安装wget(如果需要通过wget命令下载ZooKeeper安装包)。

二、下载ZooKeeper安装包

  1. 访问ZooKeeper官网(http://zookeeper.apache.org/)下载最新稳定版本的ZooKeeper安装包。

  2. 使用wget命令下载(如果服务器可以连接公网):

    wget https://dlcdn.apache.org/zookeeper/zookeeper-版本号/apache-zookeeper-版本号-bin.tar.gz
    

    注意替换“版本号”为实际下载的ZooKeeper版本号。

三、安装ZooKeeper

  1. 解压安装包:

    将下载的ZooKeeper安装包解压到指定目录,例如/usr/local/zookeeper

    tar -zxvf apache-zookeeper-版本号-bin.tar.gz -C /usr/local/zookeeper
    
  2. 创建软连接(可选):

    为了方便操作,可以创建一个指向ZooKeeper安装目录的软连接。

    ln -s /usr/local/zookeeper/apache-zookeeper-版本号-bin /usr/local/zookeeper/zk
    

四、配置ZooKeeper

  1. 修改配置文件:

    • 主要配置项包括dataDir(数据目录)、clientPort(客户端端口)等。

    • 如果需要,还可以配置其他高级选项,如tickTimeinitLimitsyncLimit等。

    • 进入ZooKeeper的conf目录,将zoo_sample.cfg文件复制一份并重命名为zoo.cfg

    • 使用文本编辑器(如vim)打开zoo.cfg文件,根据需要进行修改。

如下图所示:

这里只修改了dataDir这个目录,其中data目录需要手动创建。

tickTime:心跳时间,为了确保连接存在的,以毫秒为单位,最小超时时间为两个心跳时间

initLimit:多少个心跳时间内,允许其他server连接并初始化数据,如果ZooKeeper管理的数据较大,则应相应增大这个值

syncLimit:多少个tickTime内,允许follower同步,如果follower落后太多,则会被丢弃

dataDir:用于存放内存数据库快照的文件夹,同时用于集群的myid文件也存在这个文件夹里

clientPort:服务的监听端口,默认2181

maxClientCnxns:最大并发客户端数,用于防止DOS的,默认值是10,设置为0或不设置是不加限制    

2. 创建数据目录

  1. 确保zoo.cfg中指定的dataDir目录存在,如果不存在,则需要手动创建。

五、启动ZooKeeper服务

  1. 启动服务:

    • 切换到ZooKeeper的bin目录下。

    • 执行./zkServer.sh start命令启动ZooKeeper服务。

  2. 检查服务状态:

    • 执行./zkServer.sh status命令检查ZooKeeper服务的状态。

    • 如果服务成功启动,状态将显示为“standalone”或类似的表示单点运行的信息。

六、验证ZooKeeper服务

   使用ZooKeeper客户端工具:

  • 可以使用ZooKeeper自带的客户端工具(如zkCli.sh)连接到ZooKeeper服务。

  • 执行一些基本操作(如创建、读取、更新、删除节点)来验证ZooKeeper服务是否正常工作。

七、注意事项

  • 防火墙和安全组:确保ZooKeeper的通信端口(默认是2181)在防火墙或安全组中是开放的。

  • 监控和日志:建议配置适当的监控和日志记录机制,以便在出现问题时能够及时发现和解决。

  • 备份和恢复:虽然单点部署的ZooKeeper没有集群的容错能力,但定期备份数据仍然是一个好习惯。

通过以上步骤,您可以成功部署一个ZooKeeper单点实例,并使其在生产环境或测试环境中稳定运行。然而,需要注意的是,单点部署的ZooKeeper在容错性和高可用性方面存在限制,因此在生产环境中建议部署ZooKeeper集群以提高系统的稳定性和可靠性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1959419.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

添加索引导致微服务异常

一、现象 某app部分功能不可用,提示“连接服务器超时,请稍后尝试”。 二、分析 1、分析发现数据库存在大量的TM争用。 2、继续分析发现存在TM行锁的阻塞会话主要是以下几个: 3、查看其阻塞源头是1940 4、而1940进程在这个时间段是在跑新增索…

逆矩阵、秩

在数学的广阔天地中,线性代数扮演着至关重要的角色。它不仅是现代科学和工程学的基石,也是理解复杂数据结构的关键。本文将深入探讨线性代数中的几个核心概念:逆矩阵、秩、列空间和零空间,通过详细的解释和丰富的实例,…

(2024,LoRA压缩和多LoRA快速切换,联合对角化,重构误差)先压缩再提供服务:以极低的开销为数千个 LoRA提供服务

Compress then Serve: Serving Thousands of LoRA Adapters with Little Overhead 公和众与号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 1. 简介 3. 基于秩的 LoRA 压缩 3.1 期望特…

ubuntu安装tar安装 nginx最新版本

一、需要先安装依赖 apt install gcc libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev 二、上传安装包 并解压 下载地址 nginx news tar xvf nginx-1.25.2.tar.gz 进入nginx cd nginx-1.25.2 三、编译 ./configure --prefix=/usr/local/nginx --with-htt…

数组模拟单调栈--C++

本题的计算量较大,用暴力算法会超时,的用别的方法,我们假设在左边找第一个比它小的数,那么在左边出现一次的数如果比右边大了,那么就不会在出现了,我们将它删除掉就可以了,用这个方法我们可以的…

算力QoS技术革新:OrionX引领AI行业资源管理新趋势

01 前言 在当今数字化时代,人工智能(AI)已成为各行业发展的关键推动力。然而,随着AI技术的蓬勃发展,行业对计算资源的需求也日益增长,传统的资源分配方式已无法满足需求。 在这一背景下,算力Q…

基于vue-onlyoffice实现企业office web在线应用

目录 1.背景... 1 2.Onlyoffice介绍... 2 3.Onlyoffice核心api介绍... 2 3.1 ApiDocument 2 3.2 ApiParagraph. 2 3.3 ApiTable. 2 3.4. ApiRange. 3 4.Onlyoffice插件介绍... 3 4.1 插件定义... 3 4.2 插件对象... 3 4.3 插件结构... 4 4.4 插件内嵌使用方式... 4…

Echarts 柱状图实现同时显示百分比+原始值+汇总值

原始效果:柱状图 二开效果: 核心逻辑 同时显示百分比和原始值 label: {show: true,position: inside,formatter: (params) > {const rawValue rawData[params.seriesIndex][params.dataIndex];const percentage Math.round(params.value * 1000) / …

基于springboot+vue+uniapp的校园二手交易小程序

开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…

达梦数据库基础操作-查询

一、基础查询 1 )单表查询 1. 查看表结构 使用两种方式可查看数据库的表结构: 查询后会显示该表的创建语句以及结构 2. 查询全表 使用 SELECT * 查询全表,此时数据库会返回表所有列 3. 行过滤 使用条件查询进行过滤,…

2024电赛H题参考方案(+视频演示+核心控制代码)——自动行使小车

目录 一、题目要求 二、参考资源获取 三、参考方案 1、环境搭建及工程移植 2、相关模块的移植 4、整体控制方案视频演示 5、视频演示部分核心代码 总结 一、题目要求 小编自认为:此次H题属于控制类题目,相较于往年较为简单,功能也算单一&…

Vue - CSS基础学习

一、元素及属性 CSS 是为 web 内容添加样式的代码。 style标签 1.语法 1.除了选择器部分,每个规则集都应该包含在成对的大括号里({})。 2.在每个声明里要用冒号(:)将属性与属性值分隔开。 3.在每个规则集里要用分号…

Windows执行jar包

配置环境变量: 命令行测试: java -version 将jar包上传至指定目录,在该目录下创建运行脚本: chcp 65001 java -Dfile.encodingutf-8 -jar jxpaddle-admin.jar chcp 65001:将当前cmd编码改为UTF-8,仅对当…

单片机芯片程序读取方法和工具

如何把单片机芯片程序读取出来 读取芯片中的程序可以通过多种方法实现,具体方法取决于芯片的类型和可用的工具。 一、使用‌Keil软件: 如果芯片是Flash类型的,可以使用Keil软件配合硬件调试工具进行读取。首先,需要配置Keil工程&…

【Unity源码】多人FPS游戏

项目概述 《多人FPS游戏》(Multiplayer-FPS) 是一个基于Unity3D引擎开发的多人第一人称射击游戏。该项目支持多种输入设备,包括Kinect、Xbox控制器、Leap Motion手势控制、VR眼镜等,提供了丰富的交互体验。 项目特点 多种输入设备支持:除了…

基于北京市空气质量影响因素研究系统【城市可换爬虫获取、LSTM、Flask、Echarts、MySQL、TensorFlow】

文章目录 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主研究背景国内外研究现状研究目的研究意义关键技术理论介绍数据采集数据分析与大屏设计大屏相关性分析LSTM模型训练系统集成展示总结每文一语 有需要本项目的代码或文档以及全部资源&#xf…

springboot高校实验室安全管理系统-计算机毕业设计源码73839

目 录 摘要 1 绪论 1.1 研究背景 1.2 选题意义 1.3研究方案 1.4论文章节安排 2相关技术介绍 2.1 B/S结构 2.2 Spring Boot框架 2.3 Java语言 2.4 MySQL数据库 3系统分析 3.1 可行性分析 3.2 系统功能性分析 3.3.非功能性分析 3.4 系统用例分析 3.5系统流程分析…

双指针专题

前言(回顾一下): Leetcode 283.移动零 思路: 使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换&#xf…

C语言 -- 动态内存管理

C语言 -- 动态内存管理 1. 为什么要有动态内存分配2. malloc 和 free2.1 malloc2.2 free 3. calloc 和 realloc3.1 calloc3.2 realloc 4. 常见的动态内存的错误4.1 对NULL指针的解引用操作4.2 对动态开辟空间的越界访问4.3 对非动态开辟内存使用free释放4.4 使用free释放一块动…

嵌入式学习——C语言指针(一)

一、地址和指针的概念 地址:内存单元的编号。 指针:一个变量的首地址就叫做该变量的指针。 1、内存中存取数据的方式 1)直接存取 直接用变量名存取变量所占内存单元的内容 例: int y,x 3; y 3*x2; 2&#…