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

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);@Overridepublic 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.hqwc.cn/news/97829.html

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

相关文章

Java的23种设计模式

Java的23种设计模式 一、创建型设计模式1.单例模式 singleton1.1.静态属性单例模式1.2 静态属性变种1.3 基础的懒汉模式1.4 线程安全的懒加载单例1.5 线程安全的懒加载 单例-改进1.6 双重检查锁1.7 静态内部类1.8 枚举单例1.9 注册表单例 2.工厂方法模式 factory3.抽象工厂模式…

【力扣】304. 二维区域和检索 - 矩阵不可变 <二维前缀和>

目录 【力扣】304. 二维区域和检索 - 矩阵不可变二维前缀和理论初始化计算面积 题解 【力扣】304. 二维区域和检索 - 矩阵不可变 给定一个二维矩阵 matrix&#xff0c;以下类型的多个请求&#xff1a; 计算其子矩形范围内元素的总和&#xff0c;该子矩阵的 左上角 为 (row1, …

因为axios请求后端,接收不到token的问引出的问题

vue axios请求后端接受不到token的问题。 相关概念 什么是跨域&#xff1f; 跨域指的是在浏览器环境下&#xff0c;当发起请求的域&#xff08;或者网站&#xff09;与请求的资源所在的域之间存在协议、主机或端口中的任何一个条件不同的情况。换句话说&#xff0c;只要协议、…

算法笔记 近似最近邻查找(Approximate Nearest Neighbor Search,ANN)

1 介绍 精准最近邻搜索中数据维度一般较低&#xff0c;所以会采用穷举搜索&#xff0c;即在数据库中依次计算其中样本与所查询数据之间的距离&#xff0c;抽取出所计算出来的距离最小的样本即为所要查找的最近邻。 当数据量非常大的时候&#xff0c;搜索效率急剧下降。——>…

C语言:选择+编程(每日一练Day15)

目录 选择题&#xff1a; 题一&#xff1a; 题二&#xff1a; 题三&#xff1a; 题四&#xff1a; 题五&#xff1a; 编程题&#xff1a; 题一&#xff1a;寻找奇数 思路一&#xff1a; 题二&#xff1a;寻找峰值 思路一&#xff1a; 本人实力有限可能对一些地方解…

软件架构设计(三) B/S架构风格-层次架构(一)

层次架构风格从之前的两层C/S到三层C/S,然后演化为三层B/S架构,三层B/S架构之后仍然在往后面演化,我们来看一下层次架构演化过程中都有了哪些演化的架构风格呢? 而我们先简单了解一下之前的层次架构风格中分层的各个层次的作用。 表现层:由于用户进行交互,比如MVC,MVP,…

桌面平台层安全随手记录

声明 本文是学习桌面云安全技术要求. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 桌面平台层安全 桌面接入安全 用户标识 一般要求 本项要求包括&#xff1a; a) 系统应为用户提供唯一的身份标识&#xff0c;同时将用户的身份标识与该用户的所…

31 WEB漏洞-文件操作之文件包含漏洞全解

目录 文件包含漏洞原理检测类型利用修复 本地包含-无限制&#xff0c;有限制远程包含-无限制&#xff0c;有限制各种协议流玩法文章介绍读取文件源码用法执行php代码用法写入一句话木马用法每个脚本支持的协议玩法 演示案例某CMS程序文件包含利用-黑盒CTF-南邮大&#xff0c;i春…

422规范详解

概述&#xff1a; 全称为EIA-TIA-422-B&#xff0c;于1994年发布。 典型电路由一个发送器和N个接收器以及一个中断匹配电阻组成。 发送器&#xff1a; 差分输出电压值在2V~10V之间。 4.1.1 发送器输出阻抗 要求A/B之间的差分阻抗≤100Ω。 4.1.2 开路特性 要求差分电压≤…

449. 序列化和反序列化二叉搜索树

诸神缄默不语-个人CSDN博文目录 力扣刷题笔记 Python3版代码提示&#xff1a; # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val x # self.left None # self.right None# Your Codec object will…

Hadoop HDFS 高阶优化方案

目录 一、短路本地读取&#xff1a;Short Circuit Local Reads 1.1 背景 ​1.2 老版本的设计实现 ​1.3 安全性改进版设计实现 1.4 短路本地读取配置 1.4.1 libhadoop.so 1.4.2 hdfs-site.xml 1.4.3 查看 Datanode 日志 二、HDFS Block 负载平衡器&#xff1a;Balan…

pdf用什么软件打开?介绍几种常用打开方法

pdf用什么软件打开&#xff1f;PDF是一种广泛使用的文件格式&#xff0c;由于其跨平台和易于共享的特点&#xff0c;它已成为许多人在日常工作和学习中使用的首选文件格式。但是&#xff0c;有时候我们可能会遇到一些问题&#xff0c;比如不知道用什么软件打开PDF文件&#xff…