Zookeeper 安装教程和使用指南

一、Zookeeper介绍

ZooKeeperApache 软件基金会的一个开源项目,主要基于 Java 语言实现。
Apache ZooKeeper 是一个开源的分布式应用程序协调服务,提供可靠的数据管理通知、数据同步、命名服务、分布式配置服务、分布式协调等服务。

关键特性

  • 分布式协调ZooKeeper提供了一个简单的架构,可以解决分布式应用中遇到的一些最复杂的问题,例如总线死锁、互斥锁、同步和组多播通信。
  • 高性能ZooKeeper旨在存储小数据量,可以完成大量的读取以及少量的写入。数据保存在内存中,因此 ZooKeeper 可以快速提供响应。
  • 高可用性ZooKeeper使用复制来提高可用性和存储数据的稳健性。它的所有写操作都会复制到配置的所有服务器。
  • 一致性:客户端将看到相同的服务端视图,因为更新都是有序并且一致的。即使在发生更改时,所有的写操作都会有全局有序。
  • 事务性:一旦更新成功,更改将持久化,直到新的更新覆盖它。

应用场景

  • 配置管理ZooKeeper可以为分布式应用提供统一的配置存储服务,当配置信息更新时,可以实时推送给所有相关的应用实例,这样就可以确保所有实例的配置信息都是一致的。
  • 集群管理ZooKeeper是分布式环境中的一种集群管理解决方案。它可以记录和监控节点信息,比如节点状态(在线、离线、空闲等),一旦某个节点发生异常,它可以进行及时通知。
  • 命名服务ZooKeeper提供了类似于文件系统的树状名称空间,可以实现分布式中的命名服务,每一次命名服务的改变都会被 ZooKeeper用事务的方式记录下来,从而保证命名服务的一致性。
  • 选举系统:在许多分布式算法中,如 PaxosRaft 等,都需要进行一种选举策略以确保在群体中能选出一个高效可靠的领导者,ZooKeeper提供了这样的机制。
  • 分布式队列ZooKeeper可以用于实现分布式队列,队列中的元素按照 FIFO(First-In-First-Out)的顺序进行出队。这在分布式环境中的任务分配上有很大的用处。
  • 分布式协调/同步(分布式锁):在分布式系统中,往往需要协调或同步各个节点的操作。ZooKeeper 的锁和条件变量可以使得分布式应用之间能够进行精细的同步控制。

开源项目

  • Hadoop : ZooKeeper 为 Namenode 提供高可用支持。
  • Kafka : ZooKeeper 主要为 Kafka 提供 Broker 和 Topic 的注册以及多个 Partition 的负载均衡等功能。
  • Hbase : ZooKeeper 为 Hbase 提供确保整个集群只有一个 Master 以及保存和提供 regionserver 状态信息(是否在线)等功能。

二、安装教程

下载说明

Zookeeper github:https://github.com/apache/zookeeper/tags
Zookeeper 官方地址:https://zookeeper.apache.org/releases.html

需要说明一下,打开官方地址后可以看到每个版本下面有两个下载链接,下载包分别对于bin和不带bin的版本:
在这里插入图片描述

从 github 的 readme 中,可以看到关于 apache-zookeeper-[version].tar.gzapache-zookeeper-[version]-bin.tar.gz 版本差别说明如下:

apache-zookeeper-[version].tar.gzContains all the source files which can be built by running:mvn clean installTo generate an aggregated apidocs for zookeeper-server and zookeeper-jute:mvn javadoc:aggregate(generated files will be at target/site/apidocs)apache-zookeeper-[version]-bin.tar.gzContains all the jar files required to run ZooKeeperFull documentation can also be found in the docs folder

可以看到:

  • apache-zookeeper-[version]-bin.tar.gz 包含所有的jar文件
  • apache-zookeeper-[version].tar.gz包含源码不包含jar文件,需要安装maven,然后再运行mvn clean install 和mvn javadoc:aggregate。

为了方便,下文均为基于 bin 安装包的说明
PS:编译安装参阅:使用C/C++ API接口操作 Zookeeper 数据

安装说明

# 下载和解压
[root@Ali ~]# wget https://dlcdn.apache.org/zookeeper/zookeeper-3.9.2/apache-zookeeper-3.9.2-bin.tar.gz
[root@Ali ~]# tar xzvf apache-zookeeper-3.9.2-bin.tar.gz
[root@Ali ~]# mv apache-zookeeper-3.9.2-bin /usr/local/zookeeper
[root@Ali ~]# cd /usr/local/zookeeper/
[root@Ali zookeeper]# ls
bin  conf  docs  lib  LICENSE.txt  logs  NOTICE.txt  README.md  README_packaging.md# 配置用户环境变量
[root@Ali zookeeper]# vim ~/.bash_profile
PATH=$PATH:/usr/local/zookeeper/bin/
export PATH

配置说明

单机模式

单机模式 (Standalone Mode) 下,只有一个 ZooKeeper 服务器负责处理客户端的所有请求。但是,如果该 ZooKeeper 服务器失败了,那么整个 ZooKeeper 服务就不可用。因此,这种模式通常用于开发和测试环境。

使用 单机模式 需要一个 zoo.cfg 配置文件,可以直接在conf目录下拷贝和修改 zoo_sample.cfg

[root@Ali zookeeper]# cp conf/zoo_sample.cfg conf/zoo.cfg
[root@Ali zookeeper]# vim conf/zoo.cfg
tickTime=2000
dataDir=/usr/local/zookeeper/data
dataLogDir=/srv/zookeeper3/trans_logs
clientPort=2181

参数说明

tickTime: 基本时间单位(毫秒)。服务器之间维持心跳的时间间隔为1个 tickTime
dataDir: 存储内存中数据库快照的位置。
dataLogDir : 记录写事件的事务日志,默认写到 dataDir 目录下。
clientPort: 客户端连接端口号

集群模式

集群模式 (Quorum Mode) 下,ZooKeeper 运行在一个服务器集群中,集群中的任何一台机器都可以处理客户端的请求。如果某个服务器故障,其余的服务器仍然可以提供服务,这就实现了高可用。而且,这种模式也能保证强一致性。因为只有当过半的服务器同意进行某个操作,才能进行该操作。因此,这种模式主要用在生产环境。

集群模式 至少需要三台服务器,强烈建议您使用奇数台服务器。如果只有两台服务器,那么如果其中一台出现故障,则没有足够的机器来形成多数仲裁。两台服务器本质上不如一台服务器稳定,因为有两个单点故障。

伪集群模式 (Pseudo-distributed Mode) :指在一台机器上启动多个 ZooKeeper 服务(每个服务使用不同的配置和端口),模拟 ZooKeeper 的集群模式。
这种模式中,每个 ZooKeeper 实例都以为自己是在不同的机器上运行。通常,每个实例都会有自己的配置文件,指定自己的客户端通讯端口、服务器的通信端口、数据和日志的存储位置等等,这些都需要区别于其他实例。并且,每个实例的配置文件还需要列出所有的 ZooKeeper 服务实例,包括他自己,来模拟集群中服务器间的通讯。

如下以 伪集群模式 的部署3个实例

# 实例1
[root@Ali ~]# cd /usr/local/zookeeper/
[root@Ali zookeeper]# vim data/myid
1
[root@Ali zookeeper]# vim conf/zoo.cfg 
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/trans_logs
clientPort=12181server.1=127.0.0.1:12888:13888
server.2=127.0.0.1:22888:23888
server.3=127.0.0.1:32888:33888# 实例2[root@Ali ~]# cd /srv/zookeeper2/
[root@Ali zookeeper3]# vim data/myid
2
[root@Ali zookeeper3]# vim conf/zoo.cfg 
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/srv/zookeeper2/data
dataLogDir=/srv/zookeeper2/trans_logs
clientPort=22181server.1=127.0.0.1:12888:13888
server.2=127.0.0.1:22888:23888
server.3=127.0.0.1:32888:33888# 实例3
[root@Ali ~]# cd /srv/zookeeper3/
[root@Ali zookeeper3]# vim data/myid
3
[root@Ali zookeeper3]# vim conf/zoo.cfg 
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/srv/zookeeper3/data
dataLogDir=/srv/zookeeper3/trans_logs
clientPort=32181server.1=127.0.0.1:12888:13888
server.2=127.0.0.1:22888:23888
server.3=127.0.0.1:32888:33888

参数说明

data/myid:服务唯一ID,必须是ASCII码的一个数值。
initLimit:这是用于限制 ZooKeeper 服务器与集群中 Leader 服务器初次建立连接时的尝试次数,如果在 tickTime * initLimit 时间内无法建立连接,则该服务器退出选举过程。这个参数的值通常大于 3。
syncLimit:这是用于限制 ZooKeeper 服务器与集群中 Leader 服务器同步数据时的尝试次数,如果在 tickTime * syncLimit 时间内无法完成数据同步,则该服务器将停止与 Leader 的同步连接。这个参数的值通常大于 2。
server.X=A:B:C:包含4个参数,参数含义分别为

  • X :每台 ZooKeeper 服务器的唯一编号必须和 myid 一致,这些服务器组成了 ZooKeeper 服务集群。
  • A :该服务器的主机名
  • BZooKeeper 服务器之间的数据通信端口号
  • CZooKeeper 服务器之间的选举 Leader 的端口号

三、使用指南

服务端使用说明

[root@Ali ~]# zkServer.sh version
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Apache ZooKeeper, version 3.9.2 2024-02-12 20:59 UTC[root@Ali ~]# zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: standalone[root@Ali ~]# zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED[root@Ali ~]# zkServer.sh stop
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

更多工具说明详见: Zookeeper管理员工具

客户端使用说明

# 连接服务端
[wengjianhong@Ali ~]$ zkCli.sh -server 127.0.0.1:12181# 查看命令
[zk: 127.0.0.1:2181(CONNECTED) 0] help
ZooKeeper -server host:port -client-configuration properties-file cmd argsaddWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVEaddauth scheme authcloseconfig [-c] [-w] [-s]connect host:portcreate [-s] [-e] [-c] [-t ttl] path [data] [acl]delete [-v version] pathdeleteall path [-b batch size]delquota [-n|-b|-N|-B] pathget [-s] [-w] pathgetAcl [-s] pathgetAllChildrenNumber pathgetEphemerals pathhistorylistquota pathls [-s] [-w] [-R] pathprintwatches on|offquitreconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]redo cmdnoremovewatches path [-c|-d|-a] [-l]set [-s] [-v version] path datasetAcl [-s] [-v version] [-R] path aclsetquota -n|-b|-N|-B val pathstat [-w] pathsync pathversionwhoami# 查看版本
[zk: 127.0.0.1:2181(CONNECTED) 2] version
ZooKeeper CLI version: 3.9.2-e454e8c7283100c7caec6dcae2bc82aaecb63023, built on 2024-02-12 20:59 UTC# 创建节点
[zk: 127.0.0.1:2181(CONNECTED) 3] create /init_date "20240520"
Created /init_date# 查看节点
[zk: 127.0.0.1:2181(CONNECTED) 4] get /init_date
20240520# 删除节点
[zkshell: 2] delete /config/topics/test
[zkshell: 3] ls /config/topics/testNode does not exist: /config/topics/test

更多客户端命令,参阅: Zookeeper客户端

推荐阅读:

  • Zookeeper官方文档
  • Zookeeper中文文档
  • Zookeeper程序开发指南
  • 史上最全的Zookeeper原理详解(万字长文)

下一篇:使用C/C++ API 接口操作 Zookeeper数据

在这里插入图片描述

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

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

相关文章

Nginx实战(安装部署、常用命令、反向代理、负载均衡、动静分离)

文章目录 1. nginx安装部署1.1 windows安装包1.2 linux-源码编译1.3 linux-docker安装 2. nginx介绍2.1 简介2.2 常用命令2.3 nginx运行原理2.3.1 mater和worker2.3.3 Nginx 的工作原理 2.4 nginx的基本配置文件2.4.1 location指令说明 3. nginx案例3.1 nginx-反向代理案例013.…

数据结构和算法|排序算法系列(三)|插入排序(三路排序函数std::sort)

首先需要你对排序算法的评价维度和一个理想排序算法应该是什么样的有一个基本的认知: 《Hello算法之排序算法》 主要内容来自:Hello算法11.4 插入排序 插入排序的整个过程与手动整理一副牌非常相似。 我们在未排序区间选择一个基准元素,将…

移动云以深度融合之服务,令“大”智慧贯穿云端

移动云助力大模型,开拓创新领未来。 云计算——AI模型的推动器。 当前人工智能技术发展的现状和趋势,以及中国在人工智能领域的发展策略和成就。确实,以 ChatGPT 为代表的大型语言模型在自然语言处理、文本生成、对话系统等领域取得了显著的…

项目管理:敏捷实践框架

一、初识敏捷 什么是敏捷(Agile)?敏捷是思维方式。 传统开发模型 央企,国企50%-60%需求分析。整体是由文档控制的过程管理。 传统软件开发面临的问题: 交付周期长:3-6个月甚至更长沟通效果差:文档化沟通不及时按时发布低:技术债增多无法发版团队士气弱:死亡行军不关注…

Vmware 17安装 CentOS9

前言 1、提前下载好需要的CentOS9镜像,下载地址,这里下载的是x86_64 2、提前安装好vmware 17,下载地址 ,需要登录才能下载 安装 1、创建新的虚拟机 2、在弹出的界面中选择对应的类型,我这里选择自定义,点…

python command乱码怎么解决

python command乱码怎么解决?具体方法如下: 先引入import sys 再加一句:typesys.getfilesystemencoding() 然后在输出乱码的数据的后面加上“.decode(utf-8).encode(type)”。 比如输入“ss”乱码。 就写成print ss.decode(utf-8).encode(typ…

【话题】AIGC行业现在适合进入吗

大家好,我是全栈小5,欢迎阅读小5的系列文章,这是《话题》系列文章 目录 引言AIGC的发展阶段市场需求时机是否合适优势挑战 文章推荐 引言 在撰写关于当前是否适合进入AIGC(人工智能生成内容)行业的文章之前&#xff0…

从零实现Llama3中文版

1.前言 一个月前,Meta 发布了开源大模型 llama3 系列,在多个关键基准测试中优于业界 SOTA 模型,并在代码生成任务上全面领先。 此后,开发者们便开始了本地部署和实现,比如 llama3 的中文实现、llama3 的纯 NumPy 实现…

数据结构——链式二叉树知识点以及链式二叉树数据操作函数详解!!

引言:该博客将会详细的讲解二叉树的三种遍历方法:前序、中序、后序,也同时会讲到关于二叉树的数据操作函数。值得一提的是,这些函数几乎都是建立在一个函数思想——递归之上的。这次的代码其实写起来十分简单,用不了几…

告别红色波浪线:tsconfig.json 配置详解

使用PC端的朋友,请将页面缩小到最小比例,阅读最佳! tsconfig.json 文件用于配置 TypeScript 项目的编译选项。如果配不对,就会在项目中显示一波又一波的红色波浪线,警告你这些地方的类型声明存在问题。 一般我们遇到这…

在没有dubbo-admin情况下如何判断zk中注册的dubbo服务是否注册成功

通常我们都是通过dubbo-admin来查看dubbo服务是否注册成功,那么如果没有部署dubbo-admind的情况下,我们如何来判断dubbo服务是否注册成功: 一、首先我们进入到zookeeper bin目录下使用以下指令连接到zk: ./zkCli.sh -server ip:port ip&…

Linux文件系统原理

Linux文件系统 冯诺依曼在1945年提出计算机的五大组成部分 运算器:CPU 控制器:CPU 存储器:内存和硬盘 输入设备:鼠标、硬盘 输出设备:显示器一、硬盘结构 机械硬盘结构 扇区:硬盘的最小存储单位&#xff…

IOT技术怎么落地?以宝马,施耐德为例

物联网技术 物联网(IoT)技术正逐渐成为数字化工厂转型的核心驱动力。本文将通过实际案例,探讨IoT技术如何促进制造业的数字化转型,提高生产效率,降低成本,并提升产品质量。 1. 物联网技术简介 物联网技术通…

MySQL数据库基础:使用、架构、SQL语句、存储引擎

文章目录 什么是数据库CS模式 基本使用安装链接服务器服务器、数据库、表关系简单使用数据库在Linux下的体现 MySQL架构连接器层客户端层服务层存储引擎层物理存储层 SQL分类存储引擎 什么是数据库 mysql:数据库服务的客户端mysqld:数据库服务的服务器端…

PLC_博图系列☞R_TRIG:检测信号上升沿

PLC_博图系列☞R_TRIG:检测信号上升沿 文章目录 PLC_博图系列☞R_TRIG:检测信号上升沿背景介绍R_TRIG: 检测信号上升沿说明参数示例 关键字: PLC、 西门子、 博图、 Siemens 、 R_TRIG 背景介绍 这是一篇关于PLC编程的文章&a…

[ C++ ] 类和对象( 中 ) 2

目录 前置和后置重载 运算符重载和函数重载 流插入流提取的重载 全局函数访问类私有变量 友员 const成员 取地址及const取地址操作符重载 前置和后置重载 运算符重载和函数重载 流插入流提取的重载 重载成成员函数会出现顺序不同的情况(函数重载形参顺序必须相…

数据结构(五)树与二叉树

2024年5月26日一稿(王道P142) 基本概念 术语 性质 二叉树 5.2.2 二叉树存储结构

嵌入式进阶——数码管2

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 驱动封装封装的一些疑问数字走马灯实现扩展知识 驱动封装 根据前面的内容可以将代码进行封装,封装后作为一个独立的整…

贪心题目总结

1. 最长递增子序列 我们来看一下我们的贪心策略体现在哪里??? 我们来总结一下: 我们在考虑最长递增子序列的长度的时候,其实并不关心这个序列长什么样子,我们只是关心最后一个元素是谁。这样新来一个元素之后&#xf…

【Week-R1】RNN实现心脏病预测,基于tensorflow框架

文章目录 一、什么是RNN?二、准备环境和数据2.1 导入数据 三、构建模型四、训练和预测五、其他(1)sklearn模块导入报错:ModuleNotFoundError: No module named sklearn(2)优化器改为SGD,accurac…