Updated on 5月 7, 2017
Zookeeper运维管理
上一篇 http://www.dczou.com/viemall/446.html 介绍了Zookeeper的基本概念,这章将简述Zookeeper是怎么部署使用,
个人CSDN : http://blog.csdn.net/tang06211015/article/details/51843172
本章章节:
Window下Zookeeper的安装
Zookeeper 伪分布式的安装
Zookeeper 分布式的安装
Zookeeper 基本操作命令
Window下Zookeeper的安装:
本文介绍的 Zookeeper 是以 3.4.8 这个稳定版本为基础,最新的版本可以通过官网 http://hadoop.apache.org/zookeeper/来获取,Zookeeper 的安装非常简单,下面将从单机模式和集群模式两个方面介绍 Zookeeper 的Windows安装和配置.
首先需要安装JdK,从Oracle的Java网站下载,安装很简单,下面Linux会详述。
单机模式:
单机安装非常简单,只要获取到 Zookeeper 的压缩包并解压到某个目录如: E:\web-server\Zookeeper\zookeeper-3.4.8 下,Zookeeper 的启动脚本在 bin 目录下,Windows 下的启动脚本是 zkServer.cmd。
在你执行启动脚本之前,还有几个基本的配置项需要配置一下,Zookeeper 的配置文件在 conf 目录下,这个目录下有 zoo_sample.cfg 和 log4j.properties,你需要做的就是将 zoo_sample.cfg 改名为 zoo.cfg,因为 Zookeeper 在启动时会找这个文件作为默认配置文件。下面会详细介绍一下配置文件中各个配置项的意义。当这些配置项配置好后,你现在就可以启动 Zookeeper 了,启动后要查 Zookeeper 是否已经在服务,可以通过 netstat – ano 命令查看是否有你配置的 clientPort 端口号在监听服务。
通过 zkCli.cmd就可以进行Zookeeper的管理, 这里介绍一个管理工具: <<ZooInspector>>;
伪集群模式:
所谓 “伪分布式集群” 就是在,在一台PC中,启动多个ZooKeeper的实例。“完全分布式集群” 是每台PC,启动一个ZooKeeper实例,只是单纯的IP地址信息的改变,伪分布式的IP只是本机IP; Zookeeper 的集群模式的安装和配置也不是很复杂,所要做的就是增加几个配置项。
主要配置的选项:
-
tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
-
dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
-
dataLogDir:顾名思义就是 Zookeeper 保存日志文件的目录
-
clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
-
dataDir:数据文件目录 Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。
-
dataLogDir:Zookeeper保存日志文件的目录。
-
集群模式除了上面的三个配置项还要增加下面几个配置项:
# ****************************** 集群配置*****************************************************************#
# 服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口)
server.1=192.168.1.125:2888:3888
server.2=192.168.1.125:2889:3889
server.3=192.168.1.125:2890:3890
-
集群模式
集群模式跟上述的伪分布式模式的配置雷同
Linux Zookeeper配置:
Linux下的伪分布安装
第一步:下载JDK并准备工作
第二步:下载并配置Zookeeper
本次安装实例假设启动3个ZooKeeper的实例。
创建环境目录
~ mkdir /home/server/zookeeper/zk1
~ mkdir /home/server/zookeeper/zk2
~ mkdir /home/server/zookeeper/zk3
#新建myid文件
~ echo "1" > /home/server/zookeeper/zk1/myid
~ echo "2" > /home/server/zookeeper/zk2/myid
~ echo "3" > /home/server/zookeeper/zk3/myid
拷贝配置文件,
生成三个配置文件:zoo-1.cfg: (另外两个zoo-2.cfg 和zoo-3.cfg)。zoo-slave1.cfg需要为dataDir和dataLogDir设置目录,
如下:
~ vi /home/server/zookeeper3.4.8/conf/zoo-1.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/server/zookeeper/zk1
clientPort=2181
server.1=192.168.1.125:2888:3888
server.2=192.168.1.125:2889:3889
server.3=192.168.1.125:2890:3890
~ vi /home/server/zookeeper3.4.8/conf/zoo-2.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/server/zookeeper/zk2
clientPort=2182
server.1=192.168.1.125:2888:3888
server.2=192.168.1.125:2889:3889
server.3=192.168.1.125:2890:3890
~ vi /home/server/zookeeper3.4.8/conf/zoo-3.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/server/zookeeper/zk3
clientPort=2182
server.1=192.168.1.125:2888:3888
server.2=192.168.1.125:2889:3889
server.3=192.168.1.125:2890:3890
3个节点的ZooKeeper集群配置完成,接下来我们的启动服务。
启动集群
~ /home/server/zookeeper3.4.8/bin/zkServer.sh start zoo-1.cfg
~ /home/server/zookeeper3.4.8/bin/zkServer.sh start zoo-2.cfg
~ /home/server/zookeeper3.4.8/bin/zkServer.sh start zoo-3.cfg
~ jps
5422 QuorumPeerMain
5395 QuorumPeerMain
5463 QuorumPeerMain
5494 Jps
#查看节点状态
~ /home/server/zookeeper3.4.8/bin/zkServer.sh status zoo-1.cfg
Using config: /home/server/zookeeper3.4.8/bin/bin/../conf/ zoo-1.cfg
Mode: follower
~ /home/server/zookeeper3.4.8/bin/zkServer.sh status zk2.cfg
JMX enabled by default
Using config: /home/server/zookeeper3.4.8/bin/../conf/ zoo-2.cfg
Mode: leader
~ /home/server/zookeeper3.4.8/bin/zkServer.sh status zk3.cfg
JMX enabled by default
Using config: /home/server/zookeeper3.4.8/bin/../conf/ zoo-3.cfg
Mode: follower
我们可以看到zk2是leader,zk1和zk3是follower
查看ZooKeeper物理文件目录结构
~ tree -L 3 /home/server/zookeeper
/home/server/zookeeper
├── zk0
├── zk1
│ ├── myid
│ ├── version-2
│ │ ├── acceptedEpoch
│ │ ├── currentEpoch
│ │ ├── log.100000001
│ │ └── snapshot.0
│ └── zookeeper_server.pid
├── zk2
│ ├── myid
│ ├── version-2
│ │ ├── acceptedEpoch
│ │ ├── currentEpoch
│ │ ├── log.100000001
│ │ └── snapshot.0
│ └── zookeeper_server.pid
└── zk3
├── myid
├── version-2
│ ├── acceptedEpoch
│ ├── currentEpoch
│ ├── log.100000001
│ └── snapshot.100000000
└── zookeeper_server.pid
4. zookeeper命令行操作
常用命令
4.1. 启动ZK服务: bin/zkServer.sh start
4.2. 查看ZK服务状态: bin/zkServer.sh status
4.3 停止ZK服务: bin/zkServer.sh stop
4.4. 重启ZK服务: bin/zkServer.sh restart
4.5 连接服务器 zkCli.sh -server 127.0.0.1:2181
4.6 查看根目录 ls /
4.7 创建 testnode节点,关联字符串"zz" create /zk/testnode "zz"
4.8 查看节点内容 get /zk/testnode
4.9 设置节点内容 set /zk/testnode abc
4.0 删除节点 delete /zk/testnode
我们通过客户端连接ZooKeeper的集群,我们可以任意的zookeeper是进行连接。
~ /home/server/zookeeper3.4.8/bin/zkCli.sh -server 192.168.1.201:2181
#ls,查看/目录内容
[zk: 192.168.1.125(CONNECTED) 1] ls /
[zookeeper]
#create,创建一个znode节点
[zk: 192.168.1.125(CONNECTED) 2] create /node conan
Created /node
#ls,再查看/目录
[zk: 192.168.1.201(CONNECTED) 3] ls /
[node, zookeeper]
#get,查看/node的数据信息
[zk: 192.168.1.125(CONNECTED) 4] get /node
conan
cZxid = 0x100000006
ctime = Mon Aug 12 05:32:49 CST 2013
mZxid = 0x100000006
mtime = Mon Aug 12 05:32:49 CST 2013
pZxid = 0x100000006
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
#set,修改数据
[zk: 192.168.1.125(CONNECTED) 5] set /node fens.me
cZxid = 0x100000006
ctime = Mon Aug 12 05:32:49 CST 2013
mZxid = 0x100000007
mtime = Mon Aug 12 05:34:32 CST 2013
pZxid = 0x100000006
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0
#get,再查看/node的数据信息,已改为fens.me
[zk: 192.168.1.125(CONNECTED) 6] get /node
fens.me
cZxid = 0x100000006
ctime = Mon Aug 12 05:32:49 CST 2013
mZxid = 0x100000007
mtime = Mon Aug 12 05:34:32 CST 2013
pZxid = 0x100000006
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0
#delete,删除/node
[zk: 192.168.1.125(CONNECTED) 7] delete /node
[zk: 192.168.1.125(CONNECTED) 8] ls /
[zookeeper]
#quit,退出客户端连接
[zk: 192.168.1.125(CONNECTED) 19] quit
Quitting...
2013-08-12 05:40:29,304 [myid:] - INFO [main:ZooKeeper@684] - Session: 0x1406f3c1ef90002 closed
2013-08-12 05:40:29,305 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@509] - EventThread shut down
5. Java编程现实命令行操作
基础的Zookeeper客户端API实例,实现的方式有Zookeeper API、zkclient API、curatorAPI 实例练习