map遍历 log4j tkinter electron pmp视频教程下载 erp系统源码 广告投放系统源码 多商户商城模板 jquery获取最后一个子元素 collection框架的结构 c语言求和 js获取body的高度 字符串中包含某个字符串 tomcat调优和jvm调优 磁盘清理会误删东西吗 python中set的用法 java案例 java编译 java继承关键字 java接口实现 javarandom linux磁盘管理 linux入门基础 摩尔斯电码翻译器 1660ti 魔兽七个人 什么软件买电影票便宜 pr蒙版 ps从入门到精通 微信小程序开发实例 只狼台词 jsp源代码 winsxs可以删除吗 黑道圣徒4去马赛克 红米3和红米3s的区别 js回调函数 curdate dw网页设计教程 加字幕的软件 lol特效盒子
当前位置: 首页 > 学习教程  > 编程语言

zookee 的安装和命令行

2020/12/5 10:33:02 文章标签:

本文讲述如何安装和部署ZooKeeper。 一、系统要求 ZooKeeper可以运行在多种系统平台上面,表1展示了zk支持的系统平台,以及在该平台上是否支持开发环境或者生产环境。 表1:ZooKeeper支持的运行平台 系统开发环境生产环境Linux支持支持Solaris支…

本文讲述如何安装和部署ZooKeeper。

一、系统要求

ZooKeeper可以运行在多种系统平台上面,表1展示了zk支持的系统平台,以及在该平台上是否支持开发环境或者生产环境。

表1:ZooKeeper支持的运行平台

系统开发环境生产环境
Linux支持支持
Solaris支持支持
FreeBSD支持支持
Windows支持不支持
MacOS支持不支持

ZooKeeper是用Java编写的,运行在Java环境上,因此,在部署zk的机器上需要安装Java运行环境。为了正常运行zk,我们需要JRE1.6或者以上的版本。
对于集群模式下的ZooKeeper部署,3个ZooKeeper服务进程是建议的最小进程数量,而且不同的服务进程建议部署在不同的物理机器上面,以减少机器宕机带来的风险,以实现ZooKeeper集群的高可用。
ZooKeeper对于机器的硬件配置没有太大的要求。例如,在Yahoo!内部,ZooKeeper部署的机器其配置通常如下:双核处理器,2GB内存,80GB硬盘。

二、下载

可以从 https://zookeeper.apache.org/releases.html 下载ZooKeeper,目前最新的稳定版本为 3.4.8 版本,用户可以自行选择一个速度较快的镜像来下载即可。

三、目录

下载并解压ZooKeeper软件压缩包后,可以看到zk包含以下的文件和目录:

这里写图片描述
图1:ZooKeeper软件的文件和目录

  • bin目录
    zk的可执行脚本目录,包括zk服务进程,zk客户端,等脚本。其中,.sh是Linux环境下的脚本,.cmd是Windows环境下的脚本。
  • conf目录
    配置文件目录。zoo_sample.cfg为样例配置文件,需要修改为自己的名称,一般为zoo.cfg。log4j.properties为日志配置文件。
  • lib
    zk依赖的包。
  • contrib目录
    一些用于操作zk的工具包。
  • recipes目录
    zk某些用法的代码示例

四、单机模式

ZooKeeper的安装包括单机模式安装,以及集群模式安装。

单机模式较简单,是指只部署一个zk进程,客户端直接与该zk进程进行通信。
在开发测试环境下,通过来说没有较多的物理资源,因此我们常使用单机模式。当然在单台物理机上也可以部署集群模式,但这会增加单台物理机的资源消耗。故在开发环境中,我们一般使用单机模式。
但是要注意,生产环境下不可用单机模式,这是由于无论从系统可靠性还是读写性能,单机模式都不能满足生产的需求。

4.1 运行配置

上面提到,conf目录下提供了配置的样例zoo_sample.cfg,要将zk运行起来,需要将其名称修改为zoo.cfg。
打开zoo.cfg,可以看到默认的一些配置。

  • tickTime
    时长单位为毫秒,为zk使用的基本时间度量单位。例如,1 * tickTime是客户端与zk服务端的心跳时间,2 * tickTime是客户端会话的超时时间。
    tickTime的默认值为2000毫秒,更低的tickTime值可以更快地发现超时问题,但也会导致更高的网络流量(心跳消息)和更高的CPU使用率(会话的跟踪处理)。
  • clientPort
    zk服务进程监听的TCP端口,默认情况下,服务端会监听2181端口。
  • dataDir
    无默认配置,必须配置,用于配置存储快照文件的目录。如果没有配置dataLogDir,那么事务日志也会存储在此目录。

4.2 启动

在Windows环境下,直接双击zkServer.cmd即可。在Linux环境下,进入bin目录,执行命令

./zkServer.sh start

这个命令使得zk服务进程在后台进行。如果想在前台中运行以便查看服务器进程的输出日志,可以通过以下命令运行:

./zkServer.sh start-foreground

执行此命令,可以看到大量详细信息的输出,以便允许查看服务器发生了什么。

使用文本编辑器打开zkServer.cmd或者zkServer.sh文件,可以看到其会调用zkEnv.cmd或者zkEnv.sh脚本。zkEnv脚本的作用是设置zk运行的一些环境变量,例如配置文件的位置和名称等。

4.3 连接

如果是连接同一台主机上的zk进程,那么直接运行bin/目录下的zkCli.cmd(Windows环境下)或者zkCli.sh(Linux环境下),即可连接上zk。
直接执行zkCli.cmd或者zkCli.sh命令默认以主机号 127.0.0.1,端口号 2181 来连接zk,如果要连接不同机器上的zk,可以使用 -server 参数,例如:

bin/zkCli.sh -server 192.168.0.1:2181

五、集群模式

单机模式的zk进程虽然便于开发与测试,但并不适合在生产环境使用。在生产环境下,我们需要使用集群模式来对zk进行部署。

注意
在集群模式下,建议至少部署3个zk进程,或者部署奇数个zk进程。如果只部署2个zk进程,当其中一个zk进程挂掉后,剩下的一个进程并不能构成一个quorum的大多数。因此,部署2个进程甚至比单机模式更不可靠,因为2个进程其中一个不可用的可能性比一个进程不可用的可能性还大。

5. 1 运行配置

在集群模式下,所有的zk进程可以使用相同的配置文件(是指各个zk进程部署在不同的机器上面),例如如下配置:

tickTime=2000
dataDir=/home/myname/zookeeper
clientPort=2181
initLimit=5
syncLimit=2 server.1=192.168.229.160:2888:3888 server.2=192.168.229.161:2888:3888 server.3=192.168.229.162:2888:3888
  • initLimit
    ZooKeeper集群模式下包含多个zk进程,其中一个进程为leader,余下的进程为follower。
    当follower最初与leader建立连接时,它们之间会传输相当多的数据,尤其是follower的数据落后leader很多。initLimit配置follower与leader之间建立连接后进行同步的最长时间。
  • syncLimit
    配置follower和leader之间发送消息,请求和应答的最大时间长度。
  • tickTime
    tickTime则是上述两个超时配置的基本单位,例如对于initLimit,其配置值为5,说明其超时时间为 2000ms * 5 = 10秒。
  • server.id=host:port1:port2
    其中id为一个数字,表示zk进程的id,这个id也是dataDir目录下myid文件的内容。
    host是该zk进程所在的IP地址,port1表示follower和leader交换消息所使用的端口,port2表示选举leader所使用的端口。
  • dataDir
    其配置的含义跟单机模式下的含义类似,不同的是集群模式下还有一个myid文件。myid文件的内容只有一行,且内容只能为1 - 255之间的数字,这个数字亦即上面介绍server.id中的id,表示zk进程的id。

注意
如果仅为了测试部署集群模式而在同一台机器上部署zk进程,server.id=host:port1:port2配置中的port参数必须不同。但是,为了减少机器宕机的风险,强烈建议在部署集群模式时,将zk进程部署不同的物理机器上面。

5.2 启动

假如我们打算在三台不同的机器 192.168.229.160,192.168.229.161,192.168.229.162上各部署一个zk进程,以构成一个zk集群。
三个zk进程均使用相同的 zoo.cfg 配置:

tickTime=2000
dataDir=/home/myname/zookeeper
clientPort=2181
initLimit=5
syncLimit=2 server.1=192.168.229.160:2888:3888 server.2=192.168.229.161:2888:3888 server.3=192.168.229.162:2888:3888

在三台机器dataDir目录( /home/myname/zookeeper 目录)下,分别生成一个myid文件,其内容分别为1,2,3。然后分别在这三台机器上启动zk进程,这样我们便将zk集群启动了起来。

5.3 连接

可以使用以下命令来连接一个zk集群:

bin/zkCli.sh -server 192.168.229.160:2181,192.168.229.161:2181,192.168.229.162:2181

成功连接后,可以看到如下输出:

2016-06-28 19:29:18,074 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=192.168.229.160:2181,192.168.229.161:2181,192.168.229.162:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@770537e4 Welcome to ZooKeeper! 2016-06-28 19:29:18,146 [myid:] - INFO [main-SendThread(192.168.229.162:2181):ClientCnxn$SendThread@975] - Opening socket connection to server 192.168.229.162/192.168.229.162:2181. Will not attempt to authenticate using SASL (unknown error) JLine support is enabled 2016-06-28 19:29:18,161 [myid:] - INFO [main-SendThread(192.168.229.162:2181):ClientCnxn$SendThread@852] - Socket connection established to 192.168.229.162/192.168.229.162:2181, initiating session 2016-06-28 19:29:18,199 [myid:] - INFO [main-SendThread(192.168.229.162:2181):ClientCnxn$SendThread@1235] - Session establishment complete on server 192.168.229.162/192.168.229.162:2181, sessionid = 0x3557c39d2810029, negotiated timeout = 30000 

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: 192.168.229.160:2181,192.168.229.161:2181,192.168.229.162:2181(CONNECTED) 0]

图2:客户端连接zk集群的输出日志

从日志输出可以看到,客户端连接的是192.168.229.162:2181进程(连接上哪台机器的zk进程是随机的),客户端已成功连接上zk集群。

参考资料

  1. http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html
  2. http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html
  3. 《ZooKeeper分布式系统开发实战》课程,主讲人:玺感
  4. 《ZooKeeper分布式过程协同技术详解》,Flavio Junqueira等著,谢超等译
  5. 百度百科有关quorum的解释,http://baike.baidu.com/link?url=pqWrzgH-_VhMLnscR1iRTpPjovfyhxG-8Qs9HxGutiGi5bhnA_lX_pmabLQ-3MiDeigcHRFMYSbFg90RAYVAta
  6. 《Zookeeper 安装和配置》,http://coolxing.iteye.com/blog/1871009

ZooKeeper的客户端包括Java版本和C语言版本。使用Java版本连接zk的命令以下:

bin/zkCli.sh -server ip:port

执行此命令,客户端成功连接上zk,会有类似以下的输出,其中,包括“Welcome to ZooKeeper!”的欢迎语,以及其他一些连接的信息等。

lihaodeMacBook-Pro:bin lihao$ ./zkCli.sh -server 127.0.0.1:2182 Connecting to 127.0.0.1:2182 2016-06-29 07:51:39,679 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.8--1, built on 02/06/2016 03:18 GMT 2016-06-29 07:51:39,682 [myid:] - INFO [main:Environment@100] - Client environment:host.name=192.168.31.107 2016-06-29 07:51:39,682 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_77 2016-06-29 07:51:39,684 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation …… 2016-06-29 07:51:39,686 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=127.0.0.1:2182 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@531d72ca Welcome to ZooKeeper! 2016-06-29 07:51:39,715 [myid:] - INFO [main-SendThread(127.0.0.1:2182):ClientCnxn$SendThread@1032] - Opening socket connection to server 127.0.0.1/127.0.0.1:2182. Will not attempt to authenticate using SASL (unknown error) JLine support is enabled 2016-06-29 07:51:39,797 [myid:] - INFO [main-SendThread(127.0.0.1:2182):ClientCnxn$SendThread@876] - Socket connection established to 127.0.0.1/127.0.0.1:2182, initiating session [zk: 127.0.0.1:2182(CONNECTING) 0] 2016-06-29 07:51:39,830 [myid:] - INFO [main-SendThread(127.0.0.1:2182):ClientCnxn$SendThread@1299] - Session establishment complete on server 127.0.0.1/127.0.0.1:2182, sessionid = 0x155996605050000, negotiated timeout = 30000 

WATCHER::

WatchedEvent state:SyncConnected type:None path:null

连接成功后,便可以使用命令与zk服务进行交互。

help

help命令会输出zk支持的所有命令。

[zk: 127.0.0.1:2182(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
    stat path [watch]
    set path data [version]
    ls path [watch]
    delquota [-n|-b] path
    ls2 path [watch]
    setAcl path acl
    setquota -n|-b val path
    history 
    redo cmdno
    printwatches on|off
    delete path [version]
    sync path
    listquota path
    rmr path
    get path [watch] create [-s] [-e] path data acl addauth scheme auth quit getAcl path close connect host:port

ls

查看指定路径下包含的节点

[zk: localhost:2181(CONNECTED) 2] ls /
[zookeeper]

create

创建一个节点,例如:

[zk: localhost:2181(CONNECTED) 3] create /zk mydata
Created /zk

以上命令创建一个/zk节点,且其内容为 “myData”

get

显示指定路径下节点的信息,例如,我们检查一下上面的/zk节点最否创建成功

[zk: localhost:2181(CONNECTED) 4] get /zk
mydata
cZxid = 0xb59
ctime = Thu Jun 30 11:13:24 CST 2016
mZxid = 0xb59
mtime = Thu Jun 30 11:13:24 CST 2016
pZxid = 0xb59 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 6 numChildren = 0

可以看到/zk节点的内容为”myData”,且输出包含了znode的其他信息。有关各个字段的具体含义,请参见了本博客对znode的介绍。

set

设置节点的内容,例如:

[zk: localhost:2181(CONNECTED) 6] set /zk "anotherData"
……
[zk: localhost:2181(CONNECTED) 7] get /zk "anotherData" ……

delete

删除一个节点,例如:

[zk: localhost:2181(CONNECTED) 8] delete /zk
[zk: localhost:2181(CONNECTED) 9] get /zk Node does not exist: /zk

以上就是zk客户端最常用的几个命令,从这几个命令我们也可以看到zk提供的API设计的简单。

四字母命令

ZooKeeper提供了多个由4个字母构成的命令,可以使用nc或者telnet来使用这些命令。例如:

telnet 127.0.0.1 2181

成功连接zk后,输入conf
会看到以下输出

clientPort=2181
dataDir=D:\Soft\zookeeper-3.4.6\data\version-2
dataLogDir=D:\Soft\zookeeper-3.4.6\data\version-2 tickTime=2000 maxClientCnxns=60 minSessionTimeout=4000 maxSessionTimeout=40000 serverId=0

或者使用nc来向zk发送4字母命令,例如:

echo conf | nc 192.168.229.161 2181
  • 1

其他常用的四字母命令如下表格所示:

表格:ZooKeeper提供的四字母命令

命令描述
confzk服务配置的详细信息
stat客户端与zk连接的简要信息
srvrzk服务的详细信息
cons客户端与zk连接的详细信息
mntrzk服务目前的性能状况
wchswatch的简要信息
wchcwatch的详细信息,客户端 -> watch的映射,线上环境要小心使用
wchpwatch的详细信息, znode -> 客户端的映射,线上环境要小心使用

例如,mntr 命令的输出:

echo mntr | nc 192.168.229.161 2181
zk_version  3.4.6-1569965, built on 02/20/2014 09:09 GMT zk_avg_latency 0 zk_max_latency 565 zk_min_latency 0 zk_packets_received 95353 zk_packets_sent 95713 zk_num_alive_connections 3 zk_outstanding_requests 0 zk_server_state leader zk_znode_count 20 zk_watch_count 12 zk_ephemerals_count 9 zk_approximate_data_size 1465 zk_open_file_descriptor_count 37 zk_max_file_descriptor_count 65535 zk_followers 2 - 只有leader进程才有此项输出 zk_synced_followers 2 - 只有leader进程才有此项输出 zk_pending_syncs 0 - 只有leader进程才有此项输出

参考资料

  1. http://www.programering.com/a/MTOxUjMwATI.html
  2. https://zookeeper.apache.org/doc/r3.4.8/zookeeperStarted.html
  3. https://www.cnblogs.com/jimcsharp/p/8358271.html

本文链接: http://www.dtmao.cc/news_show_450252.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?