如何在 Unbuntu 下安装配置 Apache Zookeeper

简介

Zookeeper 是 apache 基金组织下的项目,项目用于简单的监控和管理一组服务,通过简单的接口就可以集中协调一组服务,如配置管理,信息同步,命名,分布式协调。 

准备工作

  1. Ubuntu 23.04 或者 20.04
  2. 访问Ubuntu系统的命令行工具
  3. 具有 sudo 或者 root 权限的账号

安装 Apache Zookeeper 到 Ubuntu 系统上

第一步: 安装Java

Zookeeper 是使用Java 语言编写的,我们需要提前安装Java. 通过一下命令检查Java 是否安装

java --version

假如这一步能够正确显示Java的版本, 你可以直接到下一步。 如果显示的信息是 no such file or directory。 那么你就需要安装 Java.
Java 现在已经有不同的版本了,按照你的需求安装合适的版本

第二步: 为 Zookeeper 服务创建用户

1. 使用下列命令创建一个单独的用户

sudo useradd zookeeper -m

-m 参数是用于在创建用户的同时创建 Home 目录。 上面的脚本会创建目录 /home/zookeeper. 如想使用不同的名称,只要替换 zookeeper 就可以。

2. 指定用户的默认shell为 bash

sudo usermod --shell /bin/bash zookeeper

3. 设置密码

sudo passwd zookeeper

4. 把用户添加到sudo组里面

sudo usermod -aG sudo zookeeper

5. 检查一下用户是不是已经在sudo组里面

sudo getent group sudo

 

第三步:创建Zookeeper的数据目录

在真正安装 zookeeper 之前我们需要创建一个可以用于存储 zookeeper 数据和配置的文件夹。 执行下列脚本创建zookeeper 的数据目录

sudo mkdir -p /data/zookeeper

设置zookeeper 用户为此目录的所有者

sudo chown -R zookeeper:zookeeper /data/zookeeper

第四步: 下载并安装 Zookeeper

1. 访问 Apache Zookeeper Releases 找到最新版本.

2. 右键复制推荐的HTTP下载地址

3. 返回到命令行界面,进入目录 /opt

cd /opt

4. 使用 wget 命令下载 .tar 文件。粘贴刚刚复制的链接如下

sudo wget https://dlcdn.apache.org/zookeeper/zookeeper-3.9.1/apache-zookeeper-3.9.1-bin.tar.gz

5. 解压文件

sudo tar -xvf apache-zookeeper-3.9.1-bin.tar.gz

需要注意的是,以上两个步骤的链接地址还有文件名称,只是一个例子,具体还是需要根据你下载的文件做调整

6. 重命名文件夹的名称为 zookeeper

sudo mv apache-zookeeper-3.9.1-bin zookeeper

7. 指定zookeeper 为此目录的拥有着

sudo chown -R zookeeper:zookeeper /opt/zookeeper

第五步:配置单机模式下的Zookeeper

为 zookeeper 创建一个配置文件, 这个配置仅仅用于单机模式(测试环境或者开发环境)。 如果是生产环境,看第六步.

cd /opt/zookeeper/conf/

sudo cp zoo_sample.cfg zoo.cfg

sudo nano zoo.cfg

修改数据目录地址配置项为: /data/zookeeper. 其他项目保持不变,保存并退出。

第六步:启动 zookeeper 服务

首先切换当前的用户到 zookeeper 用户

su zookeeper

启动服务

/opt/zookeeper/bin/zkServer.sh start

如果如下显示出 “STARTED",那么说明服务启动成功了。

第七步: 链接 zookeeper 服务

使用脚本链接本地的zookeeper 服务

/opt/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181

如果显示 “CONNECTED” 则说明链接成功

执行 help 查询命令说明

输入命令:

quit

停止zookeeper 服务

/opt/zookeeper/bin/zkServer.sh stop

第八步: 创建自动启动脚本

1. 创建自动启动配置文件

sudo nano /etc/systemd/system/zookeeper.service

2. 复制下列内容到文件中

[Unit]
Description=Zookeeper Daemon
Documentation=http://zookeeper.apache.org
Requires=network.target
After=network.target

[Service]    
Type=forking
WorkingDirectory=/opt/zookeeper
User=zookeeper
Group=zookeeper
ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg
ExecStop=/opt/zookeeper/bin/zkServer.sh stop /opt/zookeeper/conf/zoo.cfg
ExecReload=/opt/zookeeper/bin/zkServer.sh restart /opt/zookeeper/conf/zoo.cfg
TimeoutSec=30
Restart=on-failure

[Install]
WantedBy=default.target

3. 保存并退出

4. 重启价值 system server

sudo systemctl daemon-reload

5.启动zookeeper 服务并且设置为开机启动

systemctl start zookeeper
systemctl enable zookeeper

6. 验证服务的状态

systemctl status zookeeper

如果你看到高亮的 active (running) 则说明服务成功启动

配置集群模式的 zookeeper

第一步: 创建多个zookeeper实例

集群模式下,首先你需要准备多个 Ubuntu 机器实例。并且按照第二章节的逐个安装配置。

第二步:为每一个zookeeper 实例指定一个唯一的id

nano /data/zookeeper myid

文件内容就是此服务的id

1

循环上一个步骤,以此给每个服务器创建一个唯一的id.

第三步:在zookeeper 的配置文件中逐个添加服务器列表

nano /opt/zookeeper/conf/zoo.cfg

内容如下:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/data/zookeeper
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true

server.1=[server_ip]:2888:3888
server.2=[server_ip]:2888:3888
server.3=[server_ip]:2888:3888

第三步:逐个重启zookeeper

systemctl restart zookeeper.service

参考链接:

How To Install Apache ZooKeeper On Ubuntu

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pycharm插件推荐:一款能够根据上下文自动提示帮写代码的AI插件

直接上插件: 这个插件有多牛!他能够根据注释帮你直接补全代码(只需要你按一下tab键),甚至还有学习的能力。 如下: 我注释写完后,一回车就模糊的写出了预计的代码,只要我按下tab键…

利用大语言模型(LLM )提高工作效率

日常工作就是面向 google/ 百度编程,除了给变量命名是手动输入,大多时候就是通过搜索引擎拷贝别人的代码,或者找到旧项目一段代码拷贝过来使用。这无疑是开发人员的真实写照;然而,通过搜索引擎搜索答案,无疑…

Reshape.XL 1.2 for Excel插件 Crack

特征 插件 Reshape.XL 包括 130 个基本可组合功能。使用它们,您可以快速轻松地进行非常复杂的数据转换和处理。它们的架构和基本定义受到 SQL 和 R 语言的强烈启发。 到目前为止,类似的功能只能通过脚本语言供程序员使用。借助 Reshape.XL 插件&#xf…

Leetcode-88 合并两个有序数组

使用内置排序函数&#xff0c;时间复杂度On^2 class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int j0,im;while(j<n){nums1[i]nums2[j];}Arrays.sort(nums1);} }新建一个临时数组用于放排序后的元素&#xff0c;再将临时数组赋值给nums1&…

linux之按键中断

查看原理图确认引脚 可以看到按键有两个&#xff0c;分别对应GPIO5_1和GPIO4_14 配置pinctrl&#xff0c;配置成GPIO模式 1.使用官方工具&#xff0c;配置下引脚 2.将生成的代码复制到设备树里 创建设备节点 生成二进制设备树文件 在工具链表下使用 make dtbs 或者使…

x264交叉编译(ubuntu+arm)

1.下载源码 https://code.videolan.org/videolan/x264 在windows下解压&#xff1b;复制到ubuntu&#xff1b; 2.进入源码文件夹-新建脚本文件 touch sp_run.sh 3.在sp_run.sh文件中输入 #!/bin/sh./configure --prefix/home/alientek/sp_test/x264/sp_install --enable-…

【python 深拷贝与浅拷贝】

python 深拷贝与浅拷贝 问题&#xff1a; 在用影刀编写流程的时候发现&#xff0c;明明只修改人名为“小张”对应的字典里面的值&#xff0c;但是所有的人名对应的值都被修改了。 原因&#xff1a; 第14行&#xff0c;设置键值对&#xff0c;值对应的变量“初始打卡类型字…

linux下使用vscode对C++项目进行编译

项目的目录结构 头文件swap.h 在自定义的头文件中写函数的声明。 // 函数的声明 void swap(int a,int b);swap.cpp 导入函数的声明&#xff0c;写函数的定义 #include "swap.h" // 双引号表示自定义的头文件 #include <iostream> using namespace std;// 函…

数字化饲料工厂中常见的系统及其介绍

数字化饲料工厂是基于先进技术和数字化平台构建的现代化饲料生产系统&#xff0c;它包含了多种软件、硬件和基础设施系统。以下是数字化饲料工厂中常见的系统及其介绍&#xff1a; 一、自动化控制系统&#xff1a;包括PLC&#xff08;可编程逻辑控制器&#xff09;系统、SCADA&…

【MongoDB】索引 - 单字段索引

MongoDB支持在集合文档中的任意字段上创建索引&#xff0c;默认情况下所有的集合都有一个_id字段的索引&#xff0c;用户和应用可以新增索引用于查询和操作。 一、准备工作 这里准备一些学生数据 db.students.insertMany([{ _id: 1, name: "张三", age: 20, clas…

海康Visionmaster-全局变量:全局变量关联流程中具体 模块结果的方法

将视觉流程中模板匹配算法模块运行的结果数据&#xff1a;特征匹配点 X 关联全局变量 MatchResultX。 在流程运行的主界面中&#xff0c;按照下面 1&#xff0c;2&#xff0c;3&#xff0c;4 步骤操作&#xff0c;第一步选中算法模块&#xff0c;第二步择模块结果 Tab 页&#…

ssm整合原理与实战

文章目录 前言一、SSM整合原理1.1 什么是SSM整合1.2 SSM整合核心问题1.2.1 第一问&#xff1a;SSM整合需要几个IoC容器&#xff1f;1.2.2 第二问&#xff1a;每个IoC容器对应哪些类型组件&#xff1f;1.2.3 第三问&#xff1a;IoC容器之间关系和调用方向&#xff1f;1.2.4第四问…

航模模拟器训练

固定翼吃灰很久忘记咋么操作 故这里发帖防止忘记 准备物品 航模遥控器 aux线 即两端都是耳机插头的线 解密狗 电脑 phoenixRC 航模模拟软件(【飞舜极创】凤凰5.0飞行模拟器 安装和设置方法_哔哩哔哩_bilibili) 链接&#xff1a;https://pan.baidu.com/s/1XL4ZWhMR7MQMxDPC7B…

【Kubernetes 基本概念】Kubernetes 的架构和核心概念

目录 一、Kurbernetes1.1 简介1.2 为什么要用K8s?1.3 K8s的特性 二、Kurbernetes集群架构与组件三、Kurbernetes的核心组件3.1 Master组件3.1.1 Kube-apiserver3.1.2 Kube-controller-manager3.1.3 Kube-scheduler 3.2 配置存储中心——etcd3.3 Node组件3.3.1 Kubelet3.3.2 Ku…

社区牛奶智能售货机为你带来便利与实惠

社区牛奶智能售货机为你带来便利与实惠 低成本&#xff1a;社区牛奶智能货机的最大优势在于成本低廉&#xff0c;租金和人工开支都很少。大部分时间&#xff0c;货柜都是由无人操作来完成销售任务。 购买便利&#xff1a;社区居民只需通过手机扫码支付&#xff0c;支付后即可自…

springboot常见网络相关错误及原因解析

在基于spring-boot开发过程尤其是上线后&#xff0c;经常出现网络相关的错误&#xff0c;令人难以琢磨和下手&#xff0c;所以就spring-boot使用过程中可能碰到的网络相关问题进行分析&#xff0c;结合网络转包、日志报错和前端输出&#xff0c;针对网络连接超时、连接被拒绝、…

谈谈MySQL的底层存储

这个题目启的很大&#xff0c;但其实只是最近在复习MySQL知识的一点心得&#xff0c;比较零散。 更新数据时&#xff0c;底层page的变化 下面这个图&#xff0c;我还需要解释么&#xff1f; 上面的绿色是b数的索引块&#xff0c;分别说明了101号page的最大id是7,102号page的…

时序分解 | Matlab实现FEEMD快速集合经验模态分解时间序列信号分解

时序分解 | Matlab实现FEEMD快速集合经验模态分解时间序列信号分解 目录 时序分解 | Matlab实现FEEMD快速集合经验模态分解时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现FEEMD快速集合经验模态分解时间序列信号分解 算法新颖小众&#xff0c…

力扣:有效的括号

自己编写的代码 。 自己的思路&#xff1a; class Solution { private:unordered_map<char,int>symbolValues{{(,1},{),2},{{,4},{},5},{[,8},{],9}, };public:bool isValid(string s) {bool flagfalse;int lenss.length();if (lens % 2 ! 0){flag false;}for…

Leetcode-283 移动零

count记录0的个数&#xff0c;不为0的数取代0位置&#xff0c;最后把剩余位置置零 class Solution {public void moveZeroes(int[] nums) {int count 0;for(int i0;i<nums.length;i){if(nums[i]0){count;}else{nums[i-count]nums[i];}}for(int inums.length-count;i<nu…