很多大型系统基本都需要一个无单点问题的分布式框架,zookeeper便满足这一需求。这次的博客,我们先进行一个最基本的安装、部署、连接。
1、首先下载zookeeper,解压,我这里选择最新的稳定版3.4.8,然后我们使用单机模拟集群,可以专门建立一个文件夹,用来放置你的zookeeper,比如:
/Users/zk_chs/something/hadoop/zookeeper-3.4.8-001 /Users/zk_chs/something/hadoop/zookeeper-3.4.8-002 /Users/zk_chs/something/hadoop/zookeeper-3.4.8-003
2、接下来,配置每个zookeeper的cfg文件,这里需要更改conf/zoo_sample.cfg为zoo.cfg,需要更改的内容为:
zookeeper-3.4.8-001/conf/zoo.cfg =============before============ dataDir=/tmp/zookeeper # the port at which the clients will connect clientPort=2181 =============bofore============ =============now=============== dataDir=/Users/zk_chs/something/hadoop/tmp/zk-001/data dataLogDir=/Users/zk_chs/something/hadoop/tmp/zk-001/log # the port at which the clients will connect clientPort=2181 server.1=localhost:2287:3387 server.2=localhost:2288:3388 server.3=localhost:2289:3389 =============now================
clientPort:客户端连接端口,在我们的模拟集群环境中,每个zookeeper服务不能重复。
而server.1=localhost:2287:3387中,2287表示leader通信端口,3387表示leader选举端口。
dataDir表示数据存储目录、dataLogDir表示日志存储目录,需要我们先手动创建好。
之后,再在每个dataDir中分别创建一个myid文件,文件中只有一个数字,即server Id。比如,我们的server.1对应的myid文件内容便是1
另外2个zookeeper如下配置:
zookeeper-3.4.8-002/conf/zoo.cfg =============before============ dataDir=/tmp/zookeeper # the port at which the clients will connect clientPort=2182 =============bofore============ =============now=============== dataDir=/Users/zk_chs/something/hadoop/tmp/zk-002/data dataLogDir=/Users/zk_chs/something/hadoop/tmp/zk-002/log # the port at which the clients will connect clientPort=2182 server.1=localhost:2287:3387 server.2=localhost:2288:3388 server.3=localhost:2289:3389 =============now================
zookeeper-3.4.8-003/conf/zoo.cfg =============before============ dataDir=/tmp/zookeeper # the port at which the clients will connect clientPort=2183 =============bofore============ =============now=============== dataDir=/Users/zk_chs/something/hadoop/tmp/zk-003/data dataLogDir=/Users/zk_chs/something/hadoop/tmp/zk-003/log # the port at which the clients will connect clientPort=2183 server.1=localhost:2287:3387 server.2=localhost:2288:3388 server.3=localhost:2289:3389 =============now================
3、接下来,通过bin/zkServer.sh进行启动:
/Users/zk_chs/something/hadoop/zookeeper-3.4.8-001/bin/zkServer.sh start /Users/zk_chs/something/hadoop/zookeeper-3.4.8-002/bin/zkServer.sh start /Users/zk_chs/something/hadoop/zookeeper-3.4.8-003/bin/zkServer.sh start
使用jps查看java进程:
837 QuorumPeerMain
824 QuorumPeerMain
835 QuorumPeerMain
如果启动成功,这些便是能看到的zookeeper进程了,
还可以使用zkCli.sh进行客户端连接:
/Users/zk_chs/something/hadoop/zookeeper-3.4.8-002/bin/zkCli.sh -server localhost:2183
成功后显示:
[zk: localhost:2183(CONNECTED) 0]
这样以来我们便能使用ls ,create ,delete ,get, set来测试了,使用方式与linux大同小异,另外,rmr可以进行递归删除。
4、使用java连接zookeeper:
个人建议使用开源的zkClient来进行连接,
<dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.8</version> </dependency>
接下来使用zkClient进行zookeeper集群的连接:
public class TestZkClient { private static ZkClient zkClient = new ZkClient("127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183"); private static final String node = "/zk_chs"; public static void main(String[] args) throws InterruptedException { testZkClient(); } private static void testZkClient (){ if ( !zkClient.exists(node) ){ zkClient.createPersistent(node, "this is first node"); } System.out.println((String) zkClient.readData(node)); } }
连接zookeeper时,使用单个地址也是可以的,我们在这里使用","对地址进行分隔,是为了容错。
我们还定义了一个"/zk_chs"节点,关于节点的更多内容后续讲解。
上述程序输出:
this is first node
使用zookeeper还可以对节点数据变化进行监听,对上述程序进行扩展:
public class TestZkClient { private static ZkClient zkClient = new ZkClient("127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183"); private static final String node = "/zk_chs"; public static void main(String[] args) throws InterruptedException { testZkClient(); subscribeDataChange(); zkClient.writeData(node, "new data"); zkClient.delete(node); Thread.sleep(1000); } private static void testZkClient (){ if ( !zkClient.exists(node) ){ zkClient.createPersistent(node, "this is first node"); } System.out.println((String) zkClient.readData(node)); } private static void subscribeDataChange (){ zkClient.subscribeDataChanges(node, new IZkDataListener() { @Override public void handleDataChange(String dataPath, Object data) throws Exception { System.out.println("node data changed: " + dataPath + ", data: " + data); } @Override public void handleDataDeleted(String dataPath) throws Exception { System.out.println("node data deleted: " + dataPath); } }); } }
最后输出:
this is first node
node data changed: /zk_chs, data: new data
node data deleted: /zk_chs
这次我们对zookeeper先做一个基本的了解,后续再介绍更多的内容。
相关推荐
zookeeper学习笔记
Zookeeper学习笔记
java ZooKeeper学习笔记\ZooKeeper原理、运用
自己整理的ZooKeeper学习笔记,适合刚刚接触ZooKeeper的人学习
Zookeeper_Java客户端Curator
ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,它提供了一项基本服务:**分布式锁服务**。由于ZooKeeper的开源特性,后来我们的开发者在分布式锁的基础上,摸索了出了其他的使用方法:**...
hadoop,hbase,zookeeper安装笔记hadoop,hbase,zookeeper安装笔记hadoop,hbase,zookeeper安装笔记
zookeeper云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-...
本文适合但不限于软件开发人员阅读。本文档能够使阅读者对zookeeper有一个宏观且全面的了解,内容主要包含zookeeper架构、数据模型、读写及工作原理、典型应用场景、指令汇总等,
java客户端使用api访问zookeeper,增删改查Znode,多有的操作都有同步和异步的方式,代码简单,易懂
ZooKeeper 是一个针对大型分布式系统的可靠协调系统;它提供的功能包括:配置维护、名字服务、分布式同步、组服务等; 它的目 标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给...
简单的java客户端调用zookeeper代码,其中包含ACL权限认证调用的例子
Hadoop、HBase、Zookeeper安装部署
zookeeper笔记
该文件为centos7环境下,zookeeper3.4.12一键部署配置脚本。下载该文件,拖到服务器上,$ sh zookeeper.sh 执行该脚本就能自动化下载、安装、远程访问、开机自启动等。 仓库路径:/usr/local/zookeeper/zookeeper-...
Zookeeper是一个由Java编写并开源的,为分布式系统提供协调服务的框架. Zookeeper概述 Zookeeper最早起源于雅虎研究院的一个小组.当时研究人员发现,在雅虎内部的很多系统基本都依赖一个类似的系统来进行分布式服务...
Zookeeper单机及集群安装配置
zookeeper客户端连接工具,亲测有效
一键部署工具实现功能如下: 1、支持单节点部署 2、支持伪集群部署 3、支持分布式集群部署 4、支持数据目录、端口参数灵活...说明:工具使用非常简单,只需要修改变量文件,一分钟就可以快速帮你部署zookeeper集群。
zookeeper客户端原理代码操作应用场景。