Zookeeper 安装及配置(Mac)

Zookeeper 的安装

下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper

首先从官网下载ZooKeeper压缩包,然后解压下载得到的ZooKeeper压缩包,发现有“bin,conf,lib”等目录。“bin目录”中存放有运行脚本;“conf目录”中存放有配置文件;“lib目录”中存放有运行所需要第三方库。

解压文件:

tar zxvf zookeeper-3.4.12.tar.gz

Zookeeper 的配置

默认情况下的“conf”文件夹下“zoo_sample.cfg”文件内容如下

# The number of milliseconds of each tick
tickTime=2000

# The number of ticks that the initial 
# synchronization phase can take
initLimit=10

# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5

# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/tmp/zookeeper

# the port at which the clients will connect
clientPort=2181

# the maximum number of client connections.
# increase this if you need to handle more clients
# maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
# autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

一、单机模式

1、编辑配置文件

在“conf”目录下,新建一个名为“zoo.cfg”的文件(或者将“zoo_sample.cfg”文件复制一份,改名为“zoo.cfg”文件),其中内容如下:

tickTime=2000  
dataDir=/Users/liurenkui/myLibrary/zookeeper-3.4.12/data  (填写自己的data目录)  
dataLogDir=/Users/liurenkui/myLibrary/zookeeper-3.4.12/logs
clientPort=2181

参数说明:

#tickTime: zookeeper中使用的基本时间单位, 毫秒值,服务器和服务器之间或者客户端和服务器之间维持心跳的时间间隔。每个tickTime时间就会发送一个心跳。最小的session过期时间为2倍tickTime.
#dataDir: 存储内存中数据库快照的位置,如果不设置参数,更新事务的日志会被存储到默认位置
#dataLogDir: log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和 dataDir相同的设置.
#clientPort: 监听client连接的端口号.
#minSessionTimeout和maxSessionTimeout:最小会话超时时间和最大会话超时时间,默认情况下minSessionTimeout=2*tickTime;maxSession=20*tickTime
#maxClientCnxns:限制连接的ZooKeeper的客户端数量,并限制并发连接的数量,通过IP来区分不同的客户端。此配置选项可以阻止某些类别的Dos攻击,将他设置为零或忽略不进行设置将会取消对并发连接的限制。
                例如,将maxClientCnxns设置为1,有第二个客户端尝试对ZK进行连接,或者有某些隐式的对客户端的连接操作,将会触发maxClientCnxns的配置

2、运行ZooKeeper Server

执行./bin/zkServer.sh start命令,运行ZooKeeper Server进程,得到如下所示结果,表示后台运行ZooKeeper Server进程成功。

➜  zookeeper-3.4.12 ./bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /Users/liurenkui/myLibrary/zookeeper-3.4.12/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
➜  zookeeper-3.4.12

如果启动有问题,一般是需要先给zk的文件夹赋予可执行权限

➜  zookeeper-3.4.12 sudo chmod a+x *

3、查看服务运行状态

单机状态下为:standalone

➜  zookeeper-3.4.12 ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /Users/liurenkui/myLibrary/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: standalone

注:命令telnet 127.0.0.1 2181连接成功验证 Zookeeper 是否启动成功,

运行命令:./bin/zkCli.sh文件,进入客户端模式

指定服务器的ip和端口:./bin/zkCli/sh -server 127.0.0.1:2181

4、停止服务运行

停止:./bin/zkServer.sh stop

5、非后台运行ZooKeeper Server进程

执行bin/zkServer.sh start-foreground命令,非后台运行ZooKeeper Server进程

6、Zookeeper的启动参数如下

startstart-foregroundstoprestartstatusupgradeprint-cmd

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

二、集群模式

集群模式有两种形式:

1)使用多台机器,在每台机器上运行一个ZooKeeper Server进程;

2)使用一台机器,在该台机器上运行多个ZooKeeper Server进程。

2.1、参数配置

集群模式下,需要配置一些参数,以下是常见的一些参数。

data目录

用于存放进程运行数据。

data目录下的myid文件

用于存储一个数值,用来作为该ZooKeeper Server进程的标识。

监听Client端请求的端口号

监听同ZooKeeper集群内其他Server进程通信请求的端口号

监听ZooKeeper集群内“leader”选举请求的端口号

该端口号用来监听ZooKeeper集群内“leader”选举的请求。注意这个是ZooKeeper集群内“leader”的选举,跟分布式应用程序无关。

参数配置注意事项:

1)同一个ZooKeeper集群内,不同ZooKeeper Server进程的标识需要不一样,即myid文件内的值需要不一样

2)采用上述第2种形式构建ZooKeeper集群,需要注意“目录,端口号”等资源的不可共享性,如果共享会导致ZooKeeper Server进程不能正常运行,比如“data目录,几个监听端口号”都不能被共享

本示例操作配置如下,仅供参考

1、新建“zkCluster”目录,创建3个子目录,分别为:zk1、zk2、zk3

2、在 zk1、zk2、zk3 目录中分别创建一个 data 目录,用于存放数据

3、在 zk1/data、zk2/data、zk3/data 目录中分别创建一个 myid 文件,内容分别为:1、2、3(表示ZooKeeper Server进程的标识分别为1、2、3的意思)

4、将上处单机配置的zookeeper-3.4.12文件夹,分别拷贝到 zk1、zk2、zk3 目录,目录结构大致如下(省去部分干扰项文件和文件夹)

➜  zkCluster tree -L 2
.
├── zk1
│   ├── data
│   │   └── myid
│   └── zookeeper-3.4.12
├── zk2
│   ├── data
│   │   └── myid
│   └── zookeeper-3.4.12
└── zk3
    ├── data
    │   └── myid
    └── zookeeper-3.4.12

5、修改 zk1/zookeeper-3.4.12/conf 目录下 zoo.cfg文件如下

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/Users/liurenkui/myLibrary/zkCluster/zk1/data
clientPort=2181

#集群配置
# server.x中的“x”表示ZooKeeper Server进程的标识
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890

6、修改 zk2/zookeeper-3.4.12/conf 目录下 zoo.cfg文件如下

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/Users/liurenkui/myLibrary/zkCluster/zk2/data
clientPort=2182

#集群配置
# server.x中的“x”表示ZooKeeper Server进程的标识
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890

7、修改 zk3/zookeeper-3.4.12/conf 目录下 zoo.cfg文件如下

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/Users/liurenkui/myLibrary/zkCluster/zk3/data
clientPort=2183

#集群配置
# server.x中的“x”表示ZooKeeper Server进程的标识
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
myid Data目录 Client Server Leader 配置文件
1 /z1/data 2181 2888 3888 z1.cfg
2 /z2/data 2182 2889 3889 z2.cfg
3 /z3/data 2183 2890 3890 z3.cfg

备注

initLimit:zookeeper集群中的包含多台server,其中一台为leader,其余的为follower。initLimit参数配置初始化连接时,follower和leader之间的最长心跳时间,参数设置为5,说明时间限制为5倍 tickTime, 即 5*2000=10000ms=10s,初始化连接时间超过该值,则表示连接失败

syncLimit:该参数配置leader和follower之间发送消息,请求和应答的最大时间长度。参数设置为2,说明时间限制为2倍 tickTime,即4000ms,如果follower在设置时间内无法和leader通信,该follower将会被丢弃

server.A=B:C:D

A:其中 A 是一个数字,表示这个是服务器的编号;
B:是这个服务器的 ip 地址;
C:Leader选举的端口;
D:Zookeeper服务器之间通信端口

2.2 运行集群下的zk服务

分别启动zk1、zk2、zk3的服务

➜  myLibrary ./zkCluster/zk1/zookeeper-3.4.12/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
➜  myLibrary ./zkCluster/zk2/zookeeper-3.4.12/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /Users/liurenkui/myLibrary/zkCluster/zk2/zookeeper-3.4.12/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
➜  myLibrary ./zkCluster/zk3/zookeeper-3.4.12/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /Users/liurenkui/myLibrary/zkCluster/zk3/zookeeper-3.4.12/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

查看运行状态

观察到只有一个leader,多个follower,一旦leader挂掉,会重新选举一个follower作为leader。

➜  myLibrary ./zkCluster/zk1/zookeeper-3.4.12/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: follower
➜  myLibrary ./zkCluster/zk2/zookeeper-3.4.12/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /Users/liurenkui/myLibrary/zkCluster/zk2/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: leader
➜  myLibrary ./zkCluster/zk3/zookeeper-3.4.12/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /Users/liurenkui/myLibrary/zkCluster/zk3/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: follower

2.3 运行ZooKeeper命令行客户端

执行命令

bin/zkCli.sh -server 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183

建立ZooKeeper Client端到ZooKeeper集群的连接会话

➜  myLibrary zkCluster/zk1/zookeeper-3.4.12/bin/zkCli.sh -server 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
Connecting to 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
2018-06-03 23:27:08,584 [myid:] - INFO  [main:Environment@100] - Client environment:zookeeper.version=3.4.12-e5259e437540f349646870ea94dc2658c4e44b3b, built on 03/27/2018 03:55 GMT
2018-06-03 23:27:08,588 [myid:] - INFO  [main:Environment@100] - Client environment:host.name=liurenkuidembp.lan
2018-06-03 23:27:08,588 [myid:] - INFO  [main:Environment@100] - Client environment:java.version=1.8.0_161
2018-06-03 23:27:08,590 [myid:] - INFO  [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
2018-06-03 23:27:08,590 [myid:] - INFO  [main:Environment@100] - Client environment:java.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre
2018-06-03 23:27:08,590 [myid:] - INFO  [main:Environment@100] - Client environment:java.class.path=/Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../build/classes:/Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../build/lib/*.jar:/Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../lib/slf4j-log4j12-1.7.25.jar:/Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../lib/slf4j-api-1.7.25.jar:/Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../lib/netty-3.10.6.Final.jar:/Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../lib/log4j-1.2.17.jar:/Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../lib/jline-0.9.94.jar:/Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../lib/audience-annotations-0.5.0.jar:/Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../zookeeper-3.4.12.jar:/Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../src/java/lib/*.jar:/Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../conf:
2018-06-03 23:27:08,591 [myid:] - INFO  [main:Environment@100] - Client environment:java.library.path=/Users/liurenkui/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
2018-06-03 23:27:08,591 [myid:] - INFO  [main:Environment@100] - Client environment:java.io.tmpdir=/var/folders/z2/zzlwm7bx4yj4sw_rpfc2f3vw0000gn/T/
2018-06-03 23:27:08,591 [myid:] - INFO  [main:Environment@100] - Client environment:java.compiler=<NA>
2018-06-03 23:27:08,591 [myid:] - INFO  [main:Environment@100] - Client environment:os.name=Mac OS X
2018-06-03 23:27:08,591 [myid:] - INFO  [main:Environment@100] - Client environment:os.arch=x86_64
2018-06-03 23:27:08,591 [myid:] - INFO  [main:Environment@100] - Client environment:os.version=10.13.4
2018-06-03 23:27:08,591 [myid:] - INFO  [main:Environment@100] - Client environment:user.name=liurenkui
2018-06-03 23:27:08,591 [myid:] - INFO  [main:Environment@100] - Client environment:user.home=/Users/liurenkui
2018-06-03 23:27:08,591 [myid:] - INFO  [main:Environment@100] - Client environment:user.dir=/Users/liurenkui/myLibrary
2018-06-03 23:27:08,592 [myid:] - INFO  [main:ZooKeeper@441] - Initiating client connection, connectString=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@255316f2
Welcome to ZooKeeper!
2018-06-03 23:27:08,623 [myid:] - INFO  [main-SendThread(127.0.0.1:2183):ClientCnxn$SendThread@1028] - Opening socket connection to server 127.0.0.1/127.0.0.1:2183. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2018-06-03 23:27:08,691 [myid:] - INFO  [main-SendThread(127.0.0.1:2183):ClientCnxn$SendThread@878] - Socket connection established to 127.0.0.1/127.0.0.1:2183, initiating session
2018-06-03 23:27:08,715 [myid:] - INFO  [main-SendThread(127.0.0.1:2183):ClientCnxn$SendThread@1302] - Session establishment complete on server 127.0.0.1/127.0.0.1:2183, sessionid = 0x300059ab6c10000, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183(CONNECTED) 0] 
[zk: 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183(CONNECTED) 0] ls /
[zookeeper]
[zk: 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183(CONNECTED) 1]

相关文章

赞(52) 打赏
未经允许不得转载:优客志 » JAVA开发
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏