ZooKeeper 搭建详细步骤之一(单机模式)

news2024/11/18 15:40:48

ZooKeeper 搭建详细步骤之三(真集群)
ZooKeeper 搭建详细步骤之二(伪集群模式)
ZooKeeper 搭建详细步骤之一(单机模式)
ZooKeeper 及相关概念简介

搭建模式简述

ZooKeeper 的搭建模式包括单机模式、集群模式和伪集群模式,分别适用于不同的场景和需求,从简单的单节点测试环境到复杂的多节点高可用生产环境。在实际部署时,应根据系统的可用性要求、数据量、并发负载等因素选择合适的部署模式。

ZooKeeper 的搭建模式主要包括以下三种:

  1. 单机模式(Standalone Mode)
    在单机模式下,ZooKeeper 仅在一个单独的服务器节点上运行。这种模式主要用于开发测试环境,便于快速部署和调试。由于只有一个节点,没有数据冗余和故障转移机制,因此不具备高可用性。单节点故障会导致整个服务不可用,不适用于生产环境。

  2. 集群模式(Cluster Mode / Distributed Mode)
    集群模式是 ZooKeeper 在生产环境中推荐使用的部署模式。它由多个(通常为奇数个,如 3、5、7 等)独立的服务器节点组成一个 ZooKeeper 集群。每个节点既是服务提供者又是服务消费者,它们之间通过心跳机制保持通信,并通过 ZAB(ZooKeeper Atomic Broadcast)协议实现数据的复制、同步和一致性保证。集群模式提供了高可用性、容错性和可扩展性,即使部分节点发生故障,只要集群中存活节点的数量大于等于半数(即形成“多数派”),ZooKeeper 集群就能继续对外提供服务。

  3. 伪集群模式(Pseudo-Distributed Mode / Local Cluster Mode)
    伪集群模式是在单台物理或虚拟机上模拟多节点集群的部署方式。在同一台机器上启动多个 ZooKeeper 服务实例,每个实例配置不同的端口、数据目录和身份标识(如服务器ID)。尽管所有节点实际上运行在同一台机器上,但从逻辑上看,它们形成了一个小型的 ZooKeeper 集群,能够模拟集群模式的行为,包括数据复制、节点选举等。伪集群模式常用于本地开发和测试环境,便于在单机上模拟多节点集群环境,验证分布式协调逻辑。

Zookeeper 下载

官网: Apache ZooKeeper官网 ,选择最新稳定版本进行下载

在国内,从官网的下载速度较慢,也可以选择国内镜像站下载,比如阿里镜像站:

阿里镜像: https://mirrors.aliyun.com/apache/zookeeper/

单机模式搭建

ZooKeeper单机模式是指在一台服务器上独立运行一个ZooKeeper服务节点,用于满足小型项目或测试环境中的协调服务需求。

搭建步骤概述

以下是 ZooKeeper 单机模式的详细安装和配置步骤:

  1. 下载 ZooKeeper
  • 下载文件一般为一个.tar.gz.zip格式的压缩包,例如 apache-zookeeper-<version>-bin.tar.gz
    • 保存至 linux 的 /opt/ 目录下。
  1. 解压文件

    • 将下载好的压缩包上传到目标服务器,并解压。对于.tar.gz文件,可以使用以下命令:

      tar -xvzf apache-zookeeper-<version>-bin.tar.gz
      
    • 解压后,将会生成一个名为 apache-zookeeper-<version>-bin 的目录,该目录即为ZooKeeper的安装目录。

    • 为了方便配置,可以重命名 ZooKeeper 安装目录。

  2. 创建数据目录和日志目录

    • 根据ZooKeeper的配置要求,需要创建两个目录分别用于存放数据和日志:

      mkdir /path/to/zookeeper_data
      mkdir /path/to/zookeeper_logs
      
  • 示例中的 /path/to/ 应替换为你实际希望存储这些文件的路径,如 /home/<username>/zookeeper/data/home/<username>/zookeeper/logs

    • 如果不需要单独存放日志时,data 和 logs 可以共用一个目录
  1. 配置ZooKeeper

    • 进入ZooKeeper安装目录下的 conf 文件夹:

      cd apache-zookeeper-<version>-bin/conf
      
    • 复制或重命名示例配置文件 zoo_sample.cfgzoo.cfg

      cp zoo_sample.cfg zoo.cfg
      
  2. 编辑配置文件

    • 使用文本编辑器(如 vinanoemacs)打开 zoo.cfg 文件并进行如下配置:

      # 数据目录设置
      dataDir=/path/to/zookeeper_data
      
      # 日志目录设置(如果需要单独存放日志)
      dataLogDir=/path/to/zookeeper_logs
      
      # 客户端连接端口
      clientPort=2181
      

      /path/to/ 替换成你在第3步中创建的实际目录路径。

  3. 启动ZooKeeper

    • 返回到ZooKeeper的安装目录:

      cd ../..
      
    • 启动ZooKeeper服务:

      bin/zkServer.sh start
      
    • 如果一切正常,你应该能看到类似于 “ZooKeeper JMX enabled by default” 和 “Using config: /path/to/apache-zookeeper--bin/conf/zoo.cfg” 的输出,接着是 “Starting zookeeper … STARTED” 表明服务已成功启动。

连接和验证

验证单机模式运行状态可以通过查看日志或客户端连接的方式来验证

可以通过以下方法检查ZooKeeper服务是否正常运行:

  • 查看日志:检查在第3步中指定的 dataLogDir 中的ZooKeeper日志文件,确认是否有启动成功的消息和其他异常信息。

  • 使用命令行客户端

    • 在ZooKeeper安装目录下,执行命令行客户端以连接到本地ZooKeeper服务:

      bin/zkCli.sh -server localhost:2181
      
    • 如果连接成功,客户端将显示欢迎信息及提示符 [zkshell:0]。你可以尝试执行一些基本的命令,如 ls / 查看根节点下的子节点列表,验证ZooKeeper服务的响应。

通过以上步骤,您已经在单台服务器上成功安装并配置了 ZooKeeper 单机模式。此模式适用于不需要高可用性保证的小型应用场景或开发测试环境。在生产环境中,通常建议使用ZooKeeper集群模式以提供容错能力和数据一致性保障。

步骤举例演示

[zhang@node1 soft]$ pwd
/opt/soft
[zhang@node1 soft]$ ll
total 1042532
-rw-r--r--. 1 zhang zhang  14609453 Apr 20 15:37 apache-zookeeper-3.8.4-bin_.tar.gz
-rw-r--r--. 1 root  root  492368219 Mar 13 16:08 hadoop-3.2.4.tar.gz
-rw-r--r--. 1 root  root  143722924 Mar 13 16:08 jdk-8u281-linux-x64.tar.gz
# 解压到 /opt/apps 下
[zhang@node1 soft]$ tar -zxvf apache-zookeeper-3.8.4-bin_.tar.gz -C /opt/apps
#.......解压过程省略

# 进入安装目录
[zhang@node1 soft]$ cd /opt/apps/
[zhang@node1 apps]$ ls
apache-zookeeper-3.8.4-bin  flume  hadoop-3.2.4  hive3.1  jdk  jdk1.8.0_281
# 重命名
[zhang@node1 apps]$ mv apache-zookeeper-3.8.4-bin/ zookeeper

# 进入 zookeeper 的安装目录
[zhang@node1 apps]$ cd zookeeper/
[zhang@node1 zookeeper]$ ls
bin  conf  docs  lib  LICENSE.txt  NOTICE.txt  README.md  README_packaging.md
# 新建数据目录和日志目录
[zhang@node1 zookeeper]$ mkdir zk_data
[zhang@node1 zookeeper]$ mkdir zk_logs

# 进入配置目录
[zhang@node1 zookeeper]$ cd conf
[zhang@node1 conf]$ ls
configuration.xsl  logback.xml  zoo_sample.cfg
# 使用已有的模板文件,复制命名为 zoo.cfg
[zhang@node1 conf]$ cp zoo_sample.cfg zoo.cfg
# 修改配置为 上面自定义的数据目录和日志目录
[zhang@node1 conf]$ vim zoo.cfg

修改配置文件 zoo.cfg :
在这里插入图片描述
启动 ZooKeeper 服务

zookeeper 安装目录下的 bin 目录

bin/zkServer.sh start # 启动
bin/zkServer.sh stop  # 停止

修改环境变量(可选)

如果想在任何目录下都可以方便调用 zkServer 来启动 zookeeper 服务,可以配置环境变量。

例如,当前用户下的环境变量文件 ~/.bashrc

新增 ZK_HOME 和 修改 PATH

[zhang@node1 conf]$ vim ~/.bashrc 
[zhang@node1 conf]$ 

修改内容如下图:

在这里插入图片描述

启动 ZooKeeper 服务

在安装目录的 bin 目录下

启动服务:bin/zkServer.sh start

停止服务:bin/zkServer.sh stop

重启服务:bin/zkServer.sh restart

[zhang@node1 zookeeper]$ pwd
/opt/apps/zookeeper
[zhang@node1 zookeeper]$ ls
bin  conf  docs  lib  LICENSE.txt  NOTICE.txt  README.md  README_packaging.md  zk_data  zk_logs
# 在启动前可以先看下数据目录和日志目录下是没有任何文件的
[zhang@node1 zookeeper]$ ls zk_data
[zhang@node1 zookeeper]$ ls zk_logs/

# 启动服务 (因配置了环境变量,所以这里可以直接使用)
[zhang@node1 zookeeper]$ zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/apps/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

# 启动成功后,查看数据和日志目录
[zhang@node1 zookeeper]$ ls zk_data
version-2  zookeeper_server.pid
[zhang@node1 zookeeper]$ ls zk_logs/
version-2

# 也可以查看进程  多出一个 QuorumPeerMain
[zhang@node1 zookeeper]$ jps
29028 Jps
16533 NodeManager
28888 QuorumPeerMain
2777 NameNode
2906 DataNode

客户端连接

bin 目录下

连接本机默认端口 2181:zkClient.sh

连接指定主机端口:zkCli.sh -server node1:2181

在成功连接 ZooKeeper 后,进程中会多出 ZooKeeperMain 。退出后进程就会终止。

# 客户端连接
[zhang@node1 zookeeper]$ zkCli.sh
Connecting to localhost:2181
2024-04-21 18:33:17,582 [myid:] - INFO  [main:o.a.z.Environment@98] - Client environment:zookeeper.version=3.8.4-9316c2a7a97e1666d8f4593f34dd6fc36ecc436c, built on 2024-02-12 22:16 UTC
2024-04-21 18:33:17,584 [myid:] - INFO  [main:o.a.z.Environment@98] - Client environment:host.name=node1
2024-04-21 18:33:17,584 [myid:] - INFO  [main:o.a.z.Environment@98] - Client environment:java.version=1.8.0_281
# .......省略启动过程
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] 

# 退出客户端 quit
[zk: node1:2181(CONNECTED) 0] quit
WATCHER::
WatchedEvent state:Closed type:None path:null
2024-04-21 19:53:51,030 [myid:] - INFO  [main:o.a.z.ZooKeeper@1232] - Session: 0x10004c5597e0000 closed
2024-04-21 19:53:51,031 [myid:] - INFO  [main:o.a.z.u.ServiceUtils@45] - Exiting JVM with code 0
2024-04-21 19:53:51,031 [myid:] - INFO  [main-EventThread:o.a.z.ClientCnxn$EventThread@569] - EventThread shut down for session: 0x10004c5597e0000
[zhang@node1 zookeeper]$ 

简单命名操作

# (CONNECTED) 表示当前是连接状态
# 创建节点  zk_test 并设置数据
[zk: node1:2181(CONNECTED) 5] create /zk_test Hello,World!
Created /zk_test
# 获取节点数据
[zk: node1:2181(CONNECTED) 6] get /zk_test
Hello,World!
# 获取节点数据及其他详细信息
[zk: node1:2181(CONNECTED) 8] get -s /zk_test
Hello,World!
cZxid = 0xc
ctime = Sun Apr 21 23:10:44 CST 2024
mZxid = 0xc
mtime = Sun Apr 21 23:10:44 CST 2024
pZxid = 0xc
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 12
numChildren = 0
# 查看根节点
[zk: node1:2181(CONNECTED) 16] ls /
[zk_test, zookeeper]
# 关闭连接
[zk: node1:2181(CONNECTED) 17] close
WATCHER::
WatchedEvent state:Closed type:None path:null
2024-04-21 23:15:52,787 [myid:] - INFO  [main:o.a.z.ZooKeeper@1232] - Session: 0x10004c5597e0005 closed
2024-04-21 23:15:52,787 [myid:] - INFO  [main-EventThread:o.a.z.ClientCnxn$EventThread@569] - EventThread shut down for session: 0x10004c5597e0005
# 状态变为 (CLOSED)
[zk: node1:2181(CLOSED) 18] 
# 可以重新连接
[zk: node1:2181(CLOSED) 18] connect

注意:

quit 和 close 不同

quit 退出客户端命令窗口,同时也关闭连接

close 只是关闭连接,并不退出客户端

到此,单机模式的配置、ZooKeeper 启动、客户端登录等介绍到这里,由于篇幅较长,集群的搭建和使用放在下一篇来详细介绍!
ZooKeeper 搭建详细步骤之三(真集群)
ZooKeeper 搭建详细步骤之二(伪集群模式)
ZooKeeper 搭建详细步骤之一(单机模式)
ZooKeeper 及相关概念简介

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

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

相关文章

Blender笔记之基本操作

code review! —— 2024-04-27 杭州 Blender笔记…

yolov8旋转目标检测输出的角度转化为适合机械爪抓取的角度

1. 机械爪抓取时旋转的角度定义 以X轴正方向&#xff08;右&#xff09;为零度方向&#xff0c;角度取值范围[-90&#xff0c;90)。 确认角度的方法&#xff1a; 逆时针旋转X轴&#xff0c;X轴碰到矩形框长边时旋转过的角度记为angleX&#xff1a; 1.如果angleX小于90&#xf…

BootStrap详解

Bootstrap简介 什么是BootStrap&#xff1f; BootStrap来自Twitter&#xff0c;是目前最受欢迎的响应式前端框Bootstrap是基于HTML、CSS、JavaScript的&#xff0c;它简洁灵活&#xff0c;使得Web开发更加快捷 为什么使用Bootstrap&#xff1f; 移动设备优先&#xff1a;自…

在MySQL中isnull()函数不能作为替代null值!

在MySQL中isnull()函数不能作为替代null值&#xff01; 如下&#xff1a; 首先有个名字为business的表&#xff1a; SELECT ISNULL(business_name,no business_name) AS bus_isnull FROM business WHERE id2 直接运行就会报错&#xff1a; 错误代码&#xff1a; 1582 Incor…

ZISUOJ 高级语言程序设计实训-基础C(部分题)

说明&#xff1a; 有几个题是不会讲的&#xff0c;我只能保证大家拿保底分。 题目列表&#xff1a; 问题 A: 求平均数1 思路&#xff1a; 送分题…… 参考题解&#xff1a; #include <iostream> #include <iomanip> using std::cin; using std::cout;int main(…

Linux系统安全与应用【二】

目录 1.开关机安全控制 1.2 实例&#xff1a;GRUB 菜单设置密码 2.终端登录安全控制 2.1 限制root只在安全终端登录 ​3.弱口令检测 3.1 Joth the Ripper,JR​编辑 4.网络端口扫描 4.1 nmap命令 1.开关机安全控制 1.1 GRUB限制 限制更改GRUB引导参数 通常情况下在系统…

用fgets()替换fscanf()解决文件读取在小熊猫C++失败问题

fscanf&#xff08;&#xff09;遇到空格就结束读取&#xff0c;导致文件读取数据没完就退出读取以至于不能导入游戏地图工程。 看看到右侧小方块轨迹知晓采样区移动情况 也已经实现摄像机追随玩家效果 // 程序&#xff1a;2D RPG 地图编辑器与摄像机追随 // 作者&#xff1…

本地认证的密码去哪了?怎么保证安全的?

1. windows登录的明文密码&#xff0c;存储过程是怎么样的&#xff1f;密文存在哪个文件下?该文件是否可以打开&#xff0c;并且查看到密文&#xff1f; 系统将输入的明文密码通过hash算法转为哈希值&#xff0c;且输入的值会在内存中立即删除无法查看。 然后将密文存放在C:…

PotatoPie 4.0 实验教程(26) —— FPGA实现摄像头图像拉普拉斯锐化

为什么要对图像进行拉普拉斯锐化 对图像进行拉普拉斯锐化的目的是增强图像的边缘和细节&#xff0c;使图像看起来更加清晰和锐利。这种技术常用于图像处理中&#xff0c;具体原因如下&#xff1a; 增强图像的边缘信息&#xff1a;拉普拉斯锐化可以突出图像中的边缘特征&#x…

【go零基础】go-zero从零基础学习到实战教程 - 0环境配置

是个前端&#xff0c;最近开始学习go&#xff0c;后端除node外基本0基础&#xff0c;所以学习曲线有点绕&#xff0c;目标是个基础的服务端demo&#xff0c;搞个api服务后台&#xff0c;包含基础的用户登录、文章发布和写文章、权限控制&#xff0c;差不多就是个完整博客系统。…

2024年更新迭代最快的宿主软件FL Studio 24.0.99.4094中文激活版

FL Studio 24.0.99.4094中文激活版是我见过更新迭代最快的宿主软件&#xff0c;没有之一。FL Studio12、FL Studio20、FL Studio21、FL Studio24等等。 编辑有时甚至我刚刚下载好了最新版本&#xff0c;熟悉了新版本一些好用的操作&#xff0c;Fl Studio就又推出了更新的版本&a…

视频通话实时换脸:支持训练面部模型 | 开源日报 No.235

iperov/DeepFaceLive Stars: 19.7k License: GPL-3.0 DeepFaceLive 是一个用于 PC 实时流媒体或视频通话的人脸换装工具。 可以使用训练好的人脸模型从网络摄像头或视频中交换面部。提供多个公共面部模型&#xff0c;包括 Keanu Reeves、Mr. Bean 等。支持自己训练面部模型以…

Linux--进程控制(2)--进程的程序替换(夺舍)

目录 进程的程序替换 0.相关函数 1.先看现象 2.解释原理 3.将代码改成多进程版 4.使用其它的替换函数&#xff0c;并且认识函数参数的含义 5.其它 进程的程序替换 0.相关函数 关于进程替换我们需要了解的6个函数&#xff1a; 函数解释&#xff1a; 这些函数如果调用成功则…

Datart 扩装下载功能之PDF和图片下载

Datart 扩装下载功能之PDF和图片下载 首先下载依赖 yum install mesa-libOSMesa-devel gnu-free-sans-fonts wqy-zenhei-fonts -y 然后下载安装chrome yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm 查看chrome版本号 google…

CSS之显示覆盖内容(z-index)

前言&#xff1a; 我们有的时候&#xff0c;希望下方的内容能够显示到上方&#xff0c;达到类似于多个图层的效果&#xff0c;此时我们可以利用z-index这个属性。 介绍&#xff1b; z-index属性值是用来设置元素的堆叠顺序(元素层级)。 覆盖原则&#xff1a; <1>特殊…

Java反序列化-CC3链

前言 前面的CC1与CC6链都是通过 Runtime.exec() 进行命令执行的。当服务器的代码将 Runtime放入黑名单的时候就不能使用了。 CC3链的好处是通过动态加载类的机制实现恶意类代码执行。 版本限制 jdk8u65Commons-Collections 3.2.1 动态类加载 loadClass -> 负责加载load…

船舶空调的特殊性和标准

船用空调的特殊性 船用空调和陆用空调的区别有&#xff1a; ①海洋环境具有高盐度、高湿度的特性&#xff0c;船用空调系统应特别注意防腐和防霉&#xff1b; ②船用空调需要适应船舶在海面航行时的倾斜或摇摆&#xff1b; ③船用空调需要长期在海上运行&#xff0c;维修不易&…

unity 录制360全景渲染图

1.打开pakcageManager &#xff0c;选择packages为 unityRegisty&#xff0c;找到unityRecorder插件下载&#xff0c;点击右下角instant安装&#xff0c;如果插件列表为空&#xff0c;检查是否连接网络&#xff0c;重启Unity 2.打开录制面板 3.add recorder 选择ImageSequence …

基于canal监听MySQL binlog实现数据增量同步

一、背景 业务反馈客服消息列表查询速度慢&#xff0c;有时候甚至要差不多20秒&#xff0c;急需优化提升速度。 二、方案 引入 首先&#xff0c;体验系统&#xff0c;发现查询慢的正是消息列表查询接口。 接着去看代码的设计&#xff0c;流程比较长&#xff0c;但从代码逻…

动手学深度学习——线性回归从零实现

1. 数据集 1.1 生成数据集 要训练模型首先要准备训练数据集&#xff0c;对于线性模型 yXwb&#xff0c;定义生成数据集的函数如下&#xff1a; def synthetic_data(w, b, num_examples): #save"""生成yXwb噪声"""# 从均值为0&#xff0c;标准…