Windows和Linux环境中安装Zookeeper具体操作

news2024/11/25 2:46:45

1.Windows环境中安装Zookeeper

1.1 下载Zookeeper安装包

ZooKeeper官网下载地址
建议下载稳定版本的
在这里插入图片描述
下载后进行解压后得到如下文件:在这里插入图片描述

1.2 修改本地配置文件

进入解压后的目录,将zoo_example.cfg复制一份并重命名为zoo.cfg,如图所示:

打开zoo.cfg文件,找到dataDir,修改数据存放路径,此路径为本地自定义路径。

新增dataLogDir,添加zookeeper日志保存地址。在这里插入图片描述
在此配置中也可进行端口号修改,默认使用的是2181端口,但是一般使用的就是默认的配置文件,不需要进行更改。

1.3 环境变量配置

新增系统环境变量:在这里插入图片描述

ZOOKEEPER_HOME=D:\software\apache-zookeeper-3.8.2

然后在系统变量Path中新增如下命令参数:

%ZOOKEEPER_HOME%\bin

在这里插入图片描述

1.4 运行ZooKeeper

由于我们已经设置了环境变量,我们只需要在cmd输入zkserver就能成功运行ZooKeeper,具体如下图所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.Linux/Max环境中安装Zookeeper

2.1 ZooKeeper介绍

​ ZooKeeper是一个分布式的协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:

  • 配置维护
  • 域名服务
  • 分布式同步
  • 组服务等。
    ​ 在大型企业级项目开发中,服务的数量十分庞大。此时,如果想要添加一个服务的话,就需要对文件进行重新覆盖,对整个容器进行重启。这样做的一个弊端就是涉及的组件相当大,维护什么困难。
    ​ 那么需要一个能够动态注册服务和获取服务信息的组件来统一管理服务,这就是我们常说的服务配置中心。而zookeeper不仅能够对consumer和provider进行管理,并且还内置了负载均衡、主动通知等功能,能够帮助我们很好地解决分布式相关的问题。

2.2 ZooKeeper安装

现在linux主要采用Docker进行环境安装,方便又快捷,Docker的安装和使用请参考作者的这篇博客。
Docker最新超详细版教程通俗易懂(基础版)

  1. 拉取镜像
    docker pull zookeeper
    

在这里插入图片描述
2. 创建目录来进行ZooKeeper目录文件的挂载

mkdir zookeeper
ls

在这里插入图片描述
3. docker启动容器
设置端口映射、目录挂载、开机自启等命令设置

docker run -d -e TZ="Asia/Shanghai" -p 2181:2181 -v /mydata/zookeeper:/data --name zookeeper --restart always zookeeper

在这里插入图片描述
参数说明:

  • -e TZ=“Asia/Shanghai” :指定时区为上海
  • -d :后台运行
  • -p 2181:2181 : 端口映射,本地2181端口映射到容器内部的2181端口
  • -name : 设置容器的名称
  • -v :指定挂载的目录
  • -restart always :始终重新启动zookeeper
  1. 查看进程是否正常启动
    docker exec -it zookeeper /bin/bash
    

在这里插入图片描述
出现如上页面即表示zookeeper启动成功

2.3 本地连接linux zookeeper

  1. 新建SpringBoot项目
  2. 导入pom依赖:
    <!--zookeeper连接包-->
    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.4.6</version>
    </dependency>
    
  3. 创建测试类:
    package org.example;
    
    import org.apache.zookeeper.*;
    
    import java.util.List;
    import java.util.concurrent.CountDownLatch;
    import org.apache.zookeeper.CreateMode;
    import org.apache.zookeeper.KeeperException;
    import org.apache.zookeeper.WatchedEvent;
    import org.apache.zookeeper.Watcher;
    import org.apache.zookeeper.Watcher.Event.KeeperState;
    import org.apache.zookeeper.ZooDefs.Ids;
    import org.apache.zookeeper.ZooKeeper;
    import org.apache.zookeeper.data.Stat;
    
    public class BaseZooKeeper implements Watcher {
    
        private static ZooKeeper zooKeeper;
    
        // 超时时间
        private static final int SESSION_TIME_OUT = 1000;
    
        private CountDownLatch countDownLatch = new CountDownLatch(1);
    
        @Override
        public void process(WatchedEvent watchedEvent) {
            if (watchedEvent.getState() == Event.KeeperState.SyncConnected) {
                System.out.println("Watch received event");
                countDownLatch.countDown();
            }
        }
        /**连接zookeeper
         * @param host
         * @throws Exception
         */
        public void connectZookeeper(String host) throws Exception{
            zooKeeper = new ZooKeeper(host, SESSION_TIME_OUT, this);
            countDownLatch.await();
            System.out.println("zookeeper connection success");
        }
    
        /**
         * 创建节点
         * @param path
         * @param data
         * @throws Exception
         */
        public String createNode(String path,String data) throws Exception{
            return this.zooKeeper.create(path, data.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        }
    
        /**
         * 获取路径下所有子节点
         * @param path
         * @return
         * @throws KeeperException
         * @throws InterruptedException
         */
        public List<String> getChildren(String path) throws KeeperException, InterruptedException{
            List<String> children = zooKeeper.getChildren(path, false);
            return children;
        }
    
        /**
         * 获取节点上面的数据
         * @param path  路径
         * @return
         * @throws KeeperException
         * @throws InterruptedException
         */
        public String getData(String path) throws KeeperException, InterruptedException{
            byte[] data = zooKeeper.getData(path, false, null);
            if (data == null) {
                return "";
            }
            return new String(data);
        }
    
        /**
         * 设置节点信息
         * @param path  路径
         * @param data  数据
         * @return
         * @throws KeeperException
         * @throws InterruptedException
         */
        public Stat setData(String path,String data) throws KeeperException, InterruptedException{
            Stat stat = zooKeeper.setData(path, data.getBytes(), -1);
            return stat;
        }
    
        /**
         * 删除节点
         * @param path
         * @throws InterruptedException
         * @throws KeeperException
         */
        public void deleteNode(String path) throws InterruptedException, KeeperException{
            zooKeeper.delete(path, -1);
        }
    
        /**
         * 获取创建时间
         * @param path
         * @return
         * @throws KeeperException
         * @throws InterruptedException
         */
        public String getCTime(String path) throws KeeperException, InterruptedException{
            Stat stat = zooKeeper.exists(path, false);
            return String.valueOf(stat.getCtime());
        }
    
        /**
         * 获取某个路径下孩子的数量
         * @param path
         * @return
         * @throws KeeperException
         * @throws InterruptedException
         */
        public Integer getChildrenNum(String path) throws KeeperException, InterruptedException{
            int childenNum = zooKeeper.getChildren(path, false).size();
            return childenNum;
        }
        /**
         * 关闭连接
         * @throws InterruptedException
         */
        public void closeConnection() throws InterruptedException{
            if (zooKeeper != null) {
                zooKeeper.close();
            }
        }
        public static void main(String[] args) throws Exception {
            BaseZooKeeper zookeeper = new BaseZooKeeper();
            zookeeper.connectZookeeper("139.196.74.203:2181");  //改端口
            List<String> children = zookeeper.getChildren("/");
            System.out.println(children);
        }
    }
    
  4. 测试结果:
    在这里插入图片描述
    ​ 出现如上页面即表示连接成功
    ​ 项目仓库代码:https://github.com/liuhuanhuan963019/ZooKeeper.git

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

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

相关文章

飞天使-python的面向对象

文章目录 面向对象面向对象思想类的定义和使用继承封装多态访问控制 参考视频 面向对象 面向对象思想 面向过程和面对对象的区别是什么&#xff1f; 答: 复用性高&#xff0c;面向对象类的定义和使用 类型里面的定义的时候 self 不能省去&#xff0c;应该写出 class person:…

uni-app:允许字符间能自动换行(英文字符、数字等)

<template><view class"container"><!-- 这里是你的文本内容 -->{{ multilineText }}</view> </template><style> .container {word-break: break-all; } </style>例如&#xff1a; <template><view class"…

射频牛人教你前端滤波器的制作

前端滤波器的制作分析 在射频前端不加滤波器&#xff0c;接收效果会大打折扣。这个折扣有多大呢&#xff1f;一般的来说在天线良好的情况下距离至少会差2倍。而且&#xff0c;天线地势越高&#xff0c;接收效果越差&#xff01;为什么呢&#xff1f;因为当今的天空充斥着大量各…

抖音视频删了怎么在电脑上找回来

【昨天整理电脑文件时&#xff0c;不小心将剪辑好的抖音作品误删了&#xff0c;但是回收站中找不回来了&#xff0c;这些视频是我花了很多心血制作的&#xff0c;如果没了真的十分可惜&#xff01;希望大家能帮帮我&#xff0c;告诉我应该如何恢复这些文件。】 现在人们都喜欢…

【谷粒商城】开发篇三:微服务组件 SpringCloud SpringCloud Alibaba

谷粒商城微服务应用说明 SpringCloud Alibaba SpringCloud Alibaba 简介 SpringCloud Alibaba 简介 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件&#xff0c;方便开发者通过Spring Cloud 编程模型轻松使用这些组件…

MySQL用navicat工具对表进行筛选查找

这个操作其实很简单&#xff0c;但是对于没操作的人来说&#xff0c;就是不会呀。所以小编出这一个详细图解&#xff0c;希望能够帮助到大家。话不多说看图。 第一步&#xff1a; 点进一张表&#xff0c;点击筛选。 第二步&#xff1a; 点击添加 第三步&#xff1a; 选择要…

vConsole调试工具的三种使用方式

1.在html页面时, 在页面引入 cdn 方式引入 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" co…

前端将UTC时间格式转化为本地时间格式-uniapp写法

UTC时间格式是什么 首先我们先简单的了解一下&#xff1a;UTC时间&#xff08;协调世界时&#xff0c;Coordinated Universal Time&#xff09;使用24小时制&#xff0c;以小时、分钟、秒和毫秒来表示时间 HH:mm:ss.SSSHH 表示小时&#xff0c;取值范围为00到23。mm 表示分钟…

Tomcat安装及配置教程-Windows和Linux

本文主要介绍Windows版本Tomcat部署的详细步骤和列出Linux部署的简要细节命令,其中Windows从一到七,Linux用第八个标题讲述 一,安装 1,打开官网,https://tomcat.apache.org/,选择Tomcat 8.5.93版本,点击Download,根据系统版本选择压缩包 2,下载完毕,将压缩包解压,将所有文件放…

Gartner IDC:超融合回归“软件定义”本质,“全栈软件”成为厂商关键能力

近日&#xff0c;IDC 发布了《中国软件定义存储&#xff08;SDS&#xff09;及超融合存储系统&#xff08;HCI&#xff09;市场季度跟踪报告&#xff0c;2023 年第一季度》&#xff08;以下简称“跟踪报告”&#xff09;。不同于以往报告主要关注一体化超融合系统&#xff0c;这…

无涯教程-Android - DatePicker函数

Android Date Picker允许您在自定义用户界面中选择由日,月和年组成的日期。为此功能,android提供了DatePicker和DatePickerDialog组件。 在本教程中,我们将通过DatePickerDialog演示日期选择器的用法, DatePickerDialog是一个包含DatePicker的简单对话框。 为了显示DatePicker…

15、监测数据采集物联网应用开发步骤(11)

源码将于最后一遍文章给出下载 监测数据采集物联网应用开发步骤(10) 程序自动更新开发 前面章节写了部分功能模块开发&#xff1a; 日志或文本文件读写开发;Sqlite3数据库读写操作开发;定时器插件化开发;串口(COM)通讯开发;TCP/IP Client开发;TCP/IP Server 开发;modbus协议…

胜券汇:行业持续轮动 缺乏主线下关注反转预期的方向

前史行情4年一轮回&#xff0c;中心在于微观环境的类似性。首要&#xff0c;复盘前史&#xff0c;2016-2019年和2020年至今的行情走势较为类似&#xff0c;历经约1年半的长牛&#xff0c;约1年的长熊&#xff0c;阅历1个季度快速反弹后继续约3个季度的震动期。其次&#xff0c;…

二叉查找树(binary search tree)(难度7)

C数据结构与算法实现&#xff08;目录&#xff09; 答案在此&#xff1a;二叉查找树&#xff08;binary search tree&#xff09;&#xff08;答案&#xff09; 写在前面 部分内容参《算法导论》 基本接口实现 1 删除 删除值为value的第一个节点 删除叶子节点1 删除叶子节…

Jmete+Grafana+Prometheus+Influxdb+Nginx+Docker架构搭建压测体系/监控体系/实时压测数据展示平台+遇到问题总结

背景 需要大批量压测时&#xff0c;单机发出的压力能力有限&#xff0c;需要多台jmeter来同时进行压测&#xff1b;发压机资源不够&#xff0c;被压测系统没到瓶颈之前&#xff0c;发压机难免先发生资源不足的情形&#xff1b;反复压测时候也需要在不同机器中启动压测脚本&…

抖店的入门教程,新手开店后想快速跑通流程,必须要这么做!

我是王路飞。 作为一个在抖音刚开始开店卖货的新手商家&#xff0c;你认为对你来说&#xff0c;什么才是最重要的呢&#xff1f; 根据我做抖店这三四年的经验&#xff0c;以及所带的几百个学生的数据/结果反馈来看&#xff0c;先入门&#xff0c;永远是新手的第一要务。 只有…

股票融资50万一天利息是多少?利率可以给到5%吗?

利息股票融资50万一天利息是多少&#xff0c;需要结合您的融资利率来计算的。比如您的融资利率是8.35%&#xff0c;股票融资50万一天利息计算50万8.35%/360天115.97元&#xff0c;即&#xff1a;股票融资50万&#xff0c;一天的利息是115.97元。 股票融资利率一般是默认在8.35%…

CSRF(跨站请求伪造)和SSRF(服务端请求伪造)漏洞复现:风险与防护方法

这篇文章旨在用于网络安全学习&#xff0c;请勿进行任何非法行为&#xff0c;否则后果自负。 环境准备 一、CSRF&#xff08;跨站请求伪造&#xff09; 示例&#xff1a;假设用户在银行网站A上登录并保持会话活动&#xff0c;同时他也在浏览其他网站。攻击者在一个不可信任…

亚马逊加拿大站儿童床垫SOR安全要求SOR/2016-152

儿童床垫的安全性对于家庭的健康和孩子的成长至关重要。加拿大制定了一系列儿童产品安全法规&#xff0c;其中包括关于儿童床垫的安全要求。本文将介绍亚马逊加拿大站对儿童床垫的SOR安全要求&#xff0c;以帮助消费者选择安全可靠的产品。 本政策适用于与婴儿床、摇篮、婴儿摇…

Go死码消除

概念: 死码消除(dead code elimination, DCE) 是一种编译器优化技术, 作用是在编译阶段去掉对程序运行结果没有任何影响的代码 和 逃逸分析[1],内联优化[2]并称为 Go编译器执行的三个重要优化 效果: 对于 const.go代码如下: package mainimport "fmt"func max(a, b i…