zookeeper已经介绍了它的原理设计以及实现方式,我们接下来介绍zookeeper的使用方法以及简单配置。

下载

获取Zookeeper的发布包,从Apache下载映像中下载一个最新稳定版本。

单机操作

安装Zookeeper的单机模式非常简单。服务包含在一个单独的压缩文件中,所以安装只需要创建配置文件。

下载了Zookeeper稳定的发布版本之后,解压并进入根目录。

启动Zookeeper之前需要一个配置文件。 conf/zoo.cfg是一个实例文件:

 tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181

这个文件本来可以叫任何名字,此时我们叫它conf/zoo.cfg。修改dataDir的值为一个已经存在的(空的开始)文件夹。下面是每个字段的含义:

  • tickTime:Zookeeper使用的以毫秒为单位的基本时间单位。它用于心跳机制和最小的session超时时间为两倍心跳时间。
  • dataDir:保存内存数据库快照信息的位置,如果没有其他说明,更新的事务日志也保存到数据库。
  • clientPort:监听客户端连接的端口。

创建了配置文件之后,就可以启动Zookeeper了:

 bin/zkServer.sh start

管理Zookeeper存储

长时间运行的生产系统上的Zookeeper存储必须要在外部管理(datadir 和 logs),查看 管理员指南的maintenance部分获取更多信息。

连接Zookeeper

 bin/zkCli.sh -server 127.0.0.1:2181

一旦连接上了,你应对会看到这些信息:

 Connecting to localhost:2181
log4j:WARN No appenders could be found for logger (org.apache.zookeeper.ZooKeeper).
log4j:WARN Please initialize the log4j system properly.
Welcome to ZooKeeper!
JLine support is enabled
[zkshell: 0]

从shell脚本输入help,可以获取客户端可执行的命令列表,如:

 [zkshell: 0] help
ZooKeeper host:port cmd args
get path [watch]
ls path [watch]
set path data [version]
delquota [-n|-b] path
quit
printwatches on|off
createpath data acl
stat path [watch]
listquota path
history
setAcl path acl
getAcl path
sync path
redo cmdno
addauth scheme auth
delete path [version]
setquota -n|-b val path

第一,通过发行的列表命令开始,像ls :

 [zkshell: 8] ls /
[zookeeper]

下一步,通过运行create /zk_test my_data,创建一个新的znode。这将创建一个新的znode节点和一个相关联的字符串"my_data"。你应该看到:

 [zkshell: 9] create /zk_test my_data
Created /zk_test

使用ls / 命令查看目录:

 [zkshell: 11] ls /
[zookeeper, zk_test]

注意 zk_test目录现在已经创建了。

接下来,使用 get 命令验证数据是否与znode关联上了:

 [zkshell: 12] get /zk_test
my_data
cZxid = 5
ctime = Fri Jun 05 13:57:06 PDT 2009
mZxid = 5
mtime = Fri Jun 05 13:57:06 PDT 2009
pZxid = 5
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0
dataLength = 7
numChildren = 0

我们可以是用set命令改变与zk_test关联的数据:

 [zkshell: 14] set /zk_test junk
cZxid = 5
ctime = Fri Jun 05 13:57:06 PDT 2009
mZxid = 6
mtime = Fri Jun 05 14:01:52 PDT 2009
pZxid = 5
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0
dataLength = 4
numChildren = 0
[zkshell: 15] get /zk_test
junk
cZxid = 5
ctime = Fri Jun 05 13:57:06 PDT 2009
mZxid = 6
mtime = Fri Jun 05 14:01:52 PDT 2009
pZxid = 5
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0
dataLength = 4
numChildren = 0

最后,让我们delete节点:

 [zkshell: 16] delete /zk_test
[zkshell: 17] ls /
[zookeeper]
[zkshell: 18]

运行主从复制的Zookeeper

运行Zookeeper的独立模式方便评估、开发和测试。但是在生产中,你要运行Zookeeper的主从复制模式。相同应用中服务器主从复制组叫做 quorum , 并且在主从复制模式中,在quorum中的所有服务器有相同的配置文件副本。

注意:

对于主从模式,三台服务器是最小的要求,并强烈建议有基数个服务器。如果你只有两台服务器,其中的一个故障的时候,没有足够的机器形成多数quorum。在本质上两台服务比单台服务更不稳定,因为有两个单点。

配置文件和使用独立模式相似,但有一点点的区别,这是一个实例:

 tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888

  新的条目,initLimit 是Zookeeper用它来限定quorum中的Zookeeper服务器连接到Leader的超时时间。syncLimit限制了一个服务器从Leader多长时间超时。

使用这两种超时,你指定的时间单位使用tickTime.在这个例子中,initLimit的超时时间是5个标记号,2000毫秒一个标记,就是10秒。

条目server.x列出了构成Zookeeper服务的服务器。当服务启动时,它通过查找data目录中的myid文件知道是哪个服务。这个myid个文件包含了服务编号,用ASCII.

  最后,注意每个服务器名称后面的两个端口号:"2888"和"3888"。服务器节点使用前面的端口连接到其他节点。这样的一个连接非常重要,以便于同事之间可以通讯,例如,对更新的顺序取得统一的意见。更具体的说,一个Zookeeper的服务器用这个端口连接follower到leader。当一个新的leader产生时,follower使用这个端口打开一个TCP连接,连接到leader。因为默认的leader选举也使用TCP。我们现在需要另一个端口用来leader选举。这是在服务器条目的第二个端口。

  注意:如果你想在一台机器上测试多台服务器,在服务器配置文件为每个server.x指定servername为localhost,和独有的quorum & leader选举端口(也就是 2888:3888, 2889:3889, 2890:3890在上面的示例中)。当然分开dataDir和不同的clientPort也是非常重要的(在上面的主从复制示例中,在单个主机上运行,你仍然需要三个配置文件)。

Zookeeper学习记录(二):使用以及配置的更多相关文章

  1. Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客

    ==他的博客应该不错,没有细看 Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客 http://blog.csdn.net/u012706811/article/det ...

  2. ZooKeeper学习笔记二:API基本使用

    Grey ZooKeeper学习笔记二:API基本使用 准备工作 搭建一个zk集群,参考ZooKeeper学习笔记一:集群搭建. 确保项目可以访问集群的每个节点 新建一个基于jdk1.8的maven项 ...

  3. Material Calendar View 学习记录(二)

    Material Calendar View 学习记录(二) github link: material-calendarview; 在学习记录一中简单翻译了该开源项目的README.md文档.接下来 ...

  4. JavaScript学习记录二

    title: JavaScript学习记录二 toc: true date: 2018-09-13 10:14:53 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...

  5. 2.VUE前端框架学习记录二

    VUE前端框架学习记录二:Vue核心基础2(完结)文字信息没办法描述清楚,主要看编码实战里面,有附带有一个完整可用的Html页面,有需要的同学到脑图里面自取.脑图地址http://naotu.baid ...

  6. zookeeper学习记录第二篇-----安装、配置、启动

    搭建zk集群,起码保证3台虚拟机的配置,本人使用的虚拟机环境为wm14+centos7+jdk1.8 下载地址 zk的tar包下载地址:http://mirror.bit.edu.cn/apache/ ...

  7. Spring学习记录(二)---容器和bean属性配置

    下载spring包,在eclipse搭建spring环境. 这步我在eclipse中无法导入包,看网上的: http://sishuok.(和谐)com/forum/blogPost/list/242 ...

  8. ELK学习记录二 :elasticsearch、logstash及kibana的安装与配置

    注意事项: 1.ELK版本要求5.X以上,本人使用版本:elasticsearch-6.0.0.kibana-6.0.0-linux-x86_64.logstash-6.0.0.tar 2.Elast ...

  9. (转)zookeeper学习记录--附browser

    转自:http://agapple.iteye.com/blog/1111377 背景 前段时间看了S4流计算引擎,里面使用到了zookeeper进行集群管理,所以也就花了点时间研究了下zookeep ...

随机推荐

  1. MAC SVN 基本设置 终端命令

    extends:http://www.cnblogs.com/heiniuhaha/archive/2012/07/31/2616493.html 安装XCode后Mac OS X 系统已经内置了sv ...

  2. Android LayoutCast 初探

    今天无意间看见了一个神器,顿时让我血气蓬勃! 废话不多说,先上网址:https://github.com/mmin18/LayoutCast 把代码和资源文件的改动直接同步到手机上,应用不需要重启.省 ...

  3. linux启动程序和关闭程序脚本

    关闭脚本: #!/bin/bash source /etc/profile log() { echo `date +[%Y-%m-%d" "%H:%M:%S]` $1 } log ...

  4. 构建一个基于UIView的类别

    很多时候,如果我们想给我们的控件赋值,例如给控件的长度.宽度等赋值,很麻烦 需要先获取到当前frame,再整个临时frame来保存,修改赋值后再还给当前的frame,这都是重复性高的苦力活,解决方法就 ...

  5. php curl常见错误:SSL错误、bool(false)

    症状:php curl调用https出错 排查方法:在命令行中使用curl调用试试. 原因:服务器所在机房无法验证SSL证书. 解决办法:跳过SSL证书检查. curl_setopt($ch, CUR ...

  6. POJ-1088 滑雪 (记忆化搜索,dp)

    滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 86318 Accepted: 32289 Description Mich ...

  7. poj3252Round Numbers【组合数】【数位dp】

    Round Numbers The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, ...

  8. 源码 time sleep

    C:\Users\Administrator\.PyCharm2017.1\system\python_stubs\2083891348\time.py def sleep(seconds): # r ...

  9. AmazonOrder xml web语义化

    XML Processing Modules — Python 3.7.1 documentation https://docs.python.org/3.7/library/xml.html#xml ...

  10. <!DOCTYPE html>有什么用?

    <!DOCTYPE html> 是文档声明,必须放在文档第一行,它的作用就是告诉浏览器以哪个html版本来解析你的html代码.当你不写声明的时候,浏览器就会以自己的怪异模式来解析你的ht ...