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 端口号在监听服务。

 blob.png

    通过 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

  1. 集群模式

     集群模式跟上述的伪分布式模式的配置雷同

 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 实例练习

源码地址:http://git.oschina.net/gz-tony/Zookeeper

发表评论