ZooKeeper 安装部署及hello world(转)
ZooKeeper 安装部署及hello world
先给一堆学习文档,方便以后查看
官网文档地址大全:
OverView(概述)
http://zookeeper.apache.org/doc/r3.4.6/zookeeperOver.html
Getting Started(开始入门)
http://zookeeper.apache.org/doc/r3.4.6/zookeeperStarted.html
Tutorial(教程)
http://zookeeper.apache.org/doc/r3.4.6/zookeeperTutorial.html
Java Example(Java示例)
http://zookeeper.apache.org/doc/r3.4.6/javaExample.html
Programmer's Guide(开发人员指南)
http://zookeeper.apache.org/doc/r3.4.6/zookeeperProgrammers.html
Recipes and Solutions(技巧及解决方案)
http://zookeeper.apache.org/doc/r3.4.6/recipes.html
3.4.6 API online(在线API速查)
http://zookeeper.apache.org/doc/r3.4.6/api/index.html
另外推荐园友sunddenly的zookeeper系列
http://www.cnblogs.com/sunddenly/category/620563.html
一、安装部署
本文在一台机器上模拟3个 zk server的集群安装
1.1 下载解压
解压到3个目录(模拟3台zk server):
/home/hadoop/zookeeper-1
/home/hadoop/zookeeper-2
/home/hadoop/zookeeper-3
1.2 创建每个目录下conf/zoo.cfg配置文件
/home/hadoop/zookeeper-1/conf/zoo.cfg 内容如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/tmp/zk1/data
dataLogDir=/home/hadoop/tmp/zk1/log
clientPort=2181
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389
/home/hadoop/zookeeper-2/conf/zoo.cfg 内容如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/tmp/zk2/data
dataLogDir=/home/hadoop/tmp/zk2/log
clientPort=2182
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389
/home/hadoop/zookeeper-3/conf/zoo.cfg 内容如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/tmp/zk3/data
dataLogDir=/home/hadoop/tmp/zk3/log
clientPort=2183
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389
注:因为是在一台机器上模拟集群,所以端口不能重复,这里用2181~2183,2287~2289,以及3387~3389相互错开。另外每个zk的instance,都需要设置独立的数据存储目录、日志存储目录,所以dataDir、dataLogDir这二个节点对应的目录,需要手动先创建好。
另外还有一个灰常关键的设置,在每个zk server配置文件的dataDir所对应的目录下,必须创建一个名为myid的文件,其中的内容必须与zoo.cfg中server.x 中的x相同,即:
/home/hadoop/tmp/zk1/data/myid 中的内容为1,对应server.1中的1
/home/hadoop/tmp/zk2/data/myid 中的内容为2,对应server.2中的2
/home/hadoop/tmp/zk3/data/myid 中的内容为3,对应server.3中的3
生产环境中,分布式集群部署的步骤与上面基本相同,只不过因为各zk server分布在不同的机器,上述配置文件中的localhost换成各服务器的真实Ip即可。分布在不同的机器后,不存在端口冲突问题,可以让每个服务器的zk均采用相同的端口,这样管理起来比较方便。
1.3 启动验证
/home/hadoop/zookeeper-1/bin/zkServer.sh start
/home/hadoop/zookeeper-2/bin/zkServer.sh start
/home/hadoop/zookeeper-3/bin/zkServer.sh start
启用成功后,输入 jps 看下进程
20351 ZooKeeperMain
20791 QuorumPeerMain
20822 QuorumPeerMain
20865 QuorumPeerMain
应该至少能看到以上几个进程。
可以启动客户端测试下:
bin/zkCli.sh -server localhost:2181
(注:如果是远程连接,把localhost换成指定的IP即可)
成功后,应该会进到提示符下,类似下面这样:
[zk: localhost:2181(CONNECTED) 0]
然后,就可以用一些基础命令,比如 ls ,create ,delete ,get 来测试了(关于这些命令,大家可以查看文档),特别提一个很有用的命令rmr 用来递归删除某个节点及其所有子节点
二、java 与 zk的连接示例
2.1 maven项目的pom.xml中先添加以下依赖项
<!--zk-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
</dependency>
2.2 最基本的示例程序
package yjmyzz;
import java.io.IOException;
import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
public class ZooKeeperHello {
public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
ZooKeeper zk = new ZooKeeper("172.28.20.102:2181", 300000, new DemoWatcher());//连接zk server
String node = "/app1";
Stat stat = zk.exists(node, false);//检测/app1是否存在
if (stat == null) {
//创建节点
String createResult = zk.create(node, "test".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println(createResult);
}
//获取节点的值
byte[] b = zk.getData(node, false, stat);
System.out.println(new String(b));
zk.close();
}
static class DemoWatcher implements Watcher {
@Override
public void process(WatchedEvent event) {
System.out.println("----------->");
System.out.println("path:" + event.getPath());
System.out.println("type:" + event.getType());
System.out.println("stat:" + event.getState());
System.out.println("<-----------");
}
}
}
2.3 与zk集群的连接
zk的优点之一,就是高可用性,上面的代码连接的是单台zk server,如果这台server挂了,自然代码就会出错,事实上zk的API考虑到了这一点,把连接代码改成下面这样:
ZooKeeper zk = new ZooKeeper("172.28.20.102:2181,172.28.20.102:2182,172.28.20.102:2183", 300000, new DemoWatcher());//连接zk server
即:IP1:port1,IP2:port2,IP3:port3... 用这种方式连接集群就行了,只要有超过半数的zk server还活着,应用一般就没问题。但是也有一种极罕见的情况,比如这行代码执行时,刚初始化完成,正准备连接ip1时,因为网络故障ip1对应的server挂了,仍然会报错(此时,zk还来不及选出新leader),这个问题详见:http://segmentfault.com/q/1010000002506725/a-1020000002507402,参考该文的做法,改成:
ZooKeeper zk = new ZooKeeper("172.28.20.102:2181,172.28.20.102:2182,172.28.20.102:2183", 300000, new DemoWatcher());//连接zk server
if (!zk.getState().equals(ZooKeeper.States.CONNECTED)) {
while (true) {
if (zk.getState().equals(ZooKeeper.States.CONNECTED)) {
break;
}
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
但是这样代码未免太冗长,建议用开源的zkClient,官方地址: https://github.com/sgroschupf/zkclient,使用方法很简单:
<!--zkclient-->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
pom.xml先加这一坨,然后这样用:
@Test
public void testZkClient() {
ZkClient zkClient = new ZkClient("172.28.20.102:2181,172.28.20.102:2182,172.28.20.102:2183");
String node = "/app2";
if (!zkClient.exists(node)) {
zkClient.createPersistent(node, "hello zk");
}
System.out.println(zkClient.readData(node));
}
- 顶
ZooKeeper 安装部署及hello world(转)的更多相关文章
- ZooKeeper 安装部署及hello world
ZooKeeper 安装部署及hello world 先给一堆学习文档,方便以后查看官网文档地址大全: OverView(概述)http://zookeeper.apache.org/doc/r3. ...
- Zookeeper安装部署
Zookeeper安装 1. 安装 wget http://www.apache.org/dist//zookeeper/zookeeper-3.3.6/zookeeper-3.3.6.tar.gz ...
- ZooKeeper 安装部署
一.解压 tar -zxvf zookeeper-3.3.5.tar.gz 二.将zookeeper-3.3.4/conf目录下面的 zoo_sample.cfg修改为zoo.cfg,配置文件内容如下 ...
- ZooKeeper安装,部署
实验环境 192.168.1.10 Zookeeper1:2181, Zookeeper2:2182 192.168.1.11 ZooKeeper3:2181 依赖环境 JDK1.7 安装,配置 1. ...
- windows下dubbo-admin和zookeeper安装部署
1. 概述 ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护.名字服务.分布式同步.组服务等.ZooKeeper的目标就是封装好复杂 ...
- kafka和zookeeper安装部署(版本弄不好就是坑)
yum install -y unzip zip 配置host vi /etc/host172.19.68.10 zk1 1. zookeeper zookeeper下载地址 http://mirro ...
- zookeeper安装部署步骤
安装步骤 本安装教程,采用zookeeper 3.6.1 装java 下载zk包,分发到各个机器 确定或创建一个zookeeper的数据存放路径,并在该路径下创建一个myid文件,其中设置当前zook ...
- 161209、简要分析ZooKeeper基本原理及安装部署
一.ZooKeeper 基本概念 1.ZooKeeper 是什么? Zookeeper官网地址: http://zookeeper.apache.org/ Zookeeper官网文档地址:http:/ ...
- zookeeper与kafka安装部署及java环境搭建(发布订阅模式)
1. ZooKeeper安装部署 本文在一台机器上模拟3个zk server的集群安装. 1.1. 创建目录.解压 cd /usr/ #创建项目目录 mkdir zookeeper cd zookee ...
随机推荐
- PHP实现文字水印图片
php实现简单的文字水印图片,使用前需要开启php配置中的gd2功能 <?php/*打开图片*/ //1.配置图片路径 $src="image/55.jpg";//这个路径改 ...
- java LinkedBlockingQueue和ConcurrentLinkedQueue的区别
实现上看,两者都继承于AbstractQueue,但是ConcurrentLinkedQueue实现了Queue,而LinkedBlockingQueue实现了BlockingQueue,Blocki ...
- 再说Play!framework http://hsfgo.iteye.com/blog/806974
这篇帖子的内容我本来想发到 http://www.iteye.com/topic/806660这里的主贴里去的,想挽回被隐藏的命运,但我写完本贴的内容,却发现为时已晚.好吧,我承认,上一个贴的标题容易 ...
- playframework文档未提及,但你能做的事
这里记录一些play!框架的文档未提及,但是可以做的一些事playframe版本1.1 1.application.conf文件可以拆分可以把application.conf文件拆成多个,需要在app ...
- SharePoint 2013 图像呈现形式介绍
由于图像呈现形式依赖 SharePoint Server 2013 中的其他功能,因此需确保您满足本节中的先决条件,才能执行本文中的过程.先决条件包括: • 发布网站集 您要在其中添加图像呈现形式的网 ...
- 实验12:Problem F: 求平均年龄
Home Web Board ProblemSet Standing Status Statistics Problem F: 求平均年龄 Problem F: 求平均年龄 Time Limit: ...
- SQL如何取得一个面的中心点
) .sdo_point.x x, sdo_geom.sdo_centroid(t.shape, ) .sdo_point.y y from gd_zy_region t SQL如何取得一个面的中心点 ...
- Sharepoint 2013 创建TimeJob 自动发送邮件
创建Time Job 继承继承SPJobDefinition 并且实现里边的 Execute方法 部署 可以手动部署,把程序集放到GAC,手动激活feature 如果部署的时候说feature已经存在 ...
- Android 优秀的开源框架整理
第一部分:系统架构 thinkAndroid https://github.com/white-cat/ThinkAndroid ThinkAndroid是一个免费的开源的.简易的.遵循Apache2 ...
- Xcode模拟器和真机生成的日志查看(转载)
在进行实际代码开发的过程中,我们会生成一些plist文件,但是如何在调试过程中查看这些plist文件是否被成功生成以及生成的内容是否正确? 如果查看模拟器生成的日志和真机生成的日志到底如何查看? DE ...