要想使用ZooKeeper,首先就要把它部署在服务器上跑起来,就想Apache,Tomcat,FtpServer等服务器一样。ZooKeeper的部署方式主要有三种,单机模式、伪集群模式、集群模式。其实剩下的两种模式都是集群模式的特殊情况。
1.4.1. 基本的环境变量配置
Java大型的项目中,环境变量的配置很重要,如果没有很好的配置环境变量的话,甚至项目连启动都是难事。
export ZOOKEEPER_HOME=/home/zookeeper-3.3.3
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf
1.4.2. ZooKeeper的单机模式部署
ZooKeeper的单机模式通常是用来快速测试客户端应用程序的,在实际过程中不可能是单机模式。单机模式的配置也比较简单。
l 编写配置文件zoo.cfg
zookeeper-3.3.3/conf文件夹下面就是要编写配置文件的位置了。在文件夹下面新建一个文件zoo.cfg。ZooKeeper的运行默认是读取zoo.cfg文件里面的内容的。以下是一个最简单的配置文件的样例:
tickTime=2000
dataDir=/var/zookeeper
clientPort=2181
在这个文件中,我们需要指定 dataDir 的值,它指向了一个目录,这个目录在开始的时候需要为空。下面是每个参数的含义:
tickTime :基本事件单元,以毫秒为单位。这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
dataDir :存储内存中数据库快照的位置,顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
clientPort :这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
使用单机模式时用户需要注意:这种配置方式下没有 ZooKeeper 副本,所以如果 ZooKeeper 服务器出现故障, ZooKeeper 服务将会停止。
l 执行运行脚本
在zookeeper-3.3.3/bin文件夹下面运行zkServer.sh即可,运行完毕之后则ZooKeeper服务变启动起来。
./zkServer.sh start
脚本默认调用zoo.cfg里面的配置,因此程序正常启动。
1.4.3. ZooKeeper的集群模式部署
ZooKeeper的集群模式下,多个Zookeeper服务器在工作前会选举出一个Leader,在接下来的工作中这个被选举出来的Leader死了,而剩下的Zookeeper服务器会知道这个Leader死掉了,在活着的Zookeeper集群中会继续选出一个Leader,选举出Leader的目的是为了可以在分布式的环境中保证数据的一致性。
图3.2 ZooKeeper集群模式图
l 确认集群服务器的数量
由于ZooKeeper集群中,会有一个Leader负责管理和协调其他集群服务器,因此服务器的数量通常都是单数,例如3,5,7...等,这样2n+1的数量的服务器就可以允许最多n台服务器的失效。
l 编写配置文件
配置文件需要在每台服务器中都要编写,以下是一个配置文件的样本:
# Filename zoo.cfg
tickTime=2000
dataDir=/var/zookeeper/
clientPort=2181
initLimit=5
syncLimit=2
server.1=202.115.36.251:2888:3888
server.2=202.115.36.241:2888:3888
server.3=202.115.36.242:2888:3888
initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒。
syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒
server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。
l 创建myid文件
除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面就只有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。
l 执行运行脚本
和单机模式下的运行方式基本相同,值得注意的地方就是要分别在不同服务器上执行一次,例如分别在251,241,242上运行:
./zkServer.sh start
这样才能使得整个集群启动起来。
1.4.4. ZooKeeper的集群伪分布
其实在企业中式不会存在的,另外为了测试一个客户端程序也没有必要存在,只有在物质条件比较匮乏的条件下才会存在的模式。
集群伪分布模式就是在单机下模拟集群的ZooKeeper服务,在一台机器上面有多个ZooKeeper的JVM同时运行。
l 确认集群伪服务器的数量
2n+1,和之前的集群分布相同。
l 编写配置文件
在/conf文件夹新建三个配置文件,zoo1.cfg,zoo2.cfg以及zoo3.cfg。配置文件分别如下编写:
Zoo1.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/root/hadoop-0.20.2/zookeeper-3.3.1/d_1
clientPort=2181
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
Zoo2.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/root/hadoop-0.20.2/zookeeper-3.3.1/d_2
clientPort=2182
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
Zoo3.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/root/hadoop-0.20.2/zookeeper-3.3.1/d_3
clientPort=2183
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
由于三个服务都在同一台电脑上,因此这里要保证地址的唯一性,因此要特别注意IP地址和端口号不要互相冲突,以免影响程序的正确执行。
l 创建myid文件
这个同集群模式部署,在各自的文件夹下面创建。
l 执行运行脚本
由于所有的配置文件都在/conf文件夹下面,因此要执行三次,而且要加文件名的参数,不然会默认执行zoo.cfg这个文件,如下:
./zkServer.sh start zoo1.cfg
./zkServer.sh start zoo2.cfg
./zkServer.sh start zoo3.cfg
执行完毕后,将完成ZooKeeper的集群伪分布的启动。
1.4.5. 通过ZooKeeper命令行工具访问ZooKeeper
ZooKeeper命令行工具类似于Linux的shell环境,不过功能肯定不及shell啦,但是使用它我们可以简单的对ZooKeeper进行访问,数据创建,数据修改等操作。
当启动 ZooKeeper 服务成功之后,输入下述命令,连接到 ZooKeeper 服务:
zkCli.sh –server 202.115.36.251:2181
连接成功后,系统会输出 ZooKeeper 的相关环境以及配置信息,并在屏幕输出“ Welcome to ZooKeeper ”等信息。
命令行工具的一些简单操作如下:
1 )使用 ls 命令来查看当前 ZooKeeper 中所包含的内容:
[zk: 202.115.36.251:2181(CONNECTED) 1] ls /
2 )创建一个新的 znode ,使用 create /zk myData 。这个命令创建了一个新的 znode 节点“ zk ”以及与它关联的字符串:
[zk: 202.115.36.251:2181(CONNECTED) 2] create /zk "myData"
3 )我们运行 get 命令来确认 znode 是否包含我们所创建的字符串:
[zk: 202.115.36.251:2181(CONNECTED) 3] get /zk
4 )下面我们通过 set 命令来对 zk 所关联的字符串进行设置:
[zk: 202.115.36.251:2181(CONNECTED) 4] set /zk "zsl"
5 )下面我们将刚才创建的 znode 删除:
[zk: 202.115.36.251:2181(CONNECTED) 5] delete /zk
1.4.6. 使用API来访问ZooKeeper
API访问ZooKeeper才是客户端主要的使用手段,通过在客户端编写丰富多彩的程序,来达到对ZooKeeper的利用。这里给出一个简单的例子:(深入的还没能力给出啊,例子是从网上找的很清晰明了)
1. import java.io.IOException;
2.
3. import org.apache.zookeeper.CreateMode;
4. import org.apache.zookeeper.KeeperException;
5. import org.apache.zookeeper.Watcher;
6. import org.apache.zookeeper.ZooDefs.Ids;
7. import org.apache.zookeeper.ZooKeeper;
8.
9. public class demo {
10. // 会话超时时间,设置为与系统默认时间一致
11. private static final int SESSION_TIMEOUT=30000;
12.
13. // 创建 ZooKeeper 实例
14. ZooKeeper zk;
15.
16. // 创建 Watcher 实例
17. Watcher wh=new Watcher(){
18. public void process(org.apache.zookeeper.WatchedEvent event)
19. {
20. System.out.println(event.toString());
21. }
22. };
23.
24. // 初始化 ZooKeeper 实例
25. private void createZKInstance() throws IOException
26. {
27. zk=new ZooKeeper("localhost:2181",demo.SESSION_TIMEOUT,this.wh);
28.
29. }
30.
31. private void ZKOperations() throws IOException,InterruptedException,KeeperException
32. {
33. System.out.println("\n1. 创建 ZooKeeper 节点 (znode : zoo2, 数据: myData2 ,权限: OPEN_ACL_UNSAFE ,节点类型: Persistent");
34. zk.create("/zoo2","myData2".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
35.
36. System.out.println("\n2. 查看是否创建成功: ");
37. System.out.println(new String(zk.getData("/zoo2",false,null)));
38.
39. System.out.println("\n3. 修改节点数据 ");
40. zk.setData("/zoo2", "shenlan211314".getBytes(), -1);
41.
42. System.out.println("\n4. 查看是否修改成功: ");
43. System.out.println(new String(zk.getData("/zoo2", false, null)));
44.
45. System.out.println("\n5. 删除节点 ");
46. zk.delete("/zoo2", -1);
47.
48. System.out.println("\n6. 查看节点是否被删除: ");
49. System.out.println(" 节点状态: ["+zk.exists("/zoo2", false)+"]");
50. }
51.
52. private void ZKClose() throws InterruptedException
53. {
54. zk.close();
55. }
56.
57. public static void main(String[] args) throws IOException,InterruptedException,KeeperException {
58. demo dm=new demo();
59. dm.createZKInstance( );
60. dm.ZKOperations();
61. dm.ZKClose();
62. }
63.}
此类包含两个主要的 ZooKeeper 函数,分别为 createZKInstance ()和 ZKOperations ()。其中 createZKInstance ()函数负责对 ZooKeeper 实例 zk 进行初始化。 ZooKeeper 类有两个构造函数,我们这里使用 “ ZooKeeper ( String connectString, , int sessionTimeout, , Watcher watcher )”对其进行初始化。因此,我们需要提供初始化所需的,连接字符串信息,会话超时时间,以及一个 watcher 实例。 17 行到 23 行代码,是程序所构造的一个 watcher 实例,它能够输出所发生的事件。
ZKOperations ()函数是我们所定义的对节点的一系列操作。它包括:创建 ZooKeeper 节点( 33 行到 34 行代码)、查看节点( 36 行到 37 行代码)、修改节点数据( 39 行到 40 行代码)、查看修改后节点数据( 42 行到 43 行代码)、删除节点( 45 行到 46 行代码)、查看节点是否存在( 48 行到 49 行代码)。另外,需要注意的是:在创建节点的时候,需要提供节点的名称、数据、权限以及节点类型。此外,使用 exists 函数时,如果节点不存在将返回一个 null 值。
源码来源: minglisoft.cn/technology QQ:1225363639 QQ:3192364813
分享到:
相关推荐
### ZooKeeper配置与简单使用详解 #### 一、ZooKeeper简介 ZooKeeper是一款针对分布式应用提供的分布式协调服务框架,其核心功能包括命名服务、配置管理、同步机制以及组服务等。通过这些基础功能,ZooKeeper能够...
在“zookeeper部署所需包”中,Zookeeper的安装和配置是核心内容。以下将详细解释Zookeeper的部署步骤和相关知识点: 1. **下载与解压**:首先,你需要从Apache官方网站下载Zookeeper的最新稳定版本,通常是一个....
### Zookeeper 数据模型与 znode ...以上是对给定文件信息的详细解答,涵盖了 Zookeeper 的数据模型、分布式锁和分布式队列的实现方法、伪分布式模式的搭建过程以及基于 Zookeeper 的 Hadoop 配置管理服务的设计方案。
通过深入理解 Zookeeper 的工作原理、安装部署及使用方法,开发者能够有效地利用 Zookeeper 实现各种分布式协调任务,提高系统的稳定性和扩展性。在实际项目中,结合源码阅读和工具使用,可以更深入地挖掘 Zookeeper...
使用`zkServer.sh start`启动Zookeeper服务,`zkServer.sh stop`停止服务。 2. **Zookeeper 的伪集群模式搭建** 伪集群模式是在单台机器上模拟多台服务器运行,适合学习和测试。每个Zookeeper实例都有独立的配置...
【分布式Zookeeper部署】 Zookeeper,作为一款源自雅虎、由Apache基金会托管的开源分布式协调服务,是Google Chubby的开源实现。它采用Java编写,最初是Hadoop项目的一部分,后来独立成为Apache的一个子项目。...
在这个案例中,`dubbo-Consumer`可能代表了一个Dubbo服务消费者模块,它使用Maven进行构建,依赖于Dubbo服务接口和Zookeeper进行服务发现。而`dubbo-Service`则可能是服务提供者的模块,它实现了服务接口并注册到...
Zookeeper 的设计目标是将哪些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并且以一些列简单一用的接口提供给用户使用。 Zookeeper 安装部署 Zookeeper 安装部署有两种运行模式:集群...
### Zookeeper部署详解 #### 一、Zookeeper简介与应用场景 Apache ZooKeeper 是一个高性能的分布式数据管理和协调服务。它为分布式应用提供了一套简单易用的API接口,用于实现诸如配置维护、域名服务、分布式同步...
一键部署工具实现功能如下: 1、支持单节点部署 2、支持伪集群部署 3、支持分布式集群部署 4、支持数据目录、端口参数灵活...说明:工具使用非常简单,只需要修改变量文件,一分钟就可以快速帮你部署zookeeper集群。
Apache ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着分布式应用...这个"zookeeper-3.9.1.zip"文件为Linux 64位用户提供了一个便捷的方式来部署和使用Zookeeper的最新版本。
在提供的`Zookeeper部署日志-2019年6月18日.xlsx`文件中,你可以找到过去部署时的日志记录,这对于排查问题和理解Zookeeper的运行状态非常有帮助。监控Zookeeper的服务状态,确保其健康运行,是运维过程中不可或缺的...
### Zookeeper 集群安装部署详解 #### 一、Zookeeper简介 Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点...
总结,使用Ansible安装Zookeeper能有效提升部署效率,减少手动操作出错的可能性。只需编写一次playbook,即可在多台服务器上快速、一致地部署Zookeeper服务,为你的分布式系统提供可靠的协调支持。
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它...了解并熟练掌握ZooKeeper的部署和使用,对于构建和维护大规模分布式系统至关重要。在具体操作过程中,务必遵循最佳实践,确保系统的稳定性和可靠性。
在本案例中,我们将深入探讨Zookeeper 3.4.1版本的集群部署,以及如何通过shell脚本来实现一键安装。 1. **Zookeeper集群架构**: ZooKeeper集群通常由多个服务器组成,每个服务器都是一个Zookeeper实例。这些...
例如,你可以使用`ZooKeeper.create()`方法创建一个新的节点,`ZooKeeper.getData()`和`ZooKeeper.setData()`用于读取和修改节点数据,`ZooKeeper.exists()`检查节点是否存在,`ZooKeeper.getChildren()`获取子节点...
1. **Zookeeper集群配置**:在Hadoop完全分布式集群中配置Zookeeper集群,这涉及到多个Zookeeper服务器的设置,包括配置文件`zoo.cfg`的修改,例如设置`dataDir`为每个服务器的数据存储路径,以及`server.x`配置来...
### ZooKeeper基础知识与...通过这些步骤,用户不仅能够了解如何在本地环境中快速部署ZooKeeper,还能够掌握如何构建一个高可用的分布式ZooKeeper集群。这为后续利用ZooKeeper进行分布式应用程序开发打下了坚实的基础。
下面我们将详细介绍如何在Linux环境下部署ZooKeeper集群以及ZooKeeper的关键知识点。 1. **ZooKeeper角色与架构**:ZooKeeper集群由多个服务器组成,每个服务器都扮演着数据节点(ZNode)的角色。整个集群遵循一个...