`
s929498110
  • 浏览: 106886 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ZooKeeper安装与操作实例

阅读更多

 

单机安装

 

下载zookeeper3.4.3,解压缩至/usr/zookeeper.

复制conf/zoo_sample.cfg重命名为conf/zoo.cfg,执行命令 > sudo cp conf/zoo_sample.cfg conf/zoo.cfg

 

修改zoo.cfg文件,编辑为如下:

 

tickTime=2000 #心跳间隔

dataDir=/home/sulin/zookeeper #数据存放目录

dataLogDir=/usr/zookeeper/logs #日志存放目录,手动存在。如果没有貌似启动不成功

clientPort=2181 #客户端连接端口

# 此时已经可以通过“bin/zkServer.sh start”命令启动zookeeper,然后通过shell访问了zookeeper了

 

----------后面的配置是为了上面配置的单机版能让其他主机也能访问此zookeeper(其实也是伪分布式)

server.1=218.196.207.186:2888:3888 #2888是zookeeper服务之间的通信端口,3888是zookeeper与其他应用程序之间通信端口。

手动创建数据存放目录(/home/sulin/zookeeper),然后在目录中创建一个叫做"myid"的文件,文件内容为“1”。此处的1与上面的1对应。

 

分布式配置

和上面的伪分布式配置是一样的,如果是三台的话,zoo.cfg配置为:

 

tickTime=2000

dataDir=/home/sulin/zookeeper

dataLogDir=/usr/zookeeper/logs

clientPort=2181

server.1=218.196.207.186:2888:3888

server.2=218.196.207.185:2888:3888

server.3=218.196.207.184:2888:3888

 

然后可以使用rsync指令将第一台机器上的zookeeper文件夹发送至其他两台

 

sudo rsync -a /usr/zookeeper UbuntuB:/usr

sudo rsync -a /usr/zookeeper UbuntuC:/usr

 

之后在其余两台机器上面手动创建dataDir文件夹,并且新建myid文件,写入自己的序号1/2/3。

 

然后分别在三台机器上面启动zookeeper服务:> bin/zooService.sh start

 

注意:一定要谨记将logs文件夹重建,因为里面的version-2里面会保存原有记录,此记录有可能与新集群有冲突。

注意:还有dataDir也要重建,原有的节点快照都会导致新集群出现问题。下面就是dataDir忘记重建出现的读取快照失败错误


 

 

 

下面是一个比较简单的测试程序,此程序改编自ZooKeeper官方文档中的例子:

 

package net.sulin.hbase.test;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.hadoop.hbase.util.Bytes;
import org.apache.zookeeper.AsyncCallback.StatCallback;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.KeeperException.Code;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.ACL;
import org.apache.zookeeper.data.Id;
import org.apache.zookeeper.data.Stat;

/**
 * 
 * @author sulin
 * @date 2012-8-2 上午08:59:50
 */
@SuppressWarnings("deprecation")
public class ZooKeeperTest01 implements Watcher, Runnable, StatCallback{

	private static String znode = "/test";
	
	public ZooKeeper zk;
	public Stat stat;
	
	public ZooKeeperTest01(String hostPort, String znode, String filename) {
		try {
			zk = new ZooKeeper(hostPort, 5000, this);
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			if(zk.exists(znode, false) == null){
				// 创建节点,权限随便设置了。
				Id id = new Id("ip", "218.196.207.187");
				ACL acl = new ACL(ZooDefs.Perms.ALL, id);
				List<ACL> acls = new ArrayList<ACL>();
				acls.add(acl);
				zk.create(znode, Bytes.toBytes("这是第一次放入的数据"), acls, CreateMode.PERSISTENT);
			}
			stat = new Stat();
			System.out.println("第一次读到的数据: " + Bytes.toString(zk.getData(znode,true,stat)));
		} catch (KeeperException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		ZooKeeperTest01 temp = new ZooKeeperTest01("218.196.207.185:2181,218.196.207.184:2181,218.196.207.186:2181", znode, "");
		new Thread(temp).start();
		// 其他线程已启动
		try {
			temp.zk.setData(znode, Bytes.toBytes("第二次放入的数据"), temp.stat.getVersion());
		} catch (KeeperException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		synchronized (temp) {
			try {
				temp.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	public void run() {
		synchronized(this){
			try {
				wait();
			} catch (InterruptedException e) {
				
			}
		}
	}
	
	public void close(){
		synchronized(this){
			this.notifyAll();
		}
	}

	/**
	 * 监视事件被触发时执行此方法。
	 */
	public void process(WatchedEvent event) {
		String path = event.getPath();
		if(event.getType() == Event.EventType.None){
			// 节点没有发生改变,无节点创建、无接点删除、节点数据未改变、子节点未改变
			// 那么说明可能是会话状态发生了改变
			switch(event.getState()){
			case SyncConnected:
				// 此客户端处于连接状态,不需要做任何事
				break;
			case Expired:
				// 会话失效,结束
				this.close();
				break;
			}
		}else{
			// 状态改变了,检查是否znode节点值改变。如果改变则取出
			if(path != null && path.equals(znode)){
				zk.exists(znode, true, this, null);
			}
		}
	}

	/**
	 * 状态回调方法,此方法被执行的触发条件是
	 * 在异步请求exists方法时,如果节点状态已经改变则执行此方法。
	 */
	public void processResult(int rc, String path, Object ctx, Stat stat) {
		boolean exists = false;
		/**
		 * 现在ZooKeeper已经将异常代码换为枚举类型而不是静态int常量
		 * 可以用KeeperException.Code.get(rc)获取rc的枚举类型。
		 */
		switch(rc){
		case Code.Ok:
			// 一切完好
			exists = true;
			break;
		case Code.NoNode:
			// 节点不存在
			exists = false;
			break;
		case Code.SessionExpired:
		case Code.NoAuth:
			// 结束
			this.close();
			break;
		default:
			// 其他错误,重新尝试。。。
			zk.exists(znode, false, this, null);
			return ;
		}
		
		byte[] buf = null;
		if(exists){
			try {
				buf = zk.getData(znode, false, null);
			} catch (KeeperException e) {
				// 前面已经处理了此异常,此处不必处理
			} catch (InterruptedException e) {
				// 线程中断?事件线程中断?
				return;
			}
		}
		// 读到了数据,简单打印看看了事
		System.out.println("第二次异步读到的数据:" + Bytes.toString(buf));
	}

}
 

 

执行的就是创建一个/test节点,之后放入一个数据,读出打印出来,同时设置监视器。

当第二次放入数据时,监视器会被触发,之后异步读取新数据并打印出来:

第一次读到的数据: 这是第一次放入的数据
第二次异步读到的数据:第二次放入的数据
 

 

 

  • 大小: 11.1 KB
分享到:
评论
6 楼 liangtiana 2013-10-10  
jar包是哪些啊
5 楼 nneverwei 2012-11-27  
nneverwei 写道
307622798 写道
s929498110 写道
307622798 写道
楼主你好,你这个好像是在Linux下面安装的,是吗?
我对这个也不怎么懂,我想在window下面怎么安装呢?还是说不能装呢?请楼主多多指教,先谢过啦!


应该可以在Windows上安装吧,不过我没有试过。但是bin目录里面有Windows的脚本文件(*.cmd),你把上面的执行*.sh替换成*.cmd试试看行不。

非常感谢楼主的回答。好像是可以的,呵呵,只是我也不知道到底服务有没有启动好!我只是查看了一下端口netstat -ano发现2181的端口已经开启了,是不是说明我的服务已经启动了啊?呵呵


可以用 bin/zcCli.cmd -server ip:port去连接看看。成功了会有"Welcome to Zookeeper!",还可以进一步操作


写错了,是zkCli.cmd
4 楼 nneverwei 2012-11-27  
307622798 写道
s929498110 写道
307622798 写道
楼主你好,你这个好像是在Linux下面安装的,是吗?
我对这个也不怎么懂,我想在window下面怎么安装呢?还是说不能装呢?请楼主多多指教,先谢过啦!


应该可以在Windows上安装吧,不过我没有试过。但是bin目录里面有Windows的脚本文件(*.cmd),你把上面的执行*.sh替换成*.cmd试试看行不。

非常感谢楼主的回答。好像是可以的,呵呵,只是我也不知道到底服务有没有启动好!我只是查看了一下端口netstat -ano发现2181的端口已经开启了,是不是说明我的服务已经启动了啊?呵呵


可以用 bin/zcCli.cmd -server ip:port去连接看看。成功了会有"Welcome to Zookeeper!",还可以进一步操作
3 楼 307622798 2012-11-16  
s929498110 写道
307622798 写道
楼主你好,你这个好像是在Linux下面安装的,是吗?
我对这个也不怎么懂,我想在window下面怎么安装呢?还是说不能装呢?请楼主多多指教,先谢过啦!


应该可以在Windows上安装吧,不过我没有试过。但是bin目录里面有Windows的脚本文件(*.cmd),你把上面的执行*.sh替换成*.cmd试试看行不。

非常感谢楼主的回答。好像是可以的,呵呵,只是我也不知道到底服务有没有启动好!我只是查看了一下端口netstat -ano发现2181的端口已经开启了,是不是说明我的服务已经启动了啊?呵呵
2 楼 s929498110 2012-11-16  
307622798 写道
楼主你好,你这个好像是在Linux下面安装的,是吗?
我对这个也不怎么懂,我想在window下面怎么安装呢?还是说不能装呢?请楼主多多指教,先谢过啦!


应该可以在Windows上安装吧,不过我没有试过。但是bin目录里面有Windows的脚本文件(*.cmd),你把上面的执行*.sh替换成*.cmd试试看行不。
1 楼 307622798 2012-11-15  
楼主你好,你这个好像是在Linux下面安装的,是吗?
我对这个也不怎么懂,我想在window下面怎么安装呢?还是说不能装呢?请楼主多多指教,先谢过啦!

相关推荐

    Zookeeper_安装和配置

    Zookeeper 是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给用户。...

    zookeeper安装手册(Linux)

    #### 二、下载与安装 1. **下载Zookeeper** - 访问Apache官方网站或其镜像站点进行下载。 - 下载地址:`http://archive.apache.org/dist/zookeeper/` - 建议选择最新稳定版本进行下载,例如`zookeeper-3.4.14....

    zookeeper python接口实例详解

    在安装 zkpython 之前,需要确保 Zookeeper 服务已经正确安装在 `/usr/local/zookeeper` 目录下。接着,你可以通过以下步骤安装 zkpython: 1. 切换到 Zookeeper C 库目录并进行编译安装。 2. 下载并解压 zkpython ...

    Linux下Hbase和zookeeper的安装和部署

    ### Linux下Hbase和Zookeeper的安装与部署详解 #### Zookeeper 安装与配置 Zookeeper 是一款开源的分布式协调服务系统,主要用于解决分布式应用中的常见问题,例如:命名服务、状态同步服务、集群管理等。在进行...

    分布式设计与开发(一)------zookeeper实现实例

    开发者通常会使用Zookeeper的Java客户端API或者命令行工具来与Zookeeper交互。 在进行分布式开发时,理解和熟练使用Zookeeper能够极大地提升系统的稳定性和可扩展性。它作为一个可靠的中间件,可以帮助我们解决...

    solrcloud分布式集群部署zookeeper集群安装+ClientCRUD实例

    在本教程中,我们将深入探讨如何部署一个SolrCloud分布式集群,并安装Zookeeper集群,同时提供客户端的CRUD(创建、读取、更新、删除)操作实例。 一、Zookeeper集群安装 Zookeeper是Apache Hadoop项目的一个子项目...

    Zookeeper-3.4.6 安装及配置(Linux)

    在本文中,我们将详细介绍如何在Linux环境下安装和配置Zookeeper 3.4.6版本。 首先,安装Zookeeper的前提条件是需要JDK 1.6或更高版本。确保已正确安装并设置了Java环境变量。可以通过`java -version`命令来检查...

    zookeeper操作与编程

    ### ZooKeeper简介与操作 ZooKeeper的设计理念是通过一个简化的文件系统,提供一个类似于目录树结构的数据模型,其中每个节点称为znode。znode可以存储数据,且每个节点可以有子节点。ZooKeeper使用Java编写,并...

    zookeeper客户端curator操作示例

    当ZooKeeper操作失败时,Curator可以配置不同的重试策略,如固定延迟重试、指数退避重试等,以确保在短暂的网络问题或服务器繁忙后仍能执行操作。 7. **事务操作**: Curator支持原子性的多操作事务,可以在一次...

    zookeeper单节点安装和伪分布式集群安装和完全分布式集群安装

    ### Zookeeper单节点安装与集群部署详解 #### 一、Zookeeper简介 ZooKeeper是一个分布式协调服务系统,主要用于解决分布式环境中常见的数据一致性问题。它能够简化开发人员处理分布式协调任务的工作,例如命名服务...

    shell脚本一键安装zookeeper3.4.5

    4. **编译与安装**: - 进入Zookeeper源码目录,执行`./configure`进行预编译配置。 - 使用`make`和`make install`命令编译源码并将其安装到系统默认位置(通常为`/usr/local/zookeeper`)。 5. **环境变量设置**...

    Zookeeper 原生api zkClient Curator操作

    在Java开发中,我们通常使用三种方式来操作Zookeeper:原生API、zkClient和Curator。接下来,我们将详细探讨这三种方式。 **一、Zookeeper原生API** Zookeeper提供了Java API,可以直接与Zookeeper服务器进行交互...

    5、zookeeper的java -Curator(服务注册与发现)

    Curator的`ServiceCache`提供了更加高效的服务查询方式,它会在内存中缓存服务实例,减少对Zookeeper的频繁查询,同时使用Watcher机制实时更新服务列表。 总的来说,Zookeeper结合Curator的`ServiceDiscovery`机制...

    zookeeper分布式锁实例源码

    在这个场景下,我们将关注ZooKeeper如何实现分布式锁,特别是不可重入锁、可重入锁以及可重入读写锁的概念与实践。 首先,我们要理解什么是分布式锁。在多节点并发访问共享资源时,分布式锁能确保同一时刻只有一个...

    zookeeper+redis高可用完整实例.zip

    在这个"zookeeper+redis高可用完整实例"中,我们将探讨如何利用Zookeeper来实现Redis的高可用性。Zookeeper是一个分布式协调服务,它为分布式应用提供了诸如配置管理、命名服务、分布式同步和组服务等功能。而Redis...

    ZooKeeper安装部署

    本文将详细介绍ZooKeeper的安装与配置步骤,以及不同安装模式的选择。 首先,安装ZooKeeper的第一步是从官方 releases页面下载合适的二进制发行版。确保选择的版本与你的系统兼容,通常推荐使用稳定版。下载完成后...

    Zookeeper-3.4.6 安装及配置【Linux】.docx

    本文将详细介绍如何在Linux环境下安装和配置Zookeeper 3.4.6版本,以及一些常用的命令操作。 首先,安装Zookeeper的前提条件是需要Java Development Kit (JDK) 1.6或以上版本。确保已安装JDK并设置了环境变量,可以...

    dubbo spring zookeeper分布式集群搭建完整例子

    6. **配置Zookeeper**:安装并启动Zookeeper,设置服务注册和发现的相关配置,使Dubbo能够与Zookeeper进行通信。 7. **测试和部署**:确保所有服务都能正常运行,进行功能测试,然后将应用部署到Tomcat服务器上。 ...

    zookeeper伪分布式搭建(1)1

    Zookeeper 是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给用户。...

Global site tag (gtag.js) - Google Analytics