zookeeper个人基础教程(二)入门篇

本次教程操作系统为:windows 7 64位
参考文章:https://zookeeper.apache.org/doc/current/zookeeperStarted.html
http://blog.csdn.net/zh521zh/article/details/51731818
https://www.cnblogs.com/zlslch/p/8561791.html

基础篇入口
zookeeperApi文档
  1. 下载zookeeper
    要获取ZooKeeper发行版 下载地址: http://mirror.bit.edu.cn/apache/zookeeper/
  2. 设置配置文件
    要启动ZooKeeper,您需要一个配置文件。这是一个示例,在conf / zoo_sample.cfg中创建它:(这里需要改成zoo.cfg,为什么需要改可以参考后面的错误日志信息,下文中有提到)
tickTime=2000
dataDir= D:\\zookeeper\\lib
clientPort=2181

zookeeper个人基础教程(二)入门篇_第1张图片
这个文件可以被称为任何东西,但为了这个讨论,请将其命名为conf / zoo.cfg。更改dataDir的值以指定现有(从空开始)目录。以下是每个字段的含义:

  • tickTime:ZooKeeper使用的基本时间单位(以毫秒为单位)。它用于做心跳,最小会话超时将是tickTime的两倍。

  • dataDir:存储内存数据库快照的位置,除非另有说明,否则为数据库更新的事务日志。

  • clientPort:侦听客户端连接的端口

现在您已创建配置文件,您可以启动ZooKeeper:

bin/zkServer.sh start

直接使用cmd执行该命令(windows 推荐使用bin目录下的zkServer.cmd 以管理员身份运行
zookeeper个人基础教程(二)入门篇_第2张图片
但是通过查看日志信息发现似乎没有启动成功(日志信息文件存放在根目录的log目录内)
zookeeper个人基础教程(二)入门篇_第3张图片
zookeeper个人基础教程(二)入门篇_第4张图片
现在我们把zoo_sample.cfg改成zoo.cfg再试试

2019-08-05 10:47:25,054 [myid:] - INFO  [main:QuorumPeerConfig@133] - Reading configuration from: D:\zookeeper\apache-zookeeper-3.5.5-bin\conf\zoo.cfg
2019-08-05 10:47:25,060 [myid:] - WARN  [main:VerifyingFileFactory@59] - D:zookeeperlib is relative. Prepend .\ to indicate that you're sure!
2019-08-05 10:47:25,062 [myid:] - INFO  [main:QuorumPeerConfig@385] - clientPortAddress is 0.0.0.0/0.0.0.0:2181
2019-08-05 10:47:25,063 [myid:] - INFO  [main:QuorumPeerConfig@389] - secureClientPort is not set
2019-08-05 10:47:25,088 [myid:] - INFO  [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3
2019-08-05 10:47:25,088 [myid:] - INFO  [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 0
2019-08-05 10:47:25,089 [myid:] - INFO  [main:DatadirCleanupManager@101] - Purge task is not scheduled.
2019-08-05 10:47:25,089 [myid:] - WARN  [main:QuorumPeerMain@125] - Either no config or no quorum defined in config, running  in standalone mode
2019-08-05 10:47:25,090 [myid:] - INFO  [main:ManagedUtil@46] - Log4j found with jmx enabled.
2019-08-05 10:47:25,156 [myid:] - INFO  [main:QuorumPeerConfig@133] - Reading configuration from: D:\zookeeper\apache-zookeeper-3.5.5-bin\conf\zoo.cfg
2019-08-05 10:47:25,157 [myid:] - WARN  [main:VerifyingFileFactory@59] - D:zookeeperlib is relative. Prepend .\ to indicate that you're sure!
2019-08-05 10:47:25,157 [myid:] - INFO  [main:QuorumPeerConfig@385] - clientPortAddress is 0.0.0.0/0.0.0.0:2181
2019-08-05 10:47:25,157 [myid:] - INFO  [main:QuorumPeerConfig@389] - secureClientPort is not set
2019-08-05 10:47:25,157 [myid:] - INFO  [main:ZooKeeperServerMain@117] - Starting server
2019-08-05 10:47:25,223 [myid:] - INFO  [main:Environment@109] - Server environment:zookeeper.version=3.5.5-390fe37ea45dee01bf87dc1c042b5e3dcce88653, built on 05/03/2019 12:07 GMT
2019-08-05 10:47:25,224 [myid:] - INFO  [main:Environment@109] - Server environment:host.name=CL-20026.clps.com.cn
2019-08-05 10:47:25,225 [myid:] - INFO  [main:Environment@109] - Server environment:java.version=1.8.0_131
2019-08-05 10:47:25,225 [myid:] - INFO  [main:Environment@109] - Server environment:java.vendor=Oracle Corporation
2019-08-05 10:47:25,225 [myid:] - INFO  [main:Environment@109] - Server environment:java.home=C:\Program Files\Java\jdk1.8.0_131\jre
2019-08-05 10:47:25,226 [myid:] - INFO  [main:Environment@109] - Server environment:java.class.path=D:\zookeeper\apache-zookeeper-3.5.5-bin\zookeeper-server\target\classes;D:\zookeeper\apache-zookeeper-3.5.5-bin\build\classes;D:\zookeeper\apache-zookeeper-3.5.5-bin\zookeeper-server\target\lib\*.jar;D:\zookeeper\apache-zookeeper-3.5.5-bin\build\lib\*.jar;D:\zookeeper\apache-zookeeper-3.5.5-bin\lib\zookeeper-jute-3.5.5.jar;D:\zookeeper\apache-zookeeper-3.5.5-bin\lib\zookeeper-3.5.5.jar;D:\zookeeper\apache-zookeeper-3.5.5-bin\lib\slf4j-log4j12-1.7.25.jar;D:\zookeeper\apache-zookeeper-3.5.5-bin\lib\slf4j-api-1.7.25.jar;D:\zookeeper\apache-zookeeper-3.5.5-bin\lib\netty-all-4.1.29.Final.jar;D:\zookeeper\apache-zookeeper-3.5.5-bin\lib\log4j-1.2.17.jar;D:\zookeeper\apache-zookeeper-3.5.5-bin\lib\json-simple-1.1.1.jar;D:\zookeeper\apache-zookeeper-3.5.5-bin\lib\jline-2.11.jar;D:\zookeeper\apache-zookeeper-3.5.5-bin\lib\jetty-util-9.4.17.v20190418.jar;D:\zookeeper\apache-zookeeper-3.5.5-bin\lib\jetty-servlet-9.4.17.v20190418.jar;D:\zookeeper\apache-zookeeper-3.5.5-bin\lib\jetty-server-9.4.17.v20190418.jar;D:\zookeeper\apache-zookeeper-3.5.5-bin\lib\jetty-security-9.4.17.v20190418.jar;D:\zookeeper\apache-zookeeper-3.5.5-bin\lib\jetty-io-9.4.17.v20190418.jar;D:\zookeeper\apache-zookeeper-3.5.5-bin\lib\jetty-http-9.4.17.v20190418.jar;D:\zookeeper\apache-zookeeper-3.5.5-bin\lib\javax.servlet-api-3.1.0.jar;D:\zookeeper\apache-zookeeper-3.5.5-bin\lib\jackson-databind-2.9.8.jar;D:\zookeeper\apache-zookeeper-3.5.5-bin\lib\jackson-core-2.9.8.jar;D:\zookeeper\apache-zookeeper-3.5.5-bin\lib\jackson-annotations-2.9.0.jar;D:\zookeeper\apache-zookeeper-3.5.5-bin\lib\commons-cli-1.2.jar;D:\zookeeper\apache-zookeeper-3.5.5-bin\lib\audience-annotations-0.5.0.jar;D:\zookeeper\apache-zookeeper-3.5.5-bin\zookeeper-*.jar;D:\zookeeper\apache-zookeeper-3.5.5-bin\zookeeper-server\src\main\resources\lib\*.jar;D:\zookeeper\apache-zookeeper-3.5.5-bin\conf;C;D:\Program Files\Java\jdk1.8.0_131lib\dt.jar;C;D:\Program Files\Java\jdk1.8.0_131\lib\tools.jar
2019-08-05 10:47:25,226 [myid:] - INFO  [main:Environment@109] - Server environment:java.library.path=C:\Program Files\Java\jdk1.8.0_131\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Users\Administrator\bin;D:\Program Files\Git\mingw64\bin;D:\Program Files\Git\usr\local\bin;D:\Program Files\Git\usr\bin;D:\Program Files\Git\usr\bin;D:\Program Files\Git\mingw64\bin;D:\Program Files\Git\usr\bin;C:\Users\Administrator\bin;C:\Program Files\VanDyke Software\Clients;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Program Files\Java\jdk1.8.0_131\bin;D:\Program Files\apache-tomcat-7.0.68\lib;D:\Program Files\apache-tomcat-7.0.68\bin;C:\Program Files\MySQL\MySQL Server 5.5\bin;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x86;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x64;D:\Maven\apache-maven-3.5.0\bin;D:\Program Files\Git\cmd;D:\Program Files\Git\usr\bin\vendor_perl;D:\Program Files\Git\usr\bin\core_perl;.
2019-08-05 10:47:25,226 [myid:] - INFO  [main:Environment@109] - Server environment:java.io.tmpdir=C:\Users\ADMINI~1\AppData\Local\Temp\
2019-08-05 10:47:25,226 [myid:] - INFO  [main:Environment@109] - Server environment:java.compiler=
2019-08-05 10:47:25,227 [myid:] - INFO  [main:Environment@109] - Server environment:os.name=Windows 7
2019-08-05 10:47:25,227 [myid:] - INFO  [main:Environment@109] - Server environment:os.arch=amd64
2019-08-05 10:47:25,227 [myid:] - INFO  [main:Environment@109] - Server environment:os.version=6.1
2019-08-05 10:47:25,227 [myid:] - INFO  [main:Environment@109] - Server environment:user.name=Administrator
2019-08-05 10:47:25,227 [myid:] - INFO  [main:Environment@109] - Server environment:user.home=C:\Users\Administrator
2019-08-05 10:47:25,227 [myid:] - INFO  [main:Environment@109] - Server environment:user.dir=D:\zookeeper\apache-zookeeper-3.5.5-bin\bin
2019-08-05 10:47:25,228 [myid:] - INFO  [main:Environment@109] - Server environment:os.memory.free=112MB
2019-08-05 10:47:25,228 [myid:] - INFO  [main:Environment@109] - Server environment:os.memory.max=889MB
2019-08-05 10:47:25,228 [myid:] - INFO  [main:Environment@109] - Server environment:os.memory.total=123MB
2019-08-05 10:47:25,230 [myid:] - INFO  [main:ZooKeeperServer@938] - minSessionTimeout set to 4000
2019-08-05 10:47:25,230 [myid:] - INFO  [main:ZooKeeperServer@947] - maxSessionTimeout set to 40000
2019-08-05 10:47:25,231 [myid:] - INFO  [main:ZooKeeperServer@166] - Created server with tickTime 2000 minSessionTimeout 4000 maxSessionTimeout 40000 datadir D:zookeeperlib\version-2 snapdir D:zookeeperlib\version-2
2019-08-05 10:47:25,342 [myid:] - INFO  [main:Log@193] - Logging initialized @912ms to org.eclipse.jetty.util.log.Slf4jLog
2019-08-05 10:47:25,658 [myid:] - WARN  [main:ContextHandler@1588] - o.e.j.s.ServletContextHandler@4566e5bd{/,null,UNAVAILABLE} contextPath ends with /*
2019-08-05 10:47:25,659 [myid:] - WARN  [main:ContextHandler@1599] - Empty contextPath
2019-08-05 10:47:25,681 [myid:] - INFO  [main:Server@370] - jetty-9.4.17.v20190418; built: 2019-04-18T19:45:35.259Z; git: aa1c656c315c011c01e7b21aabb04066635b9f67; jvm 1.8.0_131-b11
2019-08-05 10:47:25,771 [myid:] - INFO  [main:DefaultSessionIdManager@365] - DefaultSessionIdManager workerName=node0
2019-08-05 10:47:25,771 [myid:] - INFO  [main:DefaultSessionIdManager@370] - No SessionScavenger set, using defaults
2019-08-05 10:47:25,773 [myid:] - INFO  [main:HouseKeeper@149] - node0 Scavenging every 660000ms
2019-08-05 10:47:25,786 [myid:] - INFO  [main:ContextHandler@855] - Started o.e.j.s.ServletContextHandler@4566e5bd{/,null,AVAILABLE}
2019-08-05 10:47:25,811 [myid:] - INFO  [main:AbstractConnector@292] - Started ServerConnector@643b1d11{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
2019-08-05 10:47:25,812 [myid:] - INFO  [main:Server@410] - Started @1454ms
2019-08-05 10:47:25,812 [myid:] - INFO  [main:JettyAdminServer@112] - Started AdminServer on address 0.0.0.0, port 8080 and command URL /commands
2019-08-05 10:47:25,823 [myid:] - INFO  [main:ServerCnxnFactory@135] - Using org.apache.zookeeper.server.NIOServerCnxnFactory as server connection factory
2019-08-05 10:47:25,830 [myid:] - INFO  [main:NIOServerCnxnFactory@673] - Configuring NIO connection handler with 10s sessionless connection timeout, 1 selector thread(s), 8 worker threads, and 64 kB direct buffers.
2019-08-05 10:47:25,833 [myid:] - INFO  [main:NIOServerCnxnFactory@686] - binding to port 0.0.0.0/0.0.0.0:2181
2019-08-05 10:47:25,847 [myid:] - INFO  [main:ZKDatabase@117] - zookeeper.snapshotSizeFactor = 0.33
2019-08-05 10:47:25,850 [myid:] - INFO  [main:FileTxnSnapLog@372] - Snapshotting: 0x0 to D:zookeeperlib\version-2\snapshot.0
2019-08-05 10:47:25,856 [myid:] - INFO  [main:FileTxnSnapLog@372] - Snapshotting: 0x0 to D:zookeeperlib\version-2\snapshot.0
2019-08-05 10:47:25,897 [myid:] - INFO  [main:ContainerManager@64] - Using checkIntervalMs=60000 maxPerMinute=10000

通过以上日志输出能看到我们启动成功了
netstat -ano 2181 可以查看zookeeper端口状况

  1. 连接zookeeper
bin/zkCli.sh -server 127.0.0.1:2181

我们使用的是windows所以直接点击zkCli.cmd就可以了
zookeeper个人基础教程(二)入门篇_第5张图片
在shell中,键入help以获取可从客户端执行的命令列表,如:
zookeeper个人基础教程(二)入门篇_第6张图片
从这里,您可以尝试一些简单的命令来感受这个简单的命令行界面。首先,从发出list命令开始,如ls:,产生:

ls /

在这里插入图片描述
接下来,通过运行创建一个新的znode create /zk_test my_data。这将创建一个新的znode并将字符串“my_data”与节点相关联。

create /zk_test my_data

在这里插入图片描述
先找我们在使用ls来查看目录
在这里插入图片描述
请注意,现在我们已创建了zk_test目录。
接下来,通过运行get命令验证数据是否与znode相关联,如下所示:

get /zk_test

在这里插入图片描述
我们可以通过发出set命令来更改与zk_test关联的数据,如下所示:
set /zk_test junk
zookeeper个人基础教程(二)入门篇_第7张图片
注意我们在set之后再get一次发现数据确实改变了

最后,让我们delete通过发出以下节点:

delete /zk_test

在这里插入图片描述
编程到ZooKeeper
ZooKeeper具有Java绑定和C绑定。它们在功能上是等价的。C绑定有两种变体:单线程和多线程。这些仅在消息传递循环的完成方式上有所不同。

运行复制的ZooKeeper
在独立模式下运行ZooKeeper便于评估,开发和测试。但在生产中,您应该以复制模式运行ZooKeeper。同一应用程序中的复制服务器组称为仲裁,在复制模式下,仲裁中的所有服务器都具有相同配置文件的副本。
复制模式所需的conf / zoo.cfg文件类似于独立模式中使用的文件,但有一些差异。这是一个例子:

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

注意
对于复制模式,至少需要三台服务器,强烈建议您使用奇数个服务器。如果您只有两台服务器,那么您处于这样的情况:如果其中一台服务器出现故障,则没有足够的机器来构成多数仲裁。两台服务器本质上不如单一服务器稳定,因为有两个单点故障。

  • tickTime:CS通信心跳数
    Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
    tickTime以毫秒为单位。
    tickTime:该参数用来定义心跳的间隔时间,zookeeper的客户端和服务端之间也有和web开发里类似的session的概念,而zookeeper里最小的session过期时间就是tickTime的两倍。

  • initLimit:LF初始通信时限
    集群中的follower服务器(F)与leader服务器(L)之间 初始连接 时能容忍的最多心跳数(tickTime的数量)。
    此配置表示,允许 follower (相对于 leader 而言的“客户端”)连接 并同步到 leader 的初始化连接时间,它以 tickTime 的倍数来表示。当超过设置倍数的 tickTime 时间,则连接失败。 如果在设定的时间段内,半数以上的跟随者未能完成同步,领导者便会宣布放弃领导地位,进行另一次的领导选举。如果zk集群环境数量确实很大,同步数据的时间会变长,因此这种情况下可以适当调大该参数。默认为10。

  • syncLimit:LF同步通信时限
    集群中的follower服务器(F)与leader服务器(L)之间 请求和应答 之间能容忍的最多心跳数(tickTime的数量)。
    此配置表示, leader 与 follower 之间发送消息,请求 和 应答 时间长度。如果 follower 在设置的时间内不能与leader 进行通信,那么此 follower 将被丢弃。所有关联到这个跟随者的客户端将连接到另外一个跟随着

  • 表单server.X的条目列出构成ZooKeeper服务的服务器。当服务器启动时,它通过在数据目录中查找文件myid来知道它是哪个服务器。该文件包含服务器编号,ASCII格式。

  • 最后,记下每个服务器名称后面的两个端口号:“2888”和“3888”。对等方使用以前的端口连接到其他对等方。这种连接是必要的,以便对等方可以进行通信,例如,就更新的顺序达成一致。更具体地说,ZooKeeper服务器使用此端口将关注者连接到领导者。当新的领导者出现时,跟随者使用此端口打开与领导者的TCP连接。由于默认的领导者选举也使用TCP,我们目前需要另一个端口进行领导者选举。这是服务器条目中的第二个端口。

注意
如果要在一台计算机上测试多个服务器,请将servername指定为localhost,并为该服务器中的每个server.X 指定唯一的仲裁和领导者选举端口(即上例中的2888:3888,2889:3889,2890:3890)配置文件。当然,单独的_dataDir_s和distinct _clientPort_s也是必需的(在上面复制的例子中,在单个localhost上运行,你仍然会有三个配置文件)。

请注意,在一台计算机上设置多台服务器不会产生任何冗余。如果发生导致机器死亡的事情,所有zookeeper服务器都将脱机。完全冗余要求每台服务器都有自己的机器。它必须是完全独立的物理服务器。同一物理主机上的多个虚拟机仍然容易受到该主机的完全故障的影响。

下载的Zookeeper是.cmd的批处理命令运行的,默认没有提供以windows服务的方式运行的方案,需要prunsrv 来作为zookeeper的服务管理。

下载配置zookeeper windows服务配置
http://archive.apache.org/dist/commons/daemon/binaries/windows/
复制prunmgr.exe、prunsrv.exe到ZooKeepe安装路径的bin目录下。注意,如果你的操作系统是64位的,则复制amd64目录下的prunsrv.exe。
zookeeper个人基础教程(二)入门篇_第8张图片
为Zookeeper配置环境变量
添加ZOOKEEPER_SERVICE, ZOOKEEPER_HOME两个环境变量
ZOOKEEPER_SERVICE:服务名称(不要有中文),我这里取的是,命名为zookeeper_service

zookeeper个人基础教程(二)入门篇_第9张图片
ZOOKEEPER_HOME:设置安装跟目录下
zookeeper个人基础教程(二)入门篇_第10张图片
 新建 zkServerStop.cmd 文件,放在bin目录下
 zookeeper个人基础教程(二)入门篇_第11张图片
 内容如下:

@echo off
 setlocal
 TASKLIST /svc | findstr /c:"%ZOOKEEPER_SERVICE%" > %ZOOKEEPER_HOME%\zookeeper_svc.pid
 FOR /F "tokens=2 delims= " %%G IN (%ZOOKEEPER_HOME%\zookeeper_svc.pid) DO (
    @set zkPID=%%G
 )
 taskkill /PID %zkPID% /T /F
 del %ZOOKEEPER_HOME%/zookeeper_svc.pid
 endlocal

新建一个批处理安装文件install.bat,同样放在bin目录下
内容如下

prunsrv.exe "//IS//%ZOOKEEPER_SERVICE%" ^
        --DisplayName="Zookeeper (%ZOOKEEPER_SERVICE%)" ^
        --Description="Zookeeper (%ZOOKEEPER_SERVICE%)" ^
        --Startup=auto --StartMode=exe ^
        --StartPath=%ZOOKEEPER_HOME% ^
        --StartImage=%ZOOKEEPER_HOME%\bin\zkServer.cmd ^
        --StopPath=%ZOOKEEPER_HOME%\ ^
        --StopImage=%ZOOKEEPER_HOME%\bin\zkServerStop.cmd ^
        --StopMode=exe --StopTimeout=5 ^
        --LogPath=%ZOOKEEPER_HOME% --LogPrefix=zookeeper-wrapper ^
        --PidFile=zookeeper.pid --LogLevel=Info --StdOutput=auto --StdError=auto

最后在cmd中以管理员身份运行install.bat
查看: 开始→运行(Windows+R快捷键也能调出运行) 输入:services.msc确定
zookeeper个人基础教程(二)入门篇_第12张图片
 如果你想彻底删除这个服务,则

开始”——“运行”——“regedit”)然后依次打开HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services 右键删除
  zookeeper个人基础教程(二)入门篇_第13张图片
  zookeeper个人基础教程(二)入门篇_第14张图片

你可能感兴趣的:(zookeeper)