【Linux】安装【zookeeper】
Linux:CentOS 7.3
zookeeper:3.5.3
zookeeper是java编写的,运行在java环境下,所以Linux系统中需要安装JDK1.6以上版本,本测试环境JDK版本为1.8,JDK安装步骤,参见:http://www.xxf-home.net/archives/856
本测试搭建的是三节点的集群,三个节点分别如下:
节点1(IP:192.168.10.5 主机名:node1)
节点2(IP:192.168.10.6 主机名:node2)
节点3(IP:192.168.10.7 主机名:node3)
1:下载zookeeper软件
https://zookeeper.apache.org/releases.html
2:上传至Linux指定目录,上传步骤略
1 2 |
[root@node3 soft]# ls |grep zoo zookeeper-3.5.3-beta.tar.gz |
3:将zookeeper解压至安装目录,本测试安装至/usr/local
注:三个节点均做此操作
1 2 3 4 5 6 7 8 9 10 11 12 13 |
## 解tar包,虽然tar包的后缀有gz,但并没有压缩属性,所以解包时用xvf参数即可 [root@node3 soft]# tar xvf zookeeper-3.5.3-beta.tar.gz -C /usr/local/ ...... [root@node3 soft]# cd /usr/local/ [root@node3 local]# ls |grep zookeeper zookeeper-3.5.3-beta [root@node3 local]# [root@node3 local]# cd zookeeper-3.5.3-beta/ [root@node3 zookeeper-3.5.3-beta]# ls bin contrib ivysettings.xml LICENSE.txt README.txt zookeeper-3.5.3-beta.jar zookeeper-3.5.3-beta.jar.sha1 build.xml dist-maven ivy.xml NOTICE.txt recipes zookeeper-3.5.3-beta.jar.asc conf docs lib README_packaging.txt src zookeeper-3.5.3-beta.jar.md5 [root@node3 zookeeper-3.5.3-beta]# |
4:创建相关目录(三个节点全部都创建,以节点2为例)
1 2 3 4 5 6 7 8 9 10 |
[root@node2 ~]# mkdir -p /data/zookeeper/zkdata [root@node2 ~]# mkdir -p /data/zookeeper/zkdatalog [root@node2 ~]# tree /data /data └── zookeeper ├── zkdata └── zkdatalog 3 directories, 0 files [root@node2 ~]# |
5:配置zookeeper(三个节点做同样操作)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
## 以一节点为例 [root@node1 conf]# pwd /usr/local/zookeeper-3.5.3-beta/conf [root@node1 conf]# vi zoo.cfg ## 创建zoo.cfg添加如下内容。当然,也可以拷贝zoo_sample.cfg这个样例的内容进行修改。 ## 之所以命名为zoo.cfg,因为启动zookeeper时,如果不指定配置文件名称,默认会在conf目录下读zoo.cfg这个配置文件 tickTime=2000 dataDir=/data/zookeeper/zkdata dataLogDir=/data/zookeeper/zkdatalog clientPort=2181 initLimit=10 syncLimit=5 server.1=192.168.10.5:2888:3888 server.2=192.168.10.6:2888:3888 server.3=192.168.10.7:2888:3888 maxClientCnxns=5 ## 保存退出 [root@node1 conf]# ## 因为三个节点的配置信息是相同的,所以,将zoo.cfg拷贝至另外两个节点即可。 [root@node1 conf]# scp zoo.cfg node2:/usr/local/zookeeper-3.5.3-beta/conf/. root@node2's password: zoo.cfg 100% 237 0.2KB/s 00:00 [root@node1 conf]# [root@node1 conf]# scp zoo.cfg node3:/usr/local/zookeeper-3.5.3-beta/conf/. root@node3's password: zoo.cfg 100% 237 0.2KB/s 00:00 [root@node1 conf]# |
说明:
- tickTime:时间单位(毫秒),缺省:2000,也就是1 tick
- clientPort:客户端连接zookeeper服务的端口,缺省:2181
- initLimit:初次同步的阶段(leader连接followers)允许的时间数,缺省:10个时间单位(10 tick),如果还是没有连上则认为有follower失联了
- syncLimit:允许followers与ZooKeeper 的心跳时间间隔,缺省:5 tick,超时则认为消息丢失
- dataDir:内存数据的快照数据存放路径,初始时应该为空,myid文件就存放在此
- dataLogDir:顺序日志存放路径,初始时应该为空,如果不设置此目录,则顺序日志存放在dataDir路径下
- server.N=A:B:C 其中N是一个数字,代表这是第几号服务器(这个数字同时也要写在myid中,且不允许重复);A是服务器的IP地址;B表示服务器与群集中的“领导者”交换信息的端口;当领导者失效后,B表示用来执行选举时服务器相互通信的端口。
- maxClientCnxns:一个客户端的连接数限制,默认是60
- minSessionTimeout, maxSessionTimeout :一般情况下客户端连接zookeeper的时候,都会设置一个session timeout,如果超过这个时间client没有与zookeeper server有联系,则这个session会被设置为过期,但是这个时间不是客户端可以无限制设置的,服务器可以设置这两个参数来限制客户端设置的范围
6:创建myid
在dataDir设置的目录下创建一个名字是myid的文件,里面的内容就是zoo.cnf中server.后面的值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
## 第一个节点,192.168.10.5 [root@node1 zkdata]# pwd /data/zookeeper/zkdata [root@node1 zkdata]# echo 1 > myid ## 第二个节点,192.168.10.6 [root@node2 zkdata]# pwd /data/zookeeper/zkdata [root@node2 zkdata]# echo 2 > myid ## 第三个节点,192.168.10.7 [root@node3 zkdata]# pwd /data/zookeeper/zkdata [root@node3 zkdata]# echo 3 > myid |
注:如果不设置myid,那么在启动时,提示启动失败,如下:
1 2 3 4 5 |
[root@node1 zookeeper-3.5.3-beta]# sh bin/zkServer.sh start conf/zoo.cfg ZooKeeper JMX enabled by default Using config: conf/zoo.cfg Starting zookeeper ... FAILED TO START [root@node1 zookeeper-3.5.3-beta]# |
同时在日志中也会报类似如下的错误:
1 2 3 4 |
2017-12-29 21:13:39,714 [myid:] - INFO [main:QuorumPeerConfig@117] - Reading configuration from: conf/zoo.cfg 2017-12-29 21:13:39,718 [myid:] - WARN [main:VerifyingFileFactory@59] - conf/zoo.cfg is relative. Prepend ./ to indicate that you're sure! 2017-12-29 21:13:39,720 [myid:] - INFO [main:QuorumPeerConfig@327] - clientPortAddress is 0.0.0.0/0.0.0.0:2181 2017-12-29 21:13:39,721 [myid:] - INFO [main:QuorumPeerConfig@331] - secureClientPort is not set |
7:各个节点分别启动
1 2 3 4 5 6 7 8 9 |
## 以一节点为例 [root@node1 zookeeper-3.5.3-beta]# pwd /usr/local/zookeeper-3.5.3-beta [root@node1 zookeeper-3.5.3-beta]# ## 采用默认配置文件的方式启动zookeeper [root@node1 zookeeper-3.5.3-beta]# sh bin/zkServer.sh start ## 或者 也可以指定配置文件,如下: [root@node1 zookeeper-3.5.3-beta]# sh bin/zkServer.sh start conf/zoo.cfg |
8:查看状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
## 一节点,我们会发现它是follower [root@node1 zookeeper-3.5.3-beta]# sh bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper-3.5.3-beta/bin/../conf/zoo.cfg Client port found: 2181. Client address: localhost. Mode: follower [root@node1 zookeeper-3.5.3-beta]# ## 二节点:leader [root@node2 zookeeper-3.5.3-beta]# sh bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper-3.5.3-beta/bin/../conf/zoo.cfg Client port found: 2181. Client address: localhost. Mode: leader [root@node2 zookeeper-3.5.3-beta]# ## 三节点:follower [root@node3 zookeeper-3.5.3-beta]# sh bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper-3.5.3-beta/bin/../conf/zoo.cfg Client port found: 2181. Client address: localhost. Mode: follower [root@node3 zookeeper-3.5.3-beta]# |
9:zookeeper服务端常用命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[root@node2 zookeeper-3.5.3-beta]# pwd /usr/local/zookeeper-3.5.3-beta [root@node2 zookeeper-3.5.3-beta]# ## 启动ZK服务: sh bin/zkServer.sh start ## 查看ZK服务状态: sh bin/zkServer.sh status ## 停止ZK服务: sh bin/zkServer.sh stop ## 重启ZK服务: sh bin/zkServer.sh restart |
10:zookeeper客户端常用命令
zookeeper与shell名利有点儿类似,可以对zookeeper进行访问、创建数据、修改等
连接命令,以节点2做为客户端,连接命令行连接节点1:
1 2 3 4 5 6 7 8 9 |
[root@node2 zookeeper-3.5.3-beta]# pwd /usr/local/zookeeper-3.5.3-beta [root@node2 zookeeper-3.5.3-beta]# [root@node2 zookeeper-3.5.3-beta]# sh bin/zkCli.sh -server 192.168.10.5 ...... WATCHER:: WatchedEvent state:SyncConnected type:None path:null [zk: 192.168.10.5(CONNECTED) 0] |
客户端查看帮助信息,随便敲几个字母回车后就会出现帮助,因为就算你敲help,它也不认识:)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
[zk: 192.168.10.5(CONNECTED) 0] help ZooKeeper -server host:port cmd args addauth scheme auth close config [-c] [-w] [-s] connect host:port create [-s] [-e] [-c] [-t ttl] path [data] [acl] delete [-v version] path deleteall path delquota [-n|-b] path get [-s] [-w] path getAcl [-s] path history listquota path ls [-s] [-w] [-R] path ls2 path [watch] printwatches on|off quit reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*] redo cmdno removewatches path [-c|-d|-a] [-l] rmr path set [-s] [-v version] path data setAcl [-s] [-v version] path acl setquota -n|-b val path stat [-w] path sync path Command not found: Command not found help [zk: 192.168.10.5(CONNECTED) 1] ## 退出 [zk: 192.168.10.5(CONNECTED) 1] quit 2017-12-29 15:38:05,835 [myid:] - INFO [main:ZooKeeper@1326] - Session: 0x100006f5fb70002 closed 2017-12-29 15:38:05,840 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@513] - EventThread shut down for session: 0x100006f5fb70002 [root@node2 zookeeper-3.5.3-beta]# |
11:注意
zookeeper不会主动的清除旧的快照和日志文件,这个是管理员的责任。
可以通过编写shell定期删除N天前的快照数据和日志,也就是dataDir和dataLogDir下的数据