单机安装和使用就不讲了,这里主要说一下集群的方式。
由于手头机器资源有限,所以本例采用windows下伪集群的方式(即在同一台电脑上安装多个节点)来进行说明。
参考:http://blackproof.iteye.com/blog/2039040
准备工作:
windows系统
Zookeeper的安装包:3.3.6版本
安装步骤:
以windows为例:
第一步:在F盘下新建3个目录:server1 server2 server3
第二步:解压Zookeeper的安装包到每一个目录下,并额外创建几个文件夹:data dataLog logs
最终目录如下:data dataLog logs zookeeper-3.3.6
第三步:进入每个server的data目录,创建一个myid的文件,里面写入一个数字,比如server1就写一个1,server2对应myid文件就写入2,server3对应myid文件就写个3
第四步:进入zookeeper-3.3.6/conf目录,那么如果是刚下过来,会有3个文件,configuration.xml, log4j.properties,zoo_sample.cfg,这3个文件我们首先要做的就是在这个目录创建一个zoo.cfg的配置文件,当然你可以把zoo_sample.cfg文件改成zoo.cfg,
例如server1里的配置内容如下所示:
# 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. dataDir=F:/server1/data dataLogDir=F:/server1/dataLog # the port at which the clients will connect clientPort=2181 server.1=127.0.0.1:2888:3888 server.2=127.0.0.1:2889:3889 server.3=127.0.0.1:2890:3890server2里的配置内容如下所示:
# 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. dataDir=F:/server2/data dataLogDir=F:/server2/dataLog # the port at which the clients will connect clientPort=2182 server.1=127.0.0.1:2888:3888 server.2=127.0.0.1:2889:3889 server.3=127.0.0.1:2890:3890server3里的配置内容如下所示:
# 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. dataDir=F:/server3/data dataLogDir=F:/server3/dataLog # the port at which the clients will connect clientPort=2183 server.1=127.0.0.1:2888:3888 server.2=127.0.0.1:2889:3889 server.3=127.0.0.1:2890:3890需要注意的是clientPort这个端口如果你是在1台机器上部署多个server,那么每台机器都要不同的clientPort,比如我server1是2181,server2是2182,server3是2183,dataDir和dataLogDir也需要区分下。
配置好之后,就可以启动了,linux环境下直接执行命令:./zkServer.sh start即可启动一个server。
(此时报错是因为其他server还没起来,连不上导致的,待其他server启动完成之后就不会报错了)
windows下的启动脚本自身没有带,需要我们手动写一个,例如server3的启动脚本:
@echo off REM Licensed to the Apache Software Foundation (ASF) under one or more REM contributor license agreements. See the NOTICE file distributed with REM this work for additional information regarding copyright ownership. REM The ASF licenses this file to You under the Apache License, Version 2.0 REM (the "License"); you may not use this file except in compliance with REM the License. You may obtain a copy of the License at REM REM http://www.apache.org/licenses/LICENSE-2.0 REM REM Unless required by applicable law or agreed to in writing, software REM distributed under the License is distributed on an "AS IS" BASIS, REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. REM See the License for the specific language governing permissions and REM limitations under the License. setlocal call "%~dp0zkEnv.cmd" set ZOOMAIN=org.apache.zookeeper.server.quorum.QuorumPeerMain set ZOOCFG=F:/server3/zookeeper-3.3.6/conf/zoo.cfg echo on java "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%" -cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%" %* endlocal
其他server改一下相应的路径即可。
Zookeeper的使用:
1)在自带cli客户端上使用命令:
所有server都启动正常之后,就可以启动cli客户端进行操作了,执行zkCli.cmd脚本即可启动一个client(linux环境下是zkCli.sh)。常用基本命令如下:
ls:查看当前节点数据,例如: ls / 会列出当前目录列表
ls2:查看当前节点数据并能看到更新次数等数据
create:创建一个节点,例如:create /zk 会创建一个zk节点
get:得到一个节点,包含数据和更新次数等数据,例如:get /zk
set:修改节点,例如: set /zk mydata
delete:删除一个节点,例如:delete /zk
help命令可以查看帮助。
2)在Java里使用API操作Zookeeper:
先引入zk的依赖:
<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.3.6</version> </dependency>
测试类:
public class TestZookeeper { public static final String ZK_SERVER_IP = "127.0.0.1"; public static final String ZK_SERVER_PORT = "2181"; public static final int SESSION_TIMEOUT = 500000; public static void main(String[] args) { try { //创建一个Zookeeper实例,第一个参数为目标服务器地址和端口,第二个参数为Session超时时间,第三个为节点变化时的回调方法 ZooKeeper zk = new ZooKeeper(ZK_SERVER_IP + ":" + ZK_SERVER_PORT, SESSION_TIMEOUT, new Watcher(){ // 监控所有被触发的事件 @Override public void process(WatchedEvent event) { System.out.println("watcher doing something"); } }); // 创建一个节点,不进行ACL权限控制,节点为永久性的(即使客户端shutdown了,节点也不会消失) String createResult = zk.create("/root", "myData".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); System.out.println(createResult); // 再在上述节点下创建一个子节点,也不进行ACL权限控制,节点为永久性的 createResult = zk.create("/root/childone", "childoneData".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); System.out.println(createResult); // 取得/root节点下的子节点名称,返回List<String> List<String> list = zk.getChildren("/root", true); // 取得/root/childone节点下的数据,返回byte[] byte[] byteArr = zk.getData("/root/childone", true, null); // 修改/root/childone节点下的数据,第三个参数为版本,如果为-1表示无视版本,直接修改 zk.setData("/root/childone", "childoneData2".getBytes(), -1); // 删除/root/childone节点,第二个参数为版本,如果为-1表示无视版本,直接删除 zk.delete("/root/childone", -1); // 关闭连接 zk.close(); } catch (Exception e) { e.printStackTrace(); } } }
相关推荐
【Zookeeper 进阶之——典型应用场景(二)】 Zookeeper 是一个分布式协调服务,它在分布式系统中扮演着至关重要的角色,提供了诸如命名服务、配置管理、组关系管理和分布式锁等高级功能。本文主要讨论如何利用...
总结来说,Zookeeper 在分布式系统中扮演了关键角色,它提供了命名服务、配置管理以及集群管理和 Leader Election 功能,极大地简化了分布式环境下的复杂性,提高了系统的稳定性和可扩展性。通过 Zookeeper,开发者...
Zookeeper配置中心利用ZkConfig实现分布式配置文件实时同步 1. ZkConfig简介 ...需要注意的是,ZkConfig在部署和使用过程中,还需注意zookeeper集群的稳定性和配置文件的安全性,以确保配置管理的高效和可靠。
**大数据技术基础实验报告——Zookeeper的安装配置与应用实践** Apache ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步...
《Paxos到Zookeeper——分布式一致性原理与实践》是一本深入探讨分布式一致性问题的书籍,对于理解并应用Zookeeper这一关键的分布式协调系统具有重要价值。本书旨在帮助读者掌握分布式环境中的数据一致性原理,并...
这个版本的发布对于理解和使用Zookeeper至关重要,因为它包含了该框架的稳定性和功能增强。 在描述“注册中心 zookeeper-3.4.6”中,关键词“注册中心”揭示了Zookeeper在分布式系统中的核心作用。它作为一个中心化...
ZooKeeper 集群安装配置 ZooKeeper 是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用...通过正确的安装和配置,ZooKeeper 集群可以提供高性能的分布式服务,简化分布式应用协调及其管理的难度。
Curator客户端是Apache Curator框架的一部分,该框架为开发人员提供了一系列高级API和工具,用于处理常见的ZooKeeper用例,降低了使用ZooKeeper的复杂性。以下是对Curator客户端及其主要特性的详细阐述: 1. **连接...
2.Zookeeper——Zookeeper单机和分布式安装 3.Zookeeper——Zookeeper客户端命令 4.Zookeeper——Zookeeper内部原理 5.Zookeeper——Zookeeper实战 三、Hive 1.Hive——Hive概述 2.Hive——Hive...
### Zookeeper 学习中的疑难问题总结 #### 一、Zookeeper 概念与特性 Zookeeper 是一个分布式的、开放源码的应用程序协调服务,它最初是 Google 的 Chubby 项目的开源版本。Zookeeper 在分布式系统中扮演了一个至...
Zookeeper基于分布式一致性协议ZAB,确保数据的一致性和高可用性。 **SpringCloud与Zookeeper整合** SpringCloud为Zookeeper提供了一个名为`spring-cloud-starter-zookeeper`的启动器,允许开发者轻松地将Zookeeper...
ZooKeeper本身可以以Standalone模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。...
同时,本书深入介绍了分布式一致性问题的工业解决方案——ZooKeeper,并着重向读者展示这一分布式协调框架的使用方法、内部实现及运维技巧,旨在帮助读者全面了解ZooKeeper,并更好地使用和运维ZooKeeper。...
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作...正确安装和使用ZooKeeper能有效地提升分布式应用的稳定性和效率。
本文将详细介绍一款被称为“超级好用”的Zookeeper可视化工具——Zookeeper Visualizer(简称ZkVisualizer),尤其适合Mac用户。 ZkVisualizer是一款跨平台的应用程序,它提供了直观的用户界面,使得Zookeeper的...
Zookeeper的三个不同版本——3.4.9、3.8.0和3.7.1,每个都有其独特的特点和改进。Zookeeper 3.4.9是较老但稳定的一个版本,广泛应用于生产环境。它修复了一些已知的bug,并对性能进行了优化。3.8.0是一个更新的版本...
同时,`distribute-lock`这个文件可能包含了具体的实现代码或示例,通过学习和理解这个文件,我们可以更深入地掌握如何在实践中运用ZooKeeper实现分布式锁。 总之,ZooKeeper的分布式锁机制为解决分布式环境下的...
《Zookeeper 3.4.6:分布式协调服务的核心解析》 Zookeeper,作为一个高度可靠的分布式协调服务,是Apache Hadoop项目的重要...深入理解和掌握Zookeeper的原理和使用,对于提升分布式应用的稳定性和效率具有重大意义。
ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。
《Java面试——Zookeeper面试专题》 Zookeeper是Apache Hadoop项目下的一个分布式协调服务,它为分布式应用程序提供了高效且可靠的分布式同步、配置管理以及命名服务。在Java面试中,Zookeeper是一个重要的考察点,...