2.入手实操Apache ZooKeeper

Tips
召开一个终身学习的食指!
天拱一终于,功不唐捐。

图片 1

在本节着,我们用执教如何下载并安装Apache
ZooKeeper,以便我们好一直开运用ZooKeeper。
本部分旨在通过提供详实的装置及采用说明,使用ZooKeeper了解其分布式应用程序的需要。
我们用自单节点ZooKeeper安装开始,熟悉基本配备,然后上ZooKeeper shell。
最后,学习怎样设置一个几近节点ZooKeeper集群。

1. 下载和安装

ZooKeeper由各种平台支持。 支持GNU / Linux和Oracle
Solaris作为服务器和客户端的支付和生育平台。 Windows和Mac OS
X系统就援引作为服务器和客户端的开发平台。

ZooKeeper由Java中落实,需要周转Java 6或更胜版本。
虽然推荐以Oracle的Java版本,但OpenJDK也得健康运转ZooKeeper。

ZooKeeper作为一个曰ZooKeeper系列的服务器集合运行。
在生集众多被,三只ZooKeeper服务器是集聚的极小建议大小,建议于不同的机械上运行它们。
但是,可以经过当独模式下用该安于单台计算机达来学习和习ZooKeeper。

打开Apache
ZooKeeper的官方网站,找到下载页面的链接,根据自己的操作系统,选择不同格式的公文,我用底macOS系统,所以下载了zookeeper-3.4.10.tar.gz,下载后,直接双击解压即可。也可采取命令:

tar -C /Users/i324779 -zxf zookeeper-3.4.10.tar.gz

本人在了现阶段用户目录下,你啊因自己的嗜好放在指定的目录下。

下载后,我们需要安排一下环境变量:
坐macOS为条例,编辑用户目录下之.bash_profile文件,添加如下:
export ZK_HOME=/Users/i324779/zookeeper-3.4.10 export PATH=$PATH:$ZK_HOME/bin

离编辑后,在顶峰履行. .bash_profile,立即生效。

接通下是部署,
ZooKeeper在领取的ZooKeeper目录下之conf目录中要一个誉为吧zoo.cfg的部署文件。
在conf目录下,有一个示范配置文件,其中饱含有布局参数供参考。

受咱创建布局文件,并利用以下最小参数,并拿该保存在conf目录中:

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

配备参数的意思如下:

  • tickTime:以毫秒为单位;用于会话注册,并通过ZooKeeper服务吗客户定期进行心跳。
    最小会话超时是tickTime参数的鲜加倍。
  • dataDir:存储ZooKeeper内存状态的岗位;它包括数据库快照和数据库更新的政工日志。
    提取ZooKeeper目录不见面默认创建是目录,因此一旦系统面临无设有是目录,则要创造该目录并设置可写权限。
  • clientPort:
    监听客户端连接的端口,因此它是ZooKeeper客户端启动连接的职。
    客户端口可以装为随意数字,不同之服务器可以配备为于不同端口上进展监听。
    默认值为2181。

如前所述,ZooKeeper需要一个Java运行时环境才会健康干活。所以,在运转ZooKeeper之前,需要设置1.6本子以上的JDK。

2. 启动ZooKeeper服务

不无ZooKeeper管理脚本启动/停止服务器并调用ZooKeeper命令shell,并存放在bin目录下:

$ pwd
/Users/i324779/zookeeper-3.4.10/bin
$ ls
README.txt  zkCli.cmd   zkEnv.cmd   zkServer.cmd
zkCleanup.sh    zkCli.sh    zkEnv.sh    zkServer.sh

壮大名为.sh的本子适用于Unix平台(GNU /
Linux,macOS等),扩展名为.cmd的台本适用于Microsoft Windows操作系统。

而当GNU /
Linux系统中启动ZooKeeper服务器,需要实践如下的zkServer.sh脚本。
此脚本提供启动,停止,重新起动并查阅ZooKeeper服务器状态的抉择项:

$ ./zkServer.sh
ZooKeeper JMX enabled by default
Using config: /Users/i324779/zookeeper-3.4.10/bin/../conf/zoo.cfg
Usage: ./zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}

执行zkServer.sh并加上start参数将起动ZooKeeper服务器。
服务器的中标启动显示以下输出:

$ ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /Users/i324779/zookeeper-3.4.10/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

如果验证ZooKeeper服务器是否就启动,可以用以下ps命令:

$ ps –ef | grep zookeeper | grep –v grep | awk '{print $2}'
56050

假若你的系及安装了jps命令,则好如下验证ZooKeeper服务器的状态:

ps
56050 QuorumPeerMain
29942 
53078 
56072 Jps

ZooKeeper进程列为QuorumPeerMain
在这种场面下,执行jps命令显示ZooKeeper服务器在运作56050经过标识符,与ps命令语的过程标识相匹配。

得运用zkServer.sh脚本检查ZooKeeper服务器的状态,如下所示:

$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /Users/i32

比方适可而止服务器进程,可以用stop参数的本子:

$ zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /Users/i324779/zookeeper-3.4.10/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

当ZooKeeper停止或非以运转时检查状态将显得以下结果:

$ zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /Users/i324779/zookeeper-3.4.10/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

而我们的ZooKeeper实例运行,接下要召开的饶是连接受她。
ZooKeeper附带默认的基于Java的通令行shell连接受ZooKeeper实例。
还有一个C语言版客户端。

3. 用到基于Java的shell连接受ZooKeeper

若果启动基于Java的ZooKeeper命令行shell,我们只有待使用服务器IP和端口号运行ZK_HOME/bin目录下之zkCli.sh,如下所示:

${ZK_HOME}/bin/zkCli.sh –server zk_server:port

在咱们的事例中,我们在平等台机械及运行ZooKeeper服务器,所以ZooKeeper服务器是localhost,或者IP地址127.0.0.1。
配置的默认端口是2181:

$ zkCli.sh -server localhost:2181

当我们总是至运行的ZooKeeper实例时,将见到与顶中之以下输出接近的输出(部分发生简要):

Connecting to localhost:2181
...............
...............
Welcome to ZooKeeper!
JLine support is enabled
...............
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]

若翻开ZooKeeper Java
shell支持的吩咐列表,可以以shell提示符下运行help命令:

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

俺们可于指令行中执行有简约的指令,运行ls指令,与Unix效果同样:

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

现在,ls命归来一个称作吧zookeeper的字符串,它是ZooKeeper术语中的称之为znode。
我们可以通过ZooKeeper shell创建一个znode,如下所示:

首先,创建一个空数据的HelloWorld的znode:

[zk: localhost:2181(CONNECTED) 2] create /HelloWorld ""
Created /HelloWorld
[zk: localhost:2181(CONNECTED) 3] ls /
[zookeeper, HelloWorld]

好下delete令去创建的znode,如下所示:

[zk: localhost:2181(CONNECTED) 4] delete /HelloWorld
[zk: localhost:2181(CONNECTED) 5] ls /
[zookeeper]

4. 树一个大多节点ZooKeeper集群

暨目前为止,我们曾经在单机(standalone)模式下设置了一个ZooKeeper服务器实例。
单机实例存在潜在的单点故障。
如果ZooKeeper服务器出现故障,则以该实例进行分布式协调的一体应用程序将砸并终止运转。
因此,在骨子里生育环境面临莫引进应用以单机模式运作ZooKeeper,尽管为支付和测试的目的,是好满足要求的。

在生养环境被,ZooKeeper应该因复制模式运作于差不多令服务器上,也号称ZooKeeper集合。
最低推荐的服务器数量是三单,五单凡是养环境受到不过广泛的。
同一应用程序域中的复制服务器组称为quorum。
在此模式下,ZooKeeper服务器实例在多单不等的处理器及运行,quorum中之装有服务器都备相同配置文件之副本。
在quorum中,ZooKeeper实例因领导/跟随者模式运行。
其中一个实例被选呢官员,其他成员则改为追随者。
如果领导者失败,就见面出现新的主管选举,另一个正推行之实例成为领导者。
然而,这些扑朔迷离完全隐形于利用ZooKeeper和开发人员的应用程序中。

用以多节点模式之ZooKeeper配置文件类于我们用来单个实例模式之配备文件,
示例配置文件如下所示:

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:这个参数是早期连接至主管的支持者的超时时间,以毫秒数表示
  • syncLimit:指定追随者与领导同步的晚点时间

即点儿个过是因心跳时间吧单位指定的。
因此,在咱们的以身作则中,initLimit的过时间为2000毫秒为一个心跳平并五次中心跳,或10秒钟。

server.id=host:port:port格式的上述示范中的其余三个条文是做quorum的服务器列表。.id标识符是一个数字,用于所有quorum主机名的服务器。
在咱们的演示配置中,为zoo1仲裁成员主机分配了一个标识符1

亟待在该服务器的数码目录中myid的文件被指定标识符。
重要之是,myid文本应当包含仅包含该服务器ID的文件(ASCII)的单行。
该集中之id必须是唯一的,并且该享有在1届255内的值。

再有,我们当每个服务器主机名后来少数个端口号:2888跟3888,这里解释说明:

  • 端口号2888,主要用以quorum中之当通信,例如将追随者与领导联系起来。一个支持者用这端口打开一个及领导的TCP连接。
  • 端口号3888,用于领导者选举,以防新官员出现于决定中。由于有的通信都生在TCP上,因此需要第二只端口来响应仲裁内部的企业管理者选举。

  • 启动服务实例

在呢quorum中之每个服务器设置配置文件后,我们用启动ZooKeeper服务器实例。
该过程以及单机模式相同。 我们须连续至每个机器并执行以下命令:

${ZK_HOME}/bin/zkServer.sh start

假如实例成功启动,我们在每个机器上实行以下命令来检查实例状态:

${ZK_HOME}/bin/zkServer.sh status

譬如,检查下一个quorum:

[zoo1] # ${ZK_HOME}/bin/zkServer.sh status
JMX enabled by default
Using config: /usr/share/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower
[zoo2] # ${ZK_HOME}/bin/zkServer.sh status
JMX enabled by default
Using config: /usr/share/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: leader
[zoo3] # ${ZK_HOME}/bin/zkServer.sh status
JMX enabled by default
Using config: /usr/share/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower

若是前的例证所示,zoo2是quorum的领导者,而zoo1和zoo3凡是维护者。
通过命令行shell连接受ZooKeeper的quorum与单机模式相同,除了以${ZK_HOME}/bin/zkCli.sh命中指定host1:port2, host2:port2 …格式的连续字符串作为服务器的参数:

$ zkCli.sh -server zoo1:2181,zoo2:2181,zoo3:2181
Connecting to zoo1:2181, zoo2:2181, zoo3:2181
… … … …
Welcome to ZooKeeper!
… … … …
[zk: zoo1:2181,zoo2:2181,zoo3:2181 (CONNECTED) 0]

而ZooKeeper集群启动并运行,就足以应用Java管理扩张(JMX)和经客户端口发送一些下令来监督她。

6. ZooKeeper运行多只节点模式

否足以在单台机器上为多节点模式运作ZooKeeper。 这对测试目的非常有因此。
要以一如既往台机械及运行多节点模式,我们需要调一下布局;例如,我们好拿服务器名称设置为localhost,并指定唯一的quorum和主任选举端口。

咱下以下配置文件,使用单台机器设置多节点ZooKeeper集群:

tickTime=2000
initLimit=5
syncLimit=2
dataDir=/var/lib/zookeeper
clientPort=2181
server.1=localhost:2666:3666
server.2=localhost:2667:3667
server.3=localhost:2668:3668

若达到同一节所陈述,服务器『X』的每个条目都指定『X』
ZooKeeper服务器使用的地址与端口号。
第一只字段是服务器『X』的主机名或IP地址。第二个与老三单字段分别是用来quorum通信及领导者选举的TCP端口号。
当我们于同样台机器上启动三个ZooKeeper服务器实例时,我们需要吗每个服务器条目下不同之端口号。

副,当我们以一如既往台机器上运行多只ZooKeeper服务器进程时,需要呢每个实例提供不同的客户端口。

再有,还要吗每个在运转的实例自定义dataDir参数。

拿具备这些参数放在一块儿,对于三个实例ZooKeeper集群,创建三单例外之部署文件。
将这些zoo1.cfg,zoo2.cfg同zoo3.cfg调用并保存在${ZK_HOME}的conf目录中。
/var/lib/zookeeper遭遇的实例(例如zoo1,zoo2和zoo3)创建三只不等之多少目录。
下面显示三独布局文件。

以下是率先单实例的部署文件:

tickTime=2000
initLimit=5
syncLimit=2
dataDir=/var/lib/zookeeper/zoo1
clientPort=2181
server.1=localhost:2666:3666
server.2=localhost:2667:3667
server.3=localhost:2668:3668

老二只实例的布置文件:

tickTime=2000
initLimit=5
syncLimit=2
dataDir=/var/lib/zookeeper/zoo2
clientPort=2182
server.1=localhost:2666:3666
server.2=localhost:2667:3667
server.3=localhost:2668:3668

其三个也是最终一个布置文件:

tickTime=2000
initLimit=5
syncLimit=2
dataDir=/var/lib/zookeeper/zoo3
clientPort=2183
server.1=localhost:2666:3666
server.2=localhost:2667:3667
server.3=localhost:2668:3668

尚待以每个实例的myid文件被修复正确的劳务ID参数。
可以使用以下三单指令就:

$ echo 1 > /var/lib/zookeeper/zoo1/myid
$ echo 2 > /var/lib/zookeeper/zoo2/myid
$ echo 3 > /var/lib/zookeeper/zoo3/myid

如今,都安为启动ZooKeeper实例。 并开始运行以下实例:

$ ${ZK_HOME}/bin/zkServer.sh start ${ZK_HOME}/conf/zoo1.cfg
$ ${ZK_HOME}/bin/zkServer.sh start ${ZK_HOME}/conf/zoo2.cfg
$ ${ZK_HOME}/bin/zkServer.sh start ${ZK_HOME}/conf/zoo3.cfg

倘若拥有的实例启动成功,我们可以行使zkCli.sh脚本连接到差不多节点ZooKeeper集群,就如咱前所做的那样:
$ ${ZK_HOME}/bin/zkCli.sh –server \ localhost:2181, localhost:2182, localhost:2183
今天,我们发矣运行于同样台机器上的老三个节点ZooKeeper集群!

相关文章