ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:46.77KB ,
资源ID:24599226      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24599226.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(zookeeper使用总结文档初级.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

zookeeper使用总结文档初级.docx

1、zookeeper使用总结文档 初级 Zookeeper使用总结 2015年5月李 梁前言1. 阅读对象本手册面向对zookeeper技术感兴趣的读者,是使用当中的总结,希望能帮到你们。目 录第1章 zookeeper概述 21.1 zookeeper介绍 21.2 zookeeper特性 2第2章 zookeeper安装和配置 32.1.1 zookeeper安装 32.1.2 zookeeper配置 32.1.2.1 单机模式 32.1.2.2 伪集群模式 32.1.2.3 集群模式 4第3章 Zookeeper C API简介 63.1 Watches 63.1.1 监视函数原型 73.

2、2 常用API 73.2.1.1 zookeeper_init 73.2.1.2 zookeeper_close 83.2.1.3 zoo_create 83.2.1.4 zoo_wexists 93.2.1.5 zoo_set 103.2.1.6 zoo_get 103.2.1.7 zoo_state 10第4章 客户端C API编译 124.1 Linux平台编译 124.2 Window平台编译 12第5章 zookeeper客户端命令 135.1 命令行工具的常用操作 135.2 ZooKeeper 常用四字命令 13第6章 zookeeper使用常见问题 15第7章 附录 167.1

3、 zookeeper初始化、销毁函数 167.2 zookeeper辅助函数 167.3 zookeeper同步接口 177.4 zookeeper异步接口 187.5 zookeeper C API 总览 20第1章 zookeeper概述1.1 zookeeper介绍ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。系统模型如图1-1: 图 111.2 zookeeper特性 简单:本质上是一

4、个小型分布式文件系统,其数据结构就是znode树,对znode的读写是原子的。尽量保证单个znode在1MB一下,通常几K。 可靠:可以运行在一组服务器上,数据在每台server上都有备份,避免单点失效。 快速:数据全部加载到内存中,读写比例为10:1时性能最佳(读是局部性的,写需要由leader通知给所有server)。在更新内存中的znode之前会先序列到磁盘,服务重启后数据可以恢复。 松耦合:Watcher机制使得各客户端与服务器的交互变得松耦合,每个客户端无需知晓其他客户端的存在,就可以和其他客户端进行数据交互。第2章 zookeeper安装和配置2.1.1 zookeeper安装下载

5、zookeeper安装包,解压到相应目录即可。2.1.2 zookeeper配置zookeeper配置有三种模式:单机模式、伪集群模式,集群模式。2.1.2.1 单机模式进入zookeeper目录下的conf子目录, 创建zoo.cfg配置如下:tickTime=2000 dataDir=/Users/zookeeper/data dataLogDir=/Users/zookeeper/logs clientPort=4180参数说明:tickTime: zookeeper中使用的基本时间单位, 毫秒值dataDir: 数据目录. 可以是任意目录dataLogDir: log目录, 同样可以是

6、任意目录. 如果没有设置该参数, 将使用和dataDir相同的设置clientPort: 监听client连接的端口号zookeeper的单机模式已经配置完成. 启动server只需运行脚本。Server启动之后, 就可以启动client连接server了。2.1.2.2 伪集群模式所谓伪集群, 是指在单台机器中启动多个zookeeper进程, 并组成一个集群. 以启动3个zookeeper进程为例.将zookeeper的目录拷贝2份:|-zookeeper0|-zookeeper1|-zookeeper2配置如下tickTime=2000initLimit=5syncLimit=2dataD

7、ir=/Users/zookeeper0/datadataLogDir=/Users/zookeeper0/logsclientPort=4180server.0=127.0.0.1:8880:7770server.1=127.0.0.1:8881:7771server.2=127.0.0.1:8882:7772新增了几个参数, 其含义如下:initLimit: zookeeper集群中的包含多台server, 其中一台为leader, 集群中其余的server为follower. initLimit参数配置初始化连接时, follower和leader之间的最长心跳时间. 此时该参数设置为5

8、, 说明时间限制为5倍tickTime, 即5*2000=10000ms=10s。syncLimit: 该参数配置leader和follower之间发送消息, 请求和应答的最大时间长度. 此时该参数设置为2, 说明时间限制为2倍tickTime, 即4000ms.server.X=A:B:C 其中X是一个数字, 表示这是第几号server. A是该server所在的IP地址. B配置该server和集群中的leader交换消息所使用的端口. C配置选举leader时所使用的端口. 由于配置的是伪集群模式, 所以各个server的B, C参数必须不同。参照zookeeper0/conf/zoo.

9、cfg, 配置zookeeper1/conf/zoo.cfg, 和zookeeper2/conf/zoo.cfg文件. 只需更改dataDir, dataLogDir, clientPort参数即可.在之前设置的dataDir中新建myid文件, 写入一个数字, 该数字表示这是第几号server. 该数字必须和zoo.cfg文件中的server.X中的X一一对应./Users/apple/zookeeper0/data/myid文件中写入0, /Users/apple/zookeeper1/data/myid文件中写入1, /Users/apple/zookeeper2/data/myid文件

10、中写入2.分别进入/Users/apple/zookeeper0/bin, /Users/apple/zookeeper1/bin, /Users/apple/zookeeper2/bin三个目录, 启动server.任意选择一个server目录, 启动客户端:2.1.2.3 集群模式集群模式的配置和伪集群基本一致,由于集群模式下, 各server部署在不同的机器上,,因此各server的conf/zoo.cfg文件可以完全一样。下面是一个示例:tickTime=2000 initLimit=5 syncLimit=2 dataDir=/home/zookeeper/data dataLogD

11、ir=/home/zookeeper/logs clientPort=4180server.43=10.1.39.43:2888:3888server.47=10.1.39.47:2888:3888server.48=10.1.39.48:2888:3888示例中部署了3台zookeeper server,分别部署在10.1.39.43, 10.1.39.47, 10.1.39.48上。 需要注意的是,,各server的dataDir目录下的myid文件中的数字必须不同。10.1.39.43 server的myid为43, 10.1.39.47 server的myid为47, 10.1.39.

12、48 server的myid为48。第3章 Zookeeper C API简介Zookeeper C API 的声明和描述在 include/zookeeper.h 中可以找到,另外大部分的 Zookeeper C API 常量、结构体声明也在 zookeeper.h 中,如果如果你在使用 C API 是遇到不明白的地方,最好看看 zookeeper.h,或者自己使用 doxygen 生成 Zookeeper C API 的帮助文档。3.1 WatchesZookeeper 中最有特色且最不容易理解的是监视(Watches)。Zookeeper 所有的读操作getData(), getChil

13、dren(), 和exists()都 可以设置监视(watch),监视事件可以理解为一次性的触发器, 官方定义如下: a watch event is one-time trigger, sent to the client that set the watch, which occurs when the data for which the watch was set changes。对此需要作出如下理解: (一次性触发)One-time trigger当设置监视的数据发生改变时,该监视事件会被发送到客户端,例如,如果客户端调用了 getData(/znode1, true) 并且稍后 /

14、znode1 节点上的数据发生了改变或者被删除了,客户端将会获取到 /znode1 发生变化的监视事件,而如果 /znode1 再一次发生了变化,除非客户端再次对 /znode1 设置监视,否则客户端不会收到事件通知。 (发送至客户端)Sent to the clientZookeeper 客户端和服务端是通过 socket 进行通信的,由于网络存在故障,所以监视事件很有可能不会成功地到达客户端,监视事件是异步发送至监视者的,Zookeeper 本身提供了保序性(ordering guarantee):即客户端只有首先看到了监视事件后,才会感知到它所设置监视的 znode 发生了变化(a cl

15、ient will never see a change for which it has set a watch until it first sees the watch event). 网络延迟或者其他因素可能导致不同的客户端在不同的时刻感知某一监视事件,但是不同的客户端所看到的一切具有一致的顺序。 (被设置 watch 的数据)The data for which the watch was set这意味着 znode 节点本身具有不同的改变方式。你也可以想象 Zookeeper 维护了两条监视链表:数据监视和子节点监视(data watches and child watches)

16、getData() and exists() 设置数据监视,getChildren() 设置子节点监视。 或者,你也可以想象 Zookeeper 设置的不同监视返回不同的数据,getData() 和 exists() 返回 znode 节点的相关信息,而 getChildren() 返回子节点列表。因此, setData() 会触发设置在某一节点上所设置的数据监视(假定数据设置成功),而一次成功的 create() 操作则会出发当前节点上所设置的数据监视以及父节点的子节点监视。一次成功的 delete() 操作将会触发当前节点的数据监视和子节点监视事件,同时也会触发该节点父节点的child w

17、atch。Zookeeper 中的监视是轻量级的,因此容易设置、维护和分发。当客户端与 Zookeeper 服务器端失去联系时,客户端并不会收到监视事件的通知,只有当客户端重新连接后,若在必要的情况下,以前注册的监视会重新被注册并触发,对于开发人员来说 这通常是透明的。只有一种情况会导致监视事件的丢失,即:通过 exists() 设置了某个 znode 节点的监视,但是如果某个客户端在此 znode 节点被创建和删除的时间间隔内与 zookeeper 服务器失去了联系,该客户端即使稍后重新连接 zookeeper服务器后也得不到事件通知。3.1.1 监视函数原型typedef void (*w

18、atcher_fn)(zhandle_t *zh, int type, int state, const char *path,void *watcherCtx);监视函数原型的各个参数解释如下:zhzookeeper 句柄(handle)type事件类型(event type). *_EVENT 常量之一.state连接状态(connection state). 状态值为 *_STATE 常量之一.path触发监视事件的 znode 节点的路径,若为 NULL,则事件类型为 ZOO_SESSION_EVENTwatcherCtx监视器上下文(watcher context).3.2 常用AP

19、I3.2.1.1 zookeeper_initZOOAPI zhandle_t *zookeeper_init(const char *host, watcher_fn fn, int recv_timeout, const clientid_t * clientid, void *context, int flags);功能:创建一个句柄(handle)和一个响应(response)这个句柄的会话(session)。参数:host:zookeeper主机列表,用逗号间隔。fn:用于监视的回调函数。clientid:之前建立过连接,现在要重新连的客户端(client)ID。如果之前没有,则为0

20、.context:暂时用不到,忽略。flags:设置为0,zookeeper开发团队保留以后使用。3.2.1.2 zookeeper_closeZOOAPI int zookeeper_close(zhandle_t *zh);功能:关闭句柄,释放资源。参数:zh:zookeeper句柄。返回值: ZOK表示成功ZBADARGUMENTS表示输入参数无效 ZMARSHALLINGERROR - failed to marshall a request; possibly, out of memory ZOPERATIONTIMEOUT - failed to flush the buffers

21、 within the specified timeout.ZCONNECTIONLOSS - a network error occured while attempting to send request to server ZSYSTEMERROR - a system (OS) error occured; its worth checking errno to get details3.2.1.3 zoo_createZOOAPI int zoo_create(zhandle_t *zh, const char *path, const char *value,int valuele

22、n, const struct ACL_vector *acl, int flags,char *path_buffer, int path_buffer_len);功能:创建一个同步的zookeeper节点。参数:zh:zookeeper的句柄,由zookeeper_init得到。path:节点名称,就是一个类似于文件系统写法的路径。value:欲存储到该节点的数据。如果不存储数据,则设置为NULL。valuelen:欲存储的数据的长度。如果不存储数据,则设置为-1.acl:初始的ACL节点,ACL不能为空。比如设置为&ZOO_OPEN_ACL_UNSAFE。flags:一般设置为0。pat

23、h_buffer:将由新节点填充的路径值。可设置为NULL。path_buffer_len:path_buffer的长度。返回值: ZOK表示操作成功。ZNONODE表示该节点不存在。ZNODEEXISTS表示节点已经存在。ZNOAUTH表示客户端(client)无权限。ZNOCHILDRENFOREPHEMERALS表示不能够创建临时(ephemeral)节点的子节点(children)。3.2.1.4 zoo_wexistsZOOAPI int zoo_wexists(zhandle_t *zh, const char *path, watcher_fn watcher, void* wa

24、tcherCtx, struct Stat *stat);功能:同步监视一个zookeeper节点(node)是否存在。参数:zh:zookeeper的句柄,由zookeeper_init得到。path:节点名称,就是一个类似于文件系统写法的路径。watcher:如果不为 NULL 则会在服务器端设置监视,当节点发生变化时客户端会得到通知,即使当前指定的节点不存在也会设置监视,这样该节点被创建时,客户端也可以得到通知。watcherCtx: 用户指定的数据,将被传入到监视器回调函数中,与由 zookeeper_init() 设置的全局监视器上下文不同,该函数设置的监视器上下文只与当前的监视器相

25、关联。stat:返回的Stat信息返回值: ZOK表示操作成功。ZNONODE表示该节点不存在。ZNOAUTH表示客户端(client)无权限。ZINVALIDSTATE表示存在非法的参数。3.2.1.5 zoo_setZOOAPI int zoo_set(zhandle_t *zh, const char *path, const char *buffer, int buflen, int version);功能:向zookeeper节点写数据。参数:zh:zookeeper的句柄,由zookeeper_init得到。path:节点名称,就是一个类似于文件系统写法的路径。buffer:欲写的

26、数据。buflen:欲写的数据的长度。version:检查这个节点的版本是否为version。当设置为-1时,不会进行版本检查。3.2.1.6 zoo_getZOOAPI int zoo_get(zhandle_t *zh, const char *path, int watch, char *buffer, int* buffer_len, struct Stat *stat);功能:获取zookeeper节点数据。参数:zh:zookeeper的句柄,由zookeeper_init得到。path:节点名称,就是一个类似于文件系统写法的路径。watch: 如果非0,则在服务器端设置监视,当节

27、点发生变化时客户端会得到通知。buffer:用于保存从 zookeeper 服务器获取的节点数据。buffer_len:buffer 大小,一旦成功返回该值将会被设置为节点数据的实际大小,如果节点的数据为空,则数据大小为 -1,buffer_len 也为 -1。stat: 如果非空,stat 指向的结构将会保存该节点的 Stat 信息。3.2.1.7 zoo_stateZOOAPI int zoo_state(zhandle_t *zh);功能:获取zookeeper连接状态。参数:zh:zookeeper的句柄,由zookeeper_init得到。返回值:ZOK operation comp

28、leted successfully * ZNONODE the parent node does not exist. * ZNODEEXISTS the node already exists * ZNOAUTH the client does not have permission. * ZNOCHILDRENFOREPHEMERALS cannot create children of ephemeral nodes. * param data The data that will be passed to the completion routine when the * funct

29、ion completes. * return ZOK on success or one of the following errcodes on failure: * ZBADARGUMENTS - invalid input parameters * ZINVALIDSTATE - zhandle state is either ZOO_SESSION_EXPIRED_STATE or ZOO_AUTH_FAILED_STATE * ZMARSHALLINGERROR - failed to marshall a request; possibly, out of memory第4章 客

30、户端C API编译4.1 Linux平台编译 解压缩源代码包,cd到zookeeper-x.x.x/src/c目录 执行./configure 以生成makefile。对于这一步,configure工具支持下述有用的选项:-enable-debug启用优化和调试信息。(默认是禁用的)-without-syncapi禁止同步API支持,不创建zookeeper_mt库。(默认是启用的)-disable-static不创建静态库。(默认是启用的)-disable-shared不创建共享库。(默认是启用的)注意:关于执行configure的一般信息,请看INSTALL文件。 编译好的动态库存放在zo

31、okeeper-3.4.6/src/c/.libs/目录下。 执行make或者make install,创建并且安装库。 要生成ZooKeeper API的doxygen文档,可执行doxygen-doc。所有文档将放置到docs子目录中。默认情况下,这个命令只生成HTML。关于其他文档格式的信息,请执行./congiure -help。4.2 Window平台编译 解压缩源代码包,cd到zookeeper-x.x.x/src/c目录 目录下有VS工程,打开工程编译即可第5章 zookeeper客户端命令ZooKeeper命令行工具类似于Linux的shell环境,可以简单的对ZooKeeper进行访问,数据创建,数据修改等操作. 使用 zkCli.sh -server 127.0.0.1:2181 连接到 ZooKeeper 服务,连接成功后,系统会输出 ZooKeeper 的相关环境以及

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1