Zookeeper的安装配置及基本开发

一、简介

             Zookeeper 是分布式服务框架,主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等等。

ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
ZooKeeper包含一个简单的原语集,[1] 提供Java和C的接口。
ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在zookeeper-3.4.3\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。

二、工作原理

       Zookeeper的核心是广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递增计数。
每个Server在工作过程中有三种状态:
LOOKING:当前Server不知道leader是谁,正在搜寻。
LEADING:当前Server即为选举出来的leader。
FOLLOWING:leader已经选举出来,当前Server与之同步。


三、基本配置

zookeeper的安装和之前的一样,也是有3种安装方式。分为单机、伪集群和集群模式。

1、首先去apache官网下载zookeeper,目前最新版是3.4.8 ,http://www.apache.org/dyn/closer.cgi/zookeeper/

2、解压到你需要安装的目录,例如我是放在/home/admin1/下载/zookeeper-3.4.8下面。

3、在conf目录在做配置:

zoo.cfg

(1)如果你是单机模式的话,就需要做如下配置就可以了。

tickTime=2000
dataDir=/home/admin1/下载/zookeeper-3.4.8/data
dataLogDir=/home/admin1/下载/zookeeper-3.4.8/logs
clientPort=2181


(2)  如果你是伪分布模式的话,则需要做如下配置:zoo.cfg

所谓伪集群, 是指在单台机器中启动多个zookeeper进程, 并组成一个集群. 以启动3个zookeeper进程为例.

tickTime=2000
initLimit=10
syncLimit=5

dataDir=/home/admin1/下载/zookeeper-3.4.8/tmp/zookeeper

clientPort=2181

server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389



1 initLimit: zookeeper集群中的包含多台server, 其中一台为leader, 集群中其余的server为follower. initLimit参数配置初始化连接时, follower和leader之间的最长心跳时间. 此时该参数设置为10, 说明时间限制为10倍tickTime, 即10*2000=20000ms=20s.2 syncLimit: 该参数配置leader和follower之间发送消息, 请求和应答的最大时间长度. 此时该参数设置为5, 说明时间限制为5倍tickTime, 即10000ms.3 server.X=A:B:C 其中X是一个数字, 表示这是第几号server. A是该server所在的IP地址. B配置该server和集群中的leader交换消息所使用的端口. C配置选举leader时所使用的端口. 由于配置的是伪集群模式, 所以各个server的B, C参数必须不同.参照zookeeper0/conf/zoo.cfg, 配置zookeeper1/conf/zoo.cfg, 和zookeeper2/conf/zoo.cfg文件. 只需更改dataDir, dataLogDir, clientPort参数即可.在之前设置的dataDir中新建myid文件, 写入一个数字, 该数字表示这是第几号server. 该数字必须和zoo.cfg文件中的server.X中的X一一对应./home/admin1/下载/zookeeper1/data/myid文件中写入1,/home/admin1/下载/zookeeper2/data/myid文件中写入2,/home/admin1/下载/zookeeper3/data/myid文件中写入3.分别进入/home/admin1/下载//zookeeper1/bin, /home/admin1/下载//zookeeper2/bin, /home/admin1/下载//zookeeper3/bin三个目录, 启动server.

bin/zkServer.sh  start

关闭就是后面是stop.
启动成功后用jps查看进程,
有ZooKeeperMain就是对的(若没有配置其他
机器的情况下)


可以启动客户端测试下:

bin/zkCli.sh -server localhost:2181


(注:如果是远程连接,把localhost换成指定的IP即可)

然后,就可以用一些基础命令,比如 ls ,create ,delete ,get 来测试了(关于这些命令,大家可以查看文档)

(3)  集群模式的配置和伪集群基本一致.
由于集群模式下, 各server部署在不同的机器上, 因此各server的conf/zoo.cfg文件可以完全一样.


四、开发测试

测试连接,我们可以有3种方法。

4.1  zkCli.sh

可以使用帮组命令进入各种操作。



4.2、在eclipse上操作:

新建java工程,需要导入zookeeper里面的jar包 ,zookeeper-3.4.8.jar。

新建createSession.java

public class CreateSession implements Watcher { 

	private static ZooKeeper zookeeper;
	public static void main(String[] args) throws IOException, InterruptedException {
		zookeeper = new ZooKeeper("localhost:2181",5000,new CreateSession());
		System.out.println(zookeeper.getState());
		
		Thread.sleep(Integer.MAX_VALUE);
	}
	
	private void doSomething(){
		
		System.out.println("do something");
	}
	@Override
	public void process(WatchedEvent event) {
	
		System.out.println("收到事件:"+event);
		if (event.getState()==KeeperState.SyncConnected){
			
			if (event.getType()==EventType.None && null==event.getPath()){
				doSomething();
			}
		}
	}
	
}
还需要一个接口:

MyWatcher.java

public class MyWatcher implements Watcher {

	@Override
	public void process(WatchedEvent event) {
		// TODO Auto-generated method stub

	}

}

运行结果如下:代表连接成功了。



4.3 使用ZKClient 

在github中下载源码包,https://github.com/sgroschupf/zkclient

在新建的eclipse项目中添加库依赖,就可以了。

测试代码

import org.I0Itec.zkclient.ZkClient;
import org.I0Itec.zkclient.serialize.SerializableSerializer;

public class CreateSession {

	public static void main(String[] args) {
		ZkClient zc = new ZkClient("localhost",10000,10000,new SerializableSerializer());
		System.out.println("conneted ok!");
	}
	
}



本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。

ceph 日志01 - 2016-05-28 14:05:10

1. 对象存储 问:我可以存储多少数据? 您可以存储的总数据容量和对象个数不受限制。各个 Amazon S3 对象的大小范围可以从最小 0 字节到最大 5 TB。可在单个 PUT 中上传的最大数据元为 5 GB。对于大于 100 MB 的数据元,客户应该考虑使用分段上传功能。 理解这个问题,事实上有助于理解RADOS的本质,因此有必要在此加以分析。粗看起来,librados和RADOS GW的区别在于,librados提供的是本地API,而RADOS GW提供的则是RESTful API,二者的编程模型和
转载请注明出处: 转载自  Thinkgamer的CSDN博客:blog.csdn.net/gamer_gyt 代码下载地址: 点击查看 1:Web日志分析系统概述 2:需求分析:日志提取预处理,KPI指标设计,存储与展现 3:算法模型:Hadoop并行算法 4:架构设计:构建hadoop项目 5:程序实现:MR2V程序实现 6:结果可视化 一:Web日志分析系统概述 Web日志由Web服务器产生,可能是Nginx,Apache,Tomcat等,从Web日志中我们可以提取到很多有用的信息,比如说网站每类网
网上找了很多封装的API,发现都是过时了的,运行报各种错误,经过了几天的调错,终于可以使用java代码操作hive了 首先看看所需的包 所有的分析都在代码里面 注意:网上很多代码对于DDL都执行 res = stmt.executeQuery(sql); 这是错的,因为新版本DDL不能返回结果集,会报如下错误 java.sql.SQLException: The query did not generate a result set! 所以只能写 stmt.execute(sql); 它会返回一个bool

Backbone的使用 - 2016-05-28 14:05:03

一、Backbone概述 Backbone是一个基于MVC的前端js框架,它依赖于underscore.js和iquery.js的,所以在使用的时候需要引用三个js文件。 与之类似的MVC框架还有Angular.js,Knockout.js,Ember.js。 head script src = "underscore.js" / script script src = "jquery.js" / script script src = "backbone.js" / script / head 二、Ba
最近在看MapReduce,想起一直都是Copy 然后修改的方法来写。突然想试试自己动手写一个及其简单的mr程序。 细节决定成败啊,不试不知道,一试才能发现平时注意不到的细节。 下面是我用了很快时间写好的一个程序,注意,这份是有问题的! 点击( 此处 )折叠或打开 package wordcount ; import java . io . IOException ; import org . apache . commons . lang . StringUtils ; import org . apac

Hive基本原理及环境搭建 - 2016-05-28 14:05:23

      今天我主要是在折腾这个Hive,早上看了一下书,最开始有点凌乱,后面慢慢地发现,hive其实挺简单的,以我的理解就是和数据库有关的东西,那这样的话对我来说就容易多啦,因为我对sql语法应该是比较熟悉了,而这个是HQL的,其实很多都差不多。先来看一下Hive的基本介绍: 一、Hive基本原理        hive是基于Hadoop的一个 数据仓库 工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本

安装部署Liberty Neutron - 2016-05-28 14:05:40

最近在两台物理机环境中部署了OpenStack的Liberty版本,各个模块都遇到或多或少的问题,但尤以Neutron的问题最让人头疼。尽管OpenStack一直致力于简化Neutron的部署,但对于非网络技术人员来说依然存在着很大的挑战,根本原因还是由于网络自身的复杂性所导致的,因此想要成功部署Neutron还是需要网络基础的,但这并不意味着没有网络基础就不能成功部署Neutron并使其工作。本文将总结Neutron的安装部署步骤,并对遇到的问题进行详细的描述,旨在提供解决问题的思路或者给与一定的启示。
前言   这是我《高性能计算》这门课的作业。折腾了好久,一个前辈说“每个新手初次接触都会遇到问题”,所以这过程虽是曲折,还是比较有意义的,记录之,希望能帮到你。 Hadoop简介 概述   Hadoop是Apache软件基金会旗下的一个开源的分布式计算平台。以Hadoop分布式文件系统(Hadoop Distributed File System, HDFS)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。   HDFS的
原文地址: http://blog.csdn.net/uq_jin/article/details/51487439 如果你还没有虚拟机,请参考: http://blog.csdn.net/uq_jin/article/details/51355124 如果你还没有试过单机模式,请参考: http://blog.csdn.net/uq_jin/article/details/51451995 如果你还没有试过集群模式,请参考: http://blog.csdn.net/uq_jin/article/det

spark-streaming入门(二) - 2016-05-27 17:05:39

Input DStreams and Receivers Input DStreams are DStreams representing the stream of input data received from streaming sources. In the  quick example ,  lines  was an input DStream as it represented the stream of data received from the netcat server. Ever