目录
单机安装
JDK
在安装Zookeeper之前首先要确保已经正确安装了JDK,关于JDK的安装就不做描述,只列出在不同环境下JDK的配置。
- Windows:在环境变量中添加${jdk_path}\bin目录
- Linux:在
/etc/profile
文件最后添加如下代码,并保存文件
JAVA_HOME=${jdk_path}
CLASSPATH=.:$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin:
export JAVA_HOME CLASSPATH PATH
Windows
从Zookeeper官网下载最新稳定版本,当前是3.4.9。
解压下载的文件到指定目录,然后在Windows Command下切换到此目录
C:\programs>cd zookeeper-3.4.9
C:\programs\zookeeper-3.4.9>
执行start..
打开文件夹并拷贝zookeeper-3.4.9\conf\zoo_sample.cfg
文件命名为zookeeper-3.4.9\conf\zoo.cfg
,修改其中dataDir
为dataDir=c:/zookeeper
,其中几个参数释义如下
tickTime | zookeeper中使用的基本时间,单位毫秒. |
dataDir | 数据目录. 可以是任意目录. |
dataLogDir | log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和dataDir相同的设置. |
clientPort | 监听client连接的端口号. |
然后在命令行切换到zookeeper-3.4.9\bin
目录下执行zkServer.cmd
命令,启动Windows单机版Zookeeper
C:\programs\zookeeper-3.4.9\bin>zkServer.cmd
C:\programs\zookeeper-3.4.9\bin>call "C:\Program Files (x86)\Java\jdk1.7.0_71"\b
in\java "-Dzookeeper.log.dir=C:\programs\zookeeper-3.4.9\bin\.." "-Dzookeeper.ro
ot.logger=INFO,CONSOLE" -cp "C:\programs\zookeeper-3.4.9\bin\..\build\classes;C:
\programs\zookeeper-3.4.9\bin\..\build\lib\*;C:\programs\zookeeper-3.4.9\bin\..\
*;C:\programs\zookeeper-3.4.9\bin\..\lib\*;C:\programs\zookeeper-3.4.9\bin\..\co
nf" org.apache.zookeeper.server.quorum.QuorumPeerMain "C:\programs\zookeeper-3.4
.9\bin\..\conf\zoo.cfg"
2017-01-06 09:49:16,595 [myid:] - INFO [main:QuorumPeerConfig@124] - Reading co
nfiguration from: C:\programs\zookeeper-3.4.9\bin\..\conf\zoo.cfg
2017-01-06 09:49:16,595 [myid:] - INFO [main:DatadirCleanupManager@78] - autopu
rge.snapRetainCount set to 3
2017-01-06 09:49:16,595 [myid:] - INFO [main:DatadirCleanupManager@79] - autopu
rge.purgeInterval set to 0
2017-01-06 09:49:16,595 [myid:] - INFO [main:DatadirCleanupManager@101] - Purge
task is not scheduled.
2017-01-06 09:49:16,595 [myid:] - WARN [main:QuorumPeerMain@113] - Either no co
nfig or no quorum defined in config, running in standalone mode
2017-01-06 09:49:16,641 [myid:] - INFO [main:QuorumPeerConfig@124] - Reading co
nfiguration from: C:\programs\zookeeper-3.4.9\bin\..\conf\zoo.cfg
2017-01-06 09:49:16,641 [myid:] - INFO [main:ZooKeeperServerMain@96] - Starting
server
2017-01-06 09:49:16,641 [myid:] - INFO [main:Environment@100] - Server environm
ent:zookeeper.version=3.4.9-1757313, built on 08/23/2016 06:50 GMT
2017-01-06 09:49:16,641 [myid:] - INFO [main:Environment@100] - Server environm
ent:host.name=freud-PC
2017-01-06 09:49:16,641 [myid:] - INFO [main:Environment@100] - Server environm
ent:java.version=1.7.0_71
2017-01-06 09:49:16,641 [myid:] - INFO [main:Environment@100] - Server environm
ent:java.vendor=Oracle Corporation
2017-01-06 09:49:16,641 [myid:] - INFO [main:Environment@100] - Server environm
ent:java.home=C:\Program Files (x86)\Java\jdk1.7.0_71\jre
2017-01-06 09:49:16,641 [myid:] - INFO [main:Environment@100] - Server environm
ent:java.class.path=C:\programs\zookeeper-3.4.9\bin\..\build\classes;C:\programs
\zookeeper-3.4.9\bin\..\build\lib\*;C:\programs\zookeeper-3.4.9\bin\..\zookeeper
-3.4.9.jar;C:\programs\zookeeper-3.4.9\bin\..\lib\jline-0.9.94.jar;C:\programs\z
ookeeper-3.4.9\bin\..\lib\log4j-1.2.16.jar;C:\programs\zookeeper-3.4.9\bin\..\li
b\netty-3.10.5.Final.jar;C:\programs\zookeeper-3.4.9\bin\..\lib\slf4j-api-1.6.1.
jar;C:\programs\zookeeper-3.4.9\bin\..\lib\slf4j-log4j12-1.6.1.jar;C:\programs\z
ookeeper-3.4.9\bin\..\conf
2017-01-06 09:49:16,641 [myid:] - INFO [main:Environment@100] - Server environm
ent:java.library.path=C:\Program Files (x86)\Java\jdk1.7.0_71\bin;C:\windows\Sun
\Java\bin;C:\windows\system32;C:\windows;C:\Program Files (x86)\Common Files\Net
Sarang;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Cli
ent\;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32
\WindowsPowerShell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Compo
nents\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Pr
ogram Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Fil
es (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\
nodejs\;C:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\Git\cmd;C:\Progr
am Files (x86)\Git\bin;C:\programs\Tesseract-OCR;C:\Program Files\MongoDB\Server
\3.0\bin;C:\Program Files\PostgreSQL\9.4\bin;C:\Program Files (x86)\Sublime Text
3;C:\Ruby22-x64\bin;C:\Python34;C:\Program Files (x86)\Java\jdk1.7.0_71\bin;C:\
programs\apache-maven-3.3.3\bin;D:\tools\casperjs-master\bin;D:\tools\phantomjs\
phantomjs-1.9.8-windows;C:\programs\apache-ant-1.9.4\bin;C:\programs\axis2-1.6.2
/bin;.
2017-01-06 09:49:16,657 [myid:] - INFO [main:Environment@100] - Server environm
ent:java.io.tmpdir=C:\Users\freud\AppData\Local\Temp\
2017-01-06 09:49:16,657 [myid:] - INFO [main:Environment@100] - Server environm
ent:java.compiler=<NA>
2017-01-06 09:49:16,657 [myid:] - INFO [main:Environment@100] - Server environm
ent:os.name=Windows 7
2017-01-06 09:49:16,657 [myid:] - INFO [main:Environment@100] - Server environm
ent:os.arch=x86
2017-01-06 09:49:16,657 [myid:] - INFO [main:Environment@100] - Server environm
ent:os.version=6.1
2017-01-06 09:49:16,657 [myid:] - INFO [main:Environment@100] - Server environm
ent:user.name=freud
2017-01-06 09:49:16,657 [myid:] - INFO [main:Environment@100] - Server environm
ent:user.home=C:\Users\freud
2017-01-06 09:49:16,657 [myid:] - INFO [main:Environment@100] - Server environm
ent:user.dir=C:\programs\zookeeper-3.4.9\bin
2017-01-06 09:49:16,673 [myid:] - INFO [main:ZooKeeperServer@815] - tickTime se
t to 2000
2017-01-06 09:49:16,673 [myid:] - INFO [main:ZooKeeperServer@824] - minSessionT
imeout set to -1
2017-01-06 09:49:16,673 [myid:] - INFO [main:ZooKeeperServer@833] - maxSessionT
imeout set to -1
2017-01-06 09:49:16,704 [myid:] - INFO [main:NIOServerCnxnFactory@89] - binding
to port 0.0.0.0/0.0.0.0:2181
重新打开一个command并切到zookeeper安装目录的bin目录下,执行zkCli.cmd -server localhost:2181
验证是否正常启动。
Linux
从Zookeeper官网下载最新稳定版本,当前是3.4.9,并解压。
[root@localhost freud]# wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz
[root@localhost freud]# tar -zxvf zookeeper-3.4.9.tar.gz
拷贝zookeeper-3.4.9\conf\zoo_sample.cfg
文件命名为zookeeper-3.4.9\conf\zoo.cfg
然后在命令行切换到zookeeper-3.4.9\bin
目录下,添加脚本命令执行权限,并执行zkServer.sh
命令,启动Linux单机版Zookeeper
[root@localhost freud]# cd zookeeper-3.4.9
[root@localhost zookeeper-3.4.9]# cd conf/
[root@localhost conf]# cp zoo_sample.cfg zoo.cfg
[root@localhost conf]# cd ../bin/
[root@localhost bin]# chmod +x *.sh
[root@localhost bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /root/freud/zookeeper-3.4.9/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@localhost bin]#
执行zkCli.sh -server localhost:2181
验证是否正常启动。
伪集群
伪集群即在单台机器中启动多个zookeeper进程, 并组成一个集群. 以下以Linux下部署三个节点为例。
拷贝三份zookeeper,并按照如下修改对应的conf\zoo.cfg
文件
修改zoo.cfg文件
[root@localhost freud]# mv zookeeper-3.4.9 zookeeper-3.4.9_1
[root@localhost freud]# cp zookeeper-3.4.9_1/ zookeeper-3.4.9_2 -r
[root@localhost freud]# cp zookeeper-3.4.9_1/ zookeeper-3.4.9_3 -r
- vi zookeeper-3.4.9_1/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper/data_1
dataLogDir=/tmp/zookeeper/log_1
clientPort=2181
server.1=localhost:2281:2282
server.2=localhost:2381:2382
server.3=localhost:2481:2482
- vi zookeeper-3.4.9_2/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper/data_2
dataLogDir=/tmp/zookeeper/log_2
clientPort=2182
server.1=localhost:2281:2282
server.2=localhost:2381:2382
server.3=localhost:2481:2482
- vi zookeeper-3.4.9_3/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper/data_3
dataLogDir=/tmp/zookeeper/log_3
clientPort=2183
server.1=localhost:2281:2282
server.2=localhost:2381:2382
server.3=localhost:2481:2482
initLimit | zookeeper集群中的包含多台server, 其中一台为leader, 集群中其余的server为follower. initLimit参数配置初始化连接时, follower和leader之间的最长心跳时间. 此时该参数设置为10, 说明时间限制为10倍tickTime, 即10*2000=20000ms=20s. |
syncLimit | 该参数配置leader和follower之间发送消息, 请求和应答的最大时间长度. 此时该参数设置为5, 说明时间限制为5倍tickTime, 即10000ms=10s. |
server.id=host:portA:portB | 其中id被称为Server ID是一个1-255之间的数字,用来标识该机器在集群中的机器序号,并对应myid中的数字。host是该server所在的IP地址. hostA配置该server和集群中的leader交换消息所使用的端口. hostB配置选举leader时所使用的端口. 由于配置的是伪集群模式, 所以各个server的hostA, hostB参数必须不同. |
创建data
和log
目录
[root@localhost freud]# mkdir /tmp/zookeeper/data_1
[root@localhost freud]# mkdir /tmp/zookeeper/log_1
[root@localhost freud]# mkdir /tmp/zookeeper/data_2
[root@localhost freud]# mkdir /tmp/zookeeper/log_2
[root@localhost freud]# mkdir /tmp/zookeeper/data_3
[root@localhost freud]# mkdir /tmp/zookeeper/log_3
创建myid文件
# 写入1
[root@localhost freud]# vi /tmp/zookeeper/data_1/myid
# 写入2
[root@localhost freud]# vi /tmp/zookeeper/data_2/myid
# 写入3
[root@localhost freud]# vi /tmp/zookeeper/data_3/myid
启动
[root@localhost freud]# cd ~/freud/zookeeper-3.4.9_1/bin/
[root@localhost bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /root/freud/zookeeper-3.4.9_1/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@localhost freud]# cd ~/freud/zookeeper-3.4.9_2/bin/
[root@localhost bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /root/freud/zookeeper-3.4.9_1/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@localhost freud]# cd ~/freud/zookeeper-3.4.9_3/bin/
[root@localhost bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /root/freud/zookeeper-3.4.9_1/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
# jps 发现3个QuorumPeerMain进程代表启动成功
[root@localhost bin]# jps
4488 Jps
4344 QuorumPeerMain
4376 QuorumPeerMain
4442 QuorumPeerMain
验证
为了验证配置安装是否正确,在zookeeper实例1下创建一个目录,然后通过zkCli在另外两个zookeeper实例下看能否查看到。
[root@localhost bin]# ./zkCli.sh -server localhost:2181
[zk: localhost:2181(CONNECTED) 6] create /test helloworld
Created /test
[root@localhost bin]# ./zkCli.sh -server localhost:2182
[zk: localhost:2182(CONNECTED) 0] ls /
[test, zookeeper]
[zk: localhost:2182(CONNECTED) 2] get /test
helloworld
cZxid = 0x200000002
ctime = Fri Jan 06 10:59:07 CST 2017
mZxid = 0x200000002
mtime = Fri Jan 06 10:59:07 CST 2017
pZxid = 0x200000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 10
numChildren = 0
[root@localhost bin]# ./zkCli.sh -server localhost:2183
[zk: localhost:2183(CONNECTED) 0] ls /
[test, zookeeper]
[zk: localhost:2183(CONNECTED) 1] get /test
helloworld
cZxid = 0x200000002
ctime = Fri Jan 06 10:59:07 CST 2017
mZxid = 0x200000002
mtime = Fri Jan 06 10:59:07 CST 2017
pZxid = 0x200000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 10
numChildren = 0
集群
集群的配置与伪集群基本类似,由于集群模式下,各个Zookeeper部署在不同的机器上,所以zoo.cfg可以配置为完全一致。
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
dataLogDir=/tmp/zookeeper
clientPort=2181
server.123=192.168.1.123:2281:2282
server.124=192.168.1.124:2281:2282
server.125=192.168.1.125:2281:2282
需要注意的各Server的dataDir下myid中的内容必须与zoo.cfg中配置的一致,并且不能重复。
本文来自转载,原文链接: