1、下载
下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz 。
下载好的zookeeper目录如下:
.
├── bin
├── build.xml
├── conf
├── contrib
├── dist-maven
├── docs
├── ivysettings.xml
├── ivy.xml
├── lib
├── LICENSE.txt
├── NOTICE.txt
├── README_packaging.txt
├── README.txt
├── recipes
├── src
├── zookeeper-3.4.10.jar
├── zookeeper-3.4.10.jar.asc
├── zookeeper-3.4.10.jar.md5
└── zookeeper-3.4.10.jar.sha1
ZooKeeper是用Java编写的,运行在Java环境上,因此,在部署zk的机器上需要安装Java运行环境。为了正常运行zk,我们需要JRE1.6或者以上的版本。 对于集群模式下的ZooKeeper部署,3个ZooKeeper服务进程是建议的最小进程数量,而且不同的服务进程建议部署在不同的物理机器上面,以减少机器宕机带来的风险,以实现ZooKeeper集群的高可用。
2、zookeeper安装配置
下载zookeeper的安装包之后, 解压到合适目录. 进入zookeeper目录下的conf子目录, 运行
cp zoo_sample.cfg zoo.cfg
执行写操作
vim zoo.cfg
zoo.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
--------------------------------------------------------------------------------------------------
参数说明:
tickTime: 时长单位为毫秒,为zk使用的基本时间度量单位。例如,1 * tickTime是客户端与zk服务端的心跳时间,2 * tickTime是客户端会话的超时时间。
tickTime的默认值为2000毫秒,更低的tickTime值可以更快地发现超时问题,但也会导致更高的网络流量(心跳消息)和更高的CPU使用率(会话的跟踪处理)。
dataDir: 数据目录. 可以是任意目录,用于配置存储快照文件的目录。
dataLogDir: log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和dataDir相同的设置。
clientPort:zk服务进程监听的TCP端口,默认情况下,服务端会监听2181端口。
单机模式:
这是zookeeper默认的配置方式,如果只是单机模式,则无需别的配置直接运行即可
运行:
cd bin
./zkServer.sh start
Server启动之后, 就可以启动client连接server了, 执行脚本:
./zkCli.sh -server localhost:2181
集群模式配置:
集群模式下, 各server部署在不同的机器上, 因此各server的conf/zoo.cfg文件可以完全一样。
注意
在集群模式下,建议至少部署3个zk进程,或者部署奇数个zk进程。如果只部署2个zk进程,当其中一个zk进程挂掉后,剩下的一个进程并不能构成一个quorum的大多数。因此,部署2个进程甚至比单机模式更不可靠,因为2个进程其中一个不可用的可能性比一个进程不可用的可能性还大。
具体的zoo.cfg配置项如下:
tickTime=2000
dataDir=/tmp/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=192.168.56.101:2888:3888
server.2=192.168.56.102:2888:3888
server.3=192.168.56.103:2888:3888
另外还要在三台机器dataDir目录(/tmp/zookeeper 目录)下,分别生成一个myid文件,其内容分别为1,2,3。然后分别在这三台机器上启动zk进程,这样我们便将zk集群启动了起来。
连接:
./zkCli.sh -server 192.168.56.101:2181,192.168.56.102:2181,192.168.56.103:2181
伪集群模式配置:
伪集群是指在单台机器中启动多个zookeeper进程, 并组成一个集群. 以启动3个zookeeper进程为例,将zookeeper的目录拷贝2份:
├── zookeeper1
├── zookeeper2
└── zookeeper3
具体的每个zoo.cfg配置如下:
tickTime=2000
initLimit=5
syncLimit=2
dataDir=/tmp/zookeeper1
clientPort=2181
server.1=192.168.56.101:2888:3888
server.2=192.168.56.101:2889:3889
server.3=192.168.56.101:2890:3890
需要注意的是clientPort这个端口如果你是在1台机器上部署多个zookeeper,那么每台机器都要不同的clientPort,比如我zookeeper1是2181,zookeeper2是2182,zookeeper3是2183,dataDir和dataLogDir也需要区分下。
dataDir对应目录为/tmp/zookeeper1、/tmp/zookeeper2、/tmp/zookeeper3。
在之前设置的dataDir中新建myid文件,写入一个数字,该数字表示这是第几号server。该数字必须和zoo.cfg文件中的server.id中的id一一对应。
/tmp/zookeeper1/myid文件中写入1, /tmp/zookeeper2/myid文件中写入2, /tmp/zookeeper3/myid文件中写入3。
接着分别进入/opt/zookeeper1/bin,/opt/zookeeper2/bin,/opt/zookeeper3/bin三个目录, 启动server。
任意选择一个server目录, 启动客户端:
[zk: 192.168.56.101:2182(CONNECTED) 0] [root@localhost bin]# /opt/zookeeper1/bin/zkCli.sh -server 192.168.56.101:2181
Connecting to 192.168.56.101:2181
2017-09-28 16:42:27,202 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.10-39d3a4f269333c922ed3db283be479f9deacaa0f, built on 03/23/2017 10:13 GMT
2017-09-28 16:42:27,205 [myid:] - INFO [main:Environment@100] - Client environment:host.name=localhost
2017-09-28 16:42:27,205 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_144
2017-09-28 16:42:27,206 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
2017-09-28 16:42:27,206 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/usr/local/java/jdk1.8.0_144/jre
2017-09-28 16:42:27,206 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/opt/zookeeper1/bin/../build/classes:/opt/zookeeper1/bin/../build/lib/*.jar:/opt/zookeeper1/bin/../lib/slf4j-log4j12-1.6.1.jar:/opt/zookeeper1/bin/../lib/slf4j-api-1.6.1.jar:/opt/zookeeper1/bin/../lib/netty-3.10.5.Final.jar:/opt/zookeeper1/bin/../lib/log4j-1.2.16.jar:/opt/zookeeper1/bin/../lib/jline-0.9.94.jar:/opt/zookeeper1/bin/../zookeeper-3.4.10.jar:/opt/zookeeper1/bin/../src/java/lib/*.jar:/opt/zookeeper1/bin/../conf:.:/usr/local/java/jdk1.8.0_144/lib:/usr/local/java/jdk1.8.0_144/jre/lib
2017-09-28 16:42:27,206 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2017-09-28 16:42:27,207 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2017-09-28 16:42:27,207 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA>
2017-09-28 16:42:27,207 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux
2017-09-28 16:42:27,207 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64
2017-09-28 16:42:27,207 [myid:] - INFO [main:Environment@100] - Client environment:os.version=3.10.0-327.el7.x86_64
2017-09-28 16:42:27,207 [myid:] - INFO [main:Environment@100] - Client environment:user.name=root
2017-09-28 16:42:27,207 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/root
2017-09-28 16:42:27,207 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/opt/zookeeper1/bin
2017-09-28 16:42:27,212 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=192.168.56.101:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@5c29bfd
2017-09-28 16:42:27,240 [myid:] - INFO [main-SendThread(192.168.56.101:2181):ClientCnxn$SendThread@1032] - Opening socket connection to server 192.168.56.101/192.168.56.101:2181. Will not attempt to authenticate using SASL (unknown error)
Welcome to ZooKeeper!
JLine support is enabled
2017-09-28 16:42:27,347 [myid:] - INFO [main-SendThread(192.168.56.101:2181):ClientCnxn$SendThread@876] - Socket connection established to 192.168.56.101/192.168.56.101:2181, initiating session
2017-09-28 16:42:27,381 [myid:] - INFO [main-SendThread(192.168.56.101:2181):ClientCnxn$SendThread@1299] - Session establishment complete on server 192.168.56.101/192.168.56.101:2181, sessionid = 0x15ec7a508240001, negotiated timeout = 30000
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: 192.168.56.101:2181(CONNECTED) 0]