ZooKeeper的安装与操作

这篇具有很好参考价值的文章主要介绍了ZooKeeper的安装与操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、ZooKeeper简介

ZooKeeper是一个分布式的、开放源码的分布式应用程序协调服务,它是Google的Chubby服务的开源实现,也是Hadoop和HBase等大数据生态系统中的重要组件。ZooKeeper的目标是为分布式应用提供一致性服务,包括配置维护、域名服务、分布式同步和组服务等。它封装了复杂且易出错的关键服务,通过简单的接口和高效、稳定的系统提供给用户。

ZooKeeper的工作原理基于Fast Paxos算法,该算法通过选举产生一个领导者(leader),只有领导者能提交proposer,以此来解决Paxos算法中可能存在的活锁问题。

ZooKeeper提供的服务包括但不限于:

  • 主从协调:确保分布式系统中各个节点的一致性。
  • 服务器节点动态上下线管理:监视集群中节点的状态,并根据节点反馈进行操作。
  • 统一配置管理:允许分布式系统中的不同组件共享配置信息。
  • 分布式共享锁:提供分布式环境下的锁机制。
  • 统一名称服务:为分布式系统中的节点提供唯一的标识和服务发现。

Zookeeper的数据模型类似于文件系统,是树状结构,每个树节点(目录)对应一个Znode节点。这些目录节点和我们普通的目录一样可以新建、删除、修改。

ZooKeeper的安装与操作,分布式,云原生,zookeeper

ZooKeeper的底层功能主要包括管理和监听用户程序提交的数据,以及为用户程序提供数据节点监听服务。它的文件系统采用目录树结构,不依赖于HDFS,而是有自己的文件系统目录树。ZooKeeper使用Java编写,但支持Java和C两种编程语言的接口。

ZooKeeper的代码版本中提供了分布式独享锁、选举、队列的接口,其中分布锁和队列有Java和C两个版本,选举只有Java版本。它不仅是一个集群的管理者,还监视着集群中各个节点的状态,并根据节点提交的反馈进行下一步合理操作。

二、ZooKeeper安装与配置

实验环境:

                Centos7操作系统

                虚拟机1,虚拟机2        

                Zookeeper集群

!!!注意,以下操作两台虚拟机都要进行!!!

1、下载解压ZooKeeper到/usr/local文件夹下

wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
sudo mv /home/qyf/Desktop/zookeeper-3.4.10.tar.gz /usr/local
tar -zxvf /usr/local/zookeeper-3.4.10.tar.gz

ZooKeeper的安装与操作,分布式,云原生,zookeeper

2、编辑/etc/profile文件

sudo vi /etc/profile

写入以下内容:

export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.10
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf

使配置生效:

source /etc/profile

3、进入zookeeper/conf目录,建立新文件zoo.cfg

sudo cd /home/zookeeper-3.4.10/conf
sudo vi zoo.cfg

写入以下内容:

dataDir=/usr/local/zookeeper-3.4.10/data # data文件夹要创建的位置
tickTime=2000
initLimit=5
syncLimit=2
clientPort=2181 # 端口号,可以自己设置

server.1=192.168.37.104:2888:3888  // 此处IP地址为你的两台虚拟机的IP地址
server.2=192.168.37.105:2888:3888      

4.如果是普通模式下要给Zookeeper文件夹相关的操作权限,如果是root用户则忽略这一步

sudo chmod -R 777 ./zookeeper-3.4.10

5、启动ZooKeeper服务

zkServer.sh start

如果输出以下内容,则启动成功

ZooKeeper的安装与操作,分布式,云原生,zookeeper

建立myid,在第一台虚拟机输入1,第二台输入2

ZooKeeper的安装与操作,分布式,云原生,zookeeper

ZooKeeper的安装与操作,分布式,云原生,zookeeper

ZooKeeper的安装与操作,分布式,云原生,zookeeper

三、使用命令行操作Zookeeper

配置好Zookeeper之后,就可以操作Zookeeper集群了,现在我们使用命令行终端进行操作

1、输入以下命令,连接Zookeeper集群(第二台虚拟机进行同样的操作,IP地址记得换!)

zkCli.sh -server 192.168.37.104:2181

因为_现在我是在第一台虚拟机上操作的,所以IP地址填写第一台虚拟,机的IP地址,端口号即是前面写配置文件时所规定的

连接成功后,会出现"Welcome to ZooKeeper"等信息

ZooKeeper的安装与操作,分布式,云原生,zookeeper出现以上信息表明连接成功,可以进行下面的操作了!

2、命令行

使用ls命令查看当前ZooKeeper所包含的内容

ls /

使用create可以创建新节点,例如使用命令create /zk "mydata"可以创建一个名为zk的节点以及在上面存放的数据字符串mydata

create /zk "mydata"

会输出以下内容:ˊ

Created /zk

使用get命令可以确认zk是否包含字符串mydata

get /zk

输入成功会显示以下内容

[zk: 192.168.37.104:2181(CONNECTED) 15] get /zk         
mydata
cZxid = 0x200000001
ctime = Tue Apr 02 03:50:46 PDT 2024
mZxid = 0x30000001f
mtime = Tue Apr 02 06:28:53 PDT 2024
pZxid = 0x200000002
cversion = 1
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 1

使用set命令,可以修改mydata字符串为其他内容

set /zk "hahahaha"

在使用get命令查看,神奇的发现刚才的字符串“mydata”被覆盖成“hahahaha"”了

[zk: 192.168.37.104:2181(CONNECTED) 18] get /zk           
hahahaha
cZxid = 0x200000001
ctime = Tue Apr 02 03:50:46 PDT 2024
mZxid = 0x300000021
mtime = Tue Apr 02 06:30:32 PDT 2024
pZxid = 0x200000002
cversion = 1
dataVersion = 4
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 1

如果要删除节点则要使用delete命令:

delete /zk

删除刚刚创建的节点zk

四、使用API操作Zookeeper

进行下面的操作前请确保你的虚拟机已经安装了eclipse,并且相关配置已配置好,如果还没有进行配置,请按照我下面的步骤进行操作

下载eclipse

在 CentOS 中安装 Eclipse,需要下载安装程序,我们选择 Eclipse IDE for Java Developers 版:

  • 32位: http://eclipse.bluemix.net/packages/mars.1/?JAVA-LINUX32
  • 64位: http://eclipse.bluemix.net/packages/mars.1/?JAVA-LINUX64

下载完成后解压使用

sudo tar -zxf ~/下载/eclipse-java-mars-1-linux-gtk*.tar.gz -C /usr/lib

建立maven文件,并且编辑pom.xml文件,输入以下内容

<dependencies>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.10</version>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
  </dependencies>

ZooKeeper的安装与操作,分布式,云原生,zookeeper

在/src/main/resources下建立log4文件,写入以下内容:

log4j.rootLogger=INFO, stdout
 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
 
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
 
log4j.appender.logfile=org.apache.log4j.FileAppender
 
log4j.appender.logfile.File=target/spring.log
 
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
 
log4j.appender.lo  

gfile.layout.ConversionPattern=%d %p [%c] - %m%n

至此准备工作已完成

1、创建节点

建立新的java文件,写入以下内容

public static void main(String[] args) throws Exception{
		String connectStr="192.168.37.104:2181,192.168.37.105:2181";
		ZooKeeper zk = new ZooKeeper(connectStr,3000,null);
		String path = zk.create("/zk001","zk001_data".getBytes(),Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
		System.out.println(path);
	}

上述代码中,create()方法需要传入四个参数:第一个参数为节点名称,本例中为zk001;第二个参数为节点数据,需要转成字节数组;第三个参数为权限控制,本例中使用 ZooKeeper 自带的完全开放权限 Ids.OPEN_ACL_UNSAFE;第四个参数为所创建节点的类型,本例中为PERSISTENT,即持久类型的节点。
 

2、添加数据

public static void main(String[] args) throws Exception{
		String connectStr="192.168.37.104:2181,192.168.37.105:2181";
		ZooKeeper zk = new ZooKeeper(connectStr,3000,null);
			Stat stat = zk.setData("/zk001","zk002_data2".getBytes() , -1);
			System.out.println(stat.getVersion());
	}

其中,第一个参数为节点路径,本例中为/zk001;第二个参数为需要添加的数据,并转成字节数组,本例中为“zk002 data2”;第三个参数为版本号,-1代表所有版本。也就
是说,上述代码向节点/zk001的所有版本添加了数据“zk002 data2”。
 

3、获取数据

public static void main(String[] args) throws Exception{
		String connectStr="192.168.37.104:2181,192.168.37.105:2181";
		ZooKeeper zk = new ZooKeeper(connectStr,3000,null);
		Stat stat = new Stat();
		// 返回指定路径上的几点数据和节点状态,节点的状态会放入stat对象中
			byte[]bytes = zk.getData("/zk001", new Watcher() {
				@Override
				public void process(WatchedEvent event) {
					System.out.println(event.getType());
				}
			},stat);
			System.out.println(new String(bytes));
			// 改变节点数据,出发watcher
			zk.setData("/zk001", "zk001_data_testwatch".getBytes(), -1);
			// 验证是否触发了watcher
			while(true) {
				Thread.sleep(3000);
			}
	}

这里在getData()方法中指定了一个Wacther,对节点的变化进行监听,在数据改变的时候出发Watcher指定的回调方法

4、删除节点

public static void main(String[] args) throws Exception{
		String connectStr="192.168.37.104:2181,192.168.37.105:2181";
		ZooKeeper zk = new ZooKeeper(connectStr,3000,null);
		// DELETE NODE
		zk.delete("/zk001", -1);
	}

上述代码中,delete()方法传入了两个参数:第一个参数为需要删除的节点路径,本例中为/zk001;第二个参数为节点的版本,如果是-1,则代表删除所有版本。也就是说,上述代码删除了节点/zk001的所有版本内容。文章来源地址https://www.toymoban.com/news/detail-852001.html

到了这里,关于ZooKeeper的安装与操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CentOS7安装Zookeeper分布式集群

    前言 ZooKeeper 是一个开源的分布式协调服务框架,主要用于分布式系统中的数据同步、配置管理、集群控制和命名服务等方面的处理。本文在3个系统为CentOS7的Linux节点上配置了Zookeeper分布式集群,安装配置的过程均在普通用户 sxZhang 的账户上完成,安装路径为 ~/bigdata ,3个

    2024年01月17日
    浏览(45)
  • VMware创建Linux虚拟机之(四)ZooKeeper&HBase完全分布式安装

    Hello,world!    🐒本篇博客使用到的工具有:VMware16 ,Xftp7 若不熟悉操作命令,推荐使用带GUI页面的CentOS7虚拟机 我将使用带GUI页面的虚拟机演示 虚拟机(Virtual Machine) 指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算

    2024年02月07日
    浏览(33)
  • Linux-一篇文章,速通Hadoop集群之伪分布式,完全分布式,高可用搭建(附zookeeper,jdk介绍与安装)。

    文章较长,附目录,此次安装是在VM虚拟环境下进行。文章第一节主要是介绍Hadoop与Hadoop生态圈并了解Hadoop三种集群的区别,第二节和大家一起下载,配置Linux三种集群以及大数据相关所需的jdk,zookeeper,只需安装配置的朋友可以直接跳到文章第二节。同时,希望我的文章能帮

    2024年03月19日
    浏览(37)
  • 【分布式】Zookeeper

    可以参考:https://zhuanlan.zhihu.com/p/62526102 ZooKeeper 是一个分布式的,开放源码的分布式应用程序协同服务。ZooKeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。 配置管理。 Java微服

    2024年02月11日
    浏览(35)
  • ZooKeeper的分布式锁

    ZooKeeper的分布式锁机制主要利用ZooKeeper的节点特性,通过创建和删除节点来实现锁的控制。 实现步骤: 创建锁节点:当一个进程需要访问共享资源时,它会在ZooKeeper中创建一个唯一的临时顺序节点作为锁。 尝试获取锁:进程会查看当前所有的锁节点,检查自己创建的节点是

    2024年04月22日
    浏览(30)
  • Zookeeper 分布式锁案例

    Zookeeper 是一个开源的分布式协调服务,可以用于维护分布式系统中的一致性、顺序性和命名等。其中,Zookeeper 的分布式锁机制可以用于实现分布式系统中的互斥访问,确保在多个节点上对共享资源进行同步访问。 Zookeeper 分布式锁的实现原理是基于 Zookeeper 的临时有序节点和

    2024年02月16日
    浏览(30)
  • 分布式协调组件Zookeeper

    ZooKeeper 是⼀种 分布式协调组件 ,用于管理大型主机。 在分布式环境中协调和管理服务是一个复杂的过程 。ZooKeeper 通过其简单的架构和 API 解决了这个问题。ZooKeeper 允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。 分布式协调组件 在分布式系统

    2024年02月13日
    浏览(33)
  • Zookeeper实现分布式锁

    ZooKeeper是一个分布式协调服务,其中提供的序列化、持久化、有层次的目录结构使得它非常适合用于实现分布式锁。在ZooKeeper中,分布式锁通常通过临时有序节点实现。以下是ZooKeeper分布式锁的详细介绍:  实现方式: 临时有序节点: 当一个客户端需要获取锁时,它在ZooK

    2024年02月02日
    浏览(47)
  • 分布式锁解决方案_Zookeeper实现分布式锁

    提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 分布式锁解决方案_Zookeeper实现分布式锁 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:这里可以添加本文要记录的大概内容: Zookeeper 是一个开源的分布式协调服务,它

    2024年02月03日
    浏览(30)
  • 分布式【Zookeeper ZAB协议】

    1.1 什么是Zab协议? Zab协议的全称是 Zookeeper Atomic Broadcast (Zookeeper原子广播)。 Zookeeper 是通过 Zab 协议来保证分布式事务的最终一致性 。 Zab协议是为分布式协调服务Zookeeper专门设计的一种 支持崩溃恢复 的 原子广播协议 ,是Zookeeper保证数据一致性的核心算法。Zab借鉴了Pa

    2024年02月03日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包