大数据技术之Zookeeper安装 (2)

目录

下载地址

 本地模式安装

1)安装前准备

2)配置修改

3)操作 Zookeeper

 配置参数解读

 Zookeeper 集群操作

集群规划

解压安装

配置服务器编号

配置 zoo.cfg 文件

集群操作

 Zookeeper 集群启动停止脚本

创建脚本

增加脚本执行权限

Zookeeper 集群启动脚本

Zookeeper 集群停止脚本

Zookeeper 选举机制(面试重点)

首次启动选举

非首次启动选举

关键术语解释


下载地址

官网首页:

Apache ZooKeeper

 本地模式安装

1)安装前准备

1 )安装 JDK
Linux环境安装 JDKicon-default.png?t=N7T8https://blog.csdn.net/qq_45115959/article/details/141403400?spm=1001.2014.3001.5502
2 )拷贝 apache-zookeeper-3.5.7-bin.tar.gz 安装包到 Linux 系统下
3 )解压到指定目录
[lzl@hadoop12 software]$ tar -zxvf apache-zookeeper-3.5.7-
bin.tar.gz -C /opt/module/
4 )修改名称
[lzl@hadoop12 module]$ mv apache-zookeeper-3.5.7 -bin/
zookeeper-3.5.7

2)配置修改

1 )将 /opt/module/zookeeper-3.5.7/conf 这个路径下的 zoo_sample.cfg 修改为 zoo.cfg
[lzl@hadoop12 conf]$ mv zoo_sample.cfg zoo.cfg
2 )打开 zoo.cfg 文件,修改 dataDir 路径:
[lzl@hadoop12 zookeeper-3.5.7]$ vim zoo.cfg修改如下内容:
dataDir=/opt/module/zookeeper-3.5.7/zkData
3 )在 /opt/module/zookeeper-3.5.7/ 这个目录上创建 zkData 文件夹
[lzl@hadoop12 zookeeper-3.5.7]$ mkdir zkData

3)操作 Zookeeper

1 )启动 Zookeeper
[lzl@hadoop12 zookeeper-3.5.7]$ bin/zkServer.sh start
2 )查看进程是否启动
[lzl@hadoop12 zookeeper-3.5.7]$ jps
4020 Jps
4001 QuorumPeerMain
3 )查看状态
[lzl@hadoop12 zookeeper-3.5.7]$ bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg
Mode: standalone
4 )启动客户端
[lzl@hadoop12 zookeeper-3.5.7]$ bin/zkCli.sh
5 )退出客户端:
[zk: localhost:2181(CONNECTED) 0] quit
6 )停止 Zookeeper
[lzl@hadoop12 zookeeper-3.5.7]$ bin/zkServer.sh stop

 配置参数解读

Zookeeper 中的配置文件 zoo.cfg 中参数含义解读如下:
1 tickTime = 2000 :通信心跳时间, Zookeeper 服务器与客户端心跳时间,单位毫秒
2 initLimit = 10 LF 初始通信时限
Leader Follower 初始连接 时能容忍的最多心跳数( tickTime 的数量)
3 syncLimit = 5 LF 同步通信时限
Leader Follower 之间通信时间如果超过 syncLimit * tickTime Leader 认为 Follwer
掉,从服务器列表中删除 Follwer
4 dataDir 保存 Zookeeper 中的数据
注意:默认的 tmp 目录,容易被 Linux 系统定期删除,所以一般不用默认的 tmp 目录。
5 clientPort = 2181 :客户端连接端口,通常不做修改。

 Zookeeper 集群操作

  1. 集群规划
    • 在 hadoop12、hadoop13 和 hadoop14 三个节点上部署 Zookeeper。
    • 思考:如果是 10 台服务器,建议部署奇数台 Zookeeper,如 3 或 5 台,以确保选举机制的有效性。
  2. 解压安装
    1. 在 hadoop12 解压 Zookeeper 安装包至 /opt/module/ 目录。
    [lzl@hadoop12 software]$ tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module/
    1. 修改 apache-zookeeper-3.5.7-bin 目录名为 zookeeper-3.5.7
    [lzl@hadoop12 module]$ mv apache-zookeeper-3.5.7-bin/ zookeeper-3.5.7
  3. 配置服务器编号
    1. 在 /opt/module/zookeeper-3.5.7/ 创建 zkData 目录。
    [lzl@hadoop12 zookeeper-3.5.7]$ mkdir zkData
    1. 在 /opt/module/zookeeper-3.5.7/zkData 目录下创建 myid 文件。
    [lzl@hadoop12 zkData]$ vi myid
    • 在文件中添加与 server 对应的编号(注意不要有多余的空白字符)。
      2
    1. 拷贝配置好的 Zookeeper 到其他机器上,并在 hadoop13、hadoop14 上修改 myid 文件的内容为 3、4。
    [lzl@hadoop12 module ]$ xsync zookeeper-3.5.7
  4. 配置 zoo.cfg 文件
    1. 重命名 /opt/module/zookeeper-3.5.7/conf/ 目录下的 zoo_sample.cfg 为 zoo.cfg
    [lzl@hadoop12 conf]$ mv zoo_sample.cfg zoo.cfg
    1. 打开 zoo.cfg 文件并配置数据存储路径及集群信息。
    [lzl@hadoop12 conf]$ vim zoo.cfg
    • 修改数据存储路径配置。
      dataDir=/opt/module/zookeeper-3.5.7/zkData
    • 增加集群配置。
      server.2=hadoop12:2888:3888
      server.3=hadoop13:2888:3888
      server.4=hadoop14:2888:3888
    1. 同步 zoo.cfg 配置文件至其他节点。
    [lzl@hadoop12 conf]$ xsync zoo.cfg
  5. 集群操作
    1. 分别启动 Zookeeper。
    [lzl@hadoop12 zookeeper-3.5.7]$ bin/zkServer.sh start
    [lzl@hadoop13 zookeeper-3.5.7]$ bin/zkServer.sh start
    [lzl@hadoop14 zookeeper-3.5.7]$ bin/zkServer.sh start
    1. 查看状态。
    [lzl@hadoop12 zookeeper-3.5.7]# bin/zkServer.sh status
    JMX enabled by default
    Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg
    Mode: follower
    [lzl@hadoop13 zookeeper-3.5.7]# bin/zkServer.sh status
    JMX enabled by default
    Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg
    Mode: leader
    [lzl@hadoop14 zookeeper-3.5.7]# bin/zkServer.sh status
    JMX enabled by default
    Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg
    Mode: follower

 Zookeeper 集群启动停止脚本

  1. 创建脚本

    • 在 hadoop12 的 /home/lzl/bin 目录下创建脚本。
      [lzl@hadoop12 bin]$ vim zk.sh
    • 编写脚本内容。
      #!/bin/bash
      case $1 in
      "start"){for i in hadoop12 hadoop13 hadoop14doecho "---------- zookeeper $i 启动 ------------"ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start"done};;
      "stop"){for i in hadoop12 hadoop13 hadoop14doecho "---------- zookeeper $i 停止 ------------"ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop"done};;
      "status"){for i in hadoop12 hadoop13 hadoop14doecho "---------- zookeeper $i 状态 ------------"ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh status"done};;
      esac
  2. 增加脚本执行权限

    [lzl@hadoop12 bin]$ chmod u+x zk.sh
  3. Zookeeper 集群启动脚本

    [lzl@hadoop12 module]$ zk.sh start
  4. Zookeeper 集群停止脚本

    [lzl@hadoop12 module]$ zk.sh stop

Zookeeper 选举机制(面试重点)

Zookeeper 的选举机制是为了确保集群中始终有一个 Leader 存在,以便进行数据更新和协调工作。下面是 Zookeeper 的选举机制详解,分为首次启动选举和非首次启动选举两种情况。

首次启动选举

  1. 服务器1启动

    • 发起一次选举。服务器1投自己一票。此时服务器1票数为1票,由于不足半数以上(3票),选举无法完成,服务器1状态保持为 LOOKING。
  2. 服务器2启动

    • 再发起一次选举。服务器1和2分别投自己一票并交换选票信息。
    • 此时服务器1发现服务器2的 myid 比自己目前投票推举的(服务器1)大,更改选票为推举服务器2。
    • 此时服务器1票数为0票,服务器2票数为2票,没有半数以上结果,选举无法完成,服务器1,2状态保持 LOOKING。
  3. 服务器3启动

    • 发起一次选举。此时服务器1和2都会更改选票为服务器3。
    • 此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。
    • 此时服务器3的票数已经超过半数,服务器3当选 Leader。服务器1,2更改状态为 FOLLOWING,服务器3更改状态为 LEADING。
  4. 服务器4启动

    • 发起一次选举。此时服务器1,2,3已经不是 LOOKING 状态,不会更改选票信息。
    • 交换选票信息结果:服务器3为3票,服务器4为1票。
    • 此时服务器4服从多数,更改选票信息为服务器3,并更改状态为 FOLLOWING。
  5. 服务器5启动

    • 同服务器4一样,成为 FOLLOWER。

非首次启动选举

  1. 触发条件

    • 服务器初始化启动。
    • 服务器运行期间无法和 Leader 保持连接。
  2. 现有 Leader 场景

    • 如果集群中本来就存在一个 Leader,则新加入的服务器会直接和当前 Leader 进行连接,并同步状态,然后成为 FOLLOWER。
  3. 无 Leader 场景

    • 假设 Zookeeper 由5台服务器组成,SID 分别为 1、2、3、4、5,ZXID 分别为 8、8、8、7、7,并且此时 SID 为 3 的服务器是 Leader。某一时刻,3 和 5 服务器出现故障,因此开始进行 Leader 选举。
    • (EPOCH,ZXID,SID )
      • SID 为 1、2、4 的机器投票情况:(1,8,1)、(1,8,2)、(1,7,4)
    • 选举 Leader 规则:
      • EPOCH 大的直接胜出
      • EPOCH 相同,事务 ID 大的胜出
      • 事务 ID 相同,服务器 ID 大的胜出

关键术语解释

  • SID (Server ID):用来唯一标识一台 ZooKeeper 集群中的机器,每台机器不能重复,与 myid 一致。
  • ZXID (Zxid):是一个事务 ID,用来标识一次服务器状态的变更。在某一时刻,集群中的每台机器的 ZXID 值不一定完全一致,这和 ZooKeeper 服务器对于客户端“更新请求”的处理逻辑有关。
  • EPOCH:每个 Leader 任期的代号。没有 Leader 时同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在线问诊平台开发指南:基于互联网医院系统源码的实现路径

今天,小编将详细讲解如何通过互联网医院系统源码开发在线问诊平台。 一、在线问诊平台的需求分析 在线问诊平的核心目标是通过互联网技术,实现患者与医生之间的远程交流与诊断。因此,在开发过程中,首先需要明确平台的核心功能需求…

将 hugo 博客搬迁到服务器

1. 说明 在 Ubuntu 22.04 上使用 root 账号,创建普通账号,并赋予 root 权限。 演示站点:https://woniu336.github.io/ 魔改hugo主题: https://github.com/woniu336/hugo-magic 2. 服务器配置 建立 git 用户 adduser git安装 git sudo apt …

SpringBoot笔记01

第1章 Spring Boot概要 1.1 SpringBoot介绍 随着动态语言的流行(Ruby、Scala、Node.js), Java的开发显得格外的笨重;繁多的配置、低下的开 发效率、复杂的部署流程以及第三方技术整合难度大。 在上述环境下,Spring Boot由此诞生…

光伏检测气象站:实时监测:高效管理

随着全球对可再生能源需求的日益增长,光伏发电作为清洁能源的重要组成部分,其重要性日益凸显。然而,光伏发电的效率与稳定性受气象条件影响显著,如光照强度、温度、湿度、风速等因素均能直接影响光伏板的发电效率。因此&#xff0…

巧用PDF转Markdown插件,在扣子(Coze)手搓一个有趣好玩的AI Bot

近期,TextIn团队开发的PDF转Markdown插件已经上架Coze平台。 短短的时间内,已经有不少朋友愉快地和我们的工具开始玩耍。今天我们抛砖引玉,介(an)绍(li)几种PDF转Markdown插件的有趣玩法&#…

阅读、分析和维护高质量开源软件有感——小计一笔

目录 一、问题分析 软件开发问题分析 动机 学什么 目的 二、要求 阅读 理解 运用 分析 评估 认知 三、案例选择 MiNotes”开源软件 方式 实践支撑软件工具 操作流程 应该学到的知识 学习过程 四、任务与输出 1.阅读开源软件 2.标注开源软件 3.分析开源…

路径规划 | 灰狼算法+B样条曲线优化无人机三维路径规划(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 灰狼算法B样条曲线优化无人机三维路径规划(Matlab) 群智能路径规划算法。三维灰狼算法(GWO)加B样条曲线优化的matlab代码。无人机(UAV)路径规划…

二叉树剪枝

1、题目解析 2、算法解析 本题使用二叉树的后序遍历,通过递归函数将左右子树进行处理,得到处理结果后,判断左右结果以及自身的val判断是否需要剪枝。 3、代码编写 class Solution { public:TreeNode* pruneTree(TreeNode* root) {if(root …

SpringBoot项目多线程实现定时任务-只需要三步

众所周知,项目中需要使用定时任务发布的需求时非常常见的,例如:数据同步,清理垃圾文件,清理过期用户等需求,可能需要我们定时去清理数据。 但是我们如果集成xxl-job,Quartz,spring …

Leetcode每日刷题之1004.最大连续1的个数|||(C++)

1.题目解析 本题的目的是找出能最多翻转k个0的情况下最长连续的1的个数,并且这是一个二进制数组,只存在0和1,翻转0就是将0变为1 2.算法原理 首先我们想到的一定是暴力枚举,即依次列举出在最多翻转k个0的情况下所有连续1的子数组的…

odoo17 网站内容存在哪了

odoo17 网站内容存在哪了 查数据库内容,却没找到 没理解这些内容到底存在了哪里呢

从0-1建一个webpack/vue项目,熟悉一下webpack知识点

以下配置项部分优化来自于国内直连GPT/Claude 第一步 首先整个新文件夹,打开终端,然后创建一个新目录,或者直接在vscode里面建个新文件夹,并进入该目录; mkdir my-vue-webpack-project第二步 进入当前目录 cd my-v…

JavaSE基础(11)——java.util包

目录 1、Random 创建Random对象 方法 2、Date类 创建Date对象 3、Canlender类 创建Calendar类对象 方法 4、java.text.SimpleDateFormat类 创建SimpleDateFormat对象 方法 SimpleDateFormat格式规范 5、java.time包 java.time包含的主要类 方法分类 1、Rando…

Servlet---Web会话跟踪 ▎token令牌

▍为什么要进行Web会话跟踪? http请求是无状态的,不携带用户信息的,当用户登录成功后,之后在于服务器交互时,服务器并不知道是哪个用户发送的请求 ▍Web会话跟踪 解决方法:在用户成功登录后,后端向前端响应token令牌(token令牌:用户信息),前端保存token令牌每次访问后端都先…

赛氪网技术支持第八届集创赛全国总决赛:共绘集成电路创新蓝图

赛氪网技术支持第八届集创赛全国总决赛:共绘集成电路创新蓝图 山东,2024年8月19日至21日 —— 全国瞩目的第八届全国大学生集成电路创新创业大赛(以下简称“集创赛”)全国总决赛在美丽的海滨城市山东省烟台市隆重举行。本次大赛由…

STM32的GPIO

GPIO基本控制 GPIO(General-Purpose input/output,通用输入/输出接口) 用于感知外部信号(输入模式)和控制外部设备(输出模式) 简单模块:LED,按键,蜂鸣器,温度传感器,使用一个GPIO…

tyut-数据库期末复习要点

第一章 数据库系统(DBS)是由数据库(DB),数据库(DBMS) ,应用程序和数据库管理员 (DBA)组成的存储,管理,处理和维护数据的系统 数据模型:比较真实的模拟现实世…

构建基于LLM的应用程序——为您的应用程序选择合适的LLM

。 在本章中,将引导您完成为应用程序选择合适LLM的过程。我们将涵盖以下几个主题: 市场上最具前景的LLM概览比较LLM时应使用的主要标准和工具规模与性能之间的权衡 在本章结束时,您应该能够清楚地理解如何为您的应用程序选择合适的LLM&…

商品价格与优惠信息在API返回值中的位置

在API返回值中,商品价格与优惠信息的具体位置可能因不同的电商平台和API设计而有所不同。然而,一般来说,这些信息会以结构化的方式呈现,通常包含在一个包含多个字段的JSON对象或XML文档中。以下是根据多个电商平台(如阿…

Docker的介绍、保姆级安装和使用

一、Docker简介 1.1、Docker是什么 Docker是一个用于开发、发布和运行应用程序的开放平台;使您能够将应用程序与基础设施分离,以便您可以快速交付软件。不像虚拟机那样笨重(比如:我需要将一个安装好nginx环境的内容分享给其他人: 方式一【使用虚拟】(应用程序Nginx与基…