折腾了一下zookeeper,Zookeeper是由Apache Handoop的子项目发展而来, ZooKeeper本质上是一个分布式的小文件存储系统,zookeeper仿照了google的chubby,因为google的chubby是不开源的。可以用于分布式系统的文件配置,服务发现,类似的还有Etcd,Etcd可以说是zookeeper的简化版本,类是的服务发现项目还有Consuldoozer。Doozer在国外是比较火的,我们在做项目中, 比较常用的是Etcd,zookeeper和consul三个项目

下载安装

这里写图片描述

官方下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper/,用户可以自行选择一个速度较快的镜像来下载即可。
这里写图片描述

#下载安装包,我下载的是3.4.10版本的
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz

#解压zookeeper,就完成了安装操作
tar -zxvf zookeeper-3.4.10.tar.gz

这里写图片描述

目录结构

  • bin目录
    zk的可执行脚本目录,包括zk服务进程,zk客户端,等脚本。其中,.sh是Linux环境下的脚本,.cmd是Windows环境下的脚本。
  • conf目录
    配置文件目录。zoo_sample.cfg为样例配置文件,需要修改为自己的名称,一般为zoo.cfg。log4j.properties为日志配置文件。
  • lib
    zk依赖的包。
  • contrib目录
    一些用于操作zk的工具包。
  • recipes目录
    zk某些用法的代码示例

这里写图片描述

各个目录下的文件,如下图
这里写图片描述

Zookeeper启动

启动前,需要添加一个zoo.cfg的配置文件,在Windows环境下,直接双击zkServer.cmd即可。在Linux环境下,进入bin目录,执行命令

#启动前,需要添加一个zoo.cfg的配置文件
cp zoo_sample.cfg zoo.cfg

#直接启动
./zkServer.sh start

#启动的时候,查看后台信息
./zkServer.sh start-foreground

#查看zookeeper 运行状态
ps -ef |grep zookeeper

这个启动中,报错了,说zoo.cfg配置文件没有找到的情况
这里写图片描述

正常启动

这里写图片描述

grep: /usr/local/zookeeper/zookeeper-3.4.10/bin/../conf/zoo.cfg: 没有那个文件或目录

配置文件没有,所以导致了启动报错的情况,启动前,需要添加一个zoo.cfg的配置文件

#启动前,需要添加一个zoo.cfg的配置文件
cp zoo_sample.cfg zoo.cfg

这里写图片描述

配置文件说明

需要将conf目录下的,conf目录下提供了配置的样例zoo_sample.cfg,要将zk运行起来,需要将其名称修改为zoo.cfg。

  • tickTime
    • 时长单位为毫秒,为zk使用的基本时间度量单位。例如:
      • 1 、tickTime是客户端与zk服务端的心跳时间
      • 2、 tickTime是客户端会话的超时时间。
      • 3、 tickTime的默认值为2000毫秒,更低的tickTime值可以更快地发现超时问题,但也会导致更高的网络流量(心跳消息)和更高的CPU使用率(会话的跟踪处理)。
  • clientPort
    • zk服务进程监听的TCP端口,默认情况下,服务端会监听2181端口。
  • dataDir
    • 无默认配置,必须配置,用于配置存储快照文件的目录。如果没有配置
  • dataLogDir 那么事务日志也会存储在此目录。
  • initLimit 用来配置客户端初始化,可以接受多少个心跳监测
    • 比如配置的是10 ,10*tickTime (2000默认),默认20s没有连接上集群的配置,就不尝试了,连接失败
  • syncLimit 用来配置Leader和follwer之间,允许多少个请求应答长度
    • 比如默认配置是5、 5*tickTime (2000默认),表示默认10s钟,Leader和Follwer之间如果消息5次没有发送成功就不尝试了
  • server.NUM=IP:port1:port2 (server.1=127.0.0.1:2222:2225)
    • NUM表示本机为第几号服务器;IP为本机ip地址;
    • port1为leader与follower通信端口;
    • port2为参与竞选leader的通信端口
    • 多个实例的端口配置不能重复
#zoo_sample.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
#日志目录
dataLogDir=/xxxx/xx
# 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

#server.NUM=IP:port1:port2  NUM表示本机为第几号服务器;IP为本机ip地址;
#port1为leader与follower通信端口;port2为参与竞选leader的通信端口
#多个实例的端口配置不能重复
server.1=127.0.0.1:2222:2225
server.2=127.0.0.1:3333:3335
server.3=127.0.0.1:4444:4445

登录zookeeper

 ./zkCli.sh -server 127.0.0.1:2181

拒绝连接

由于iptables使用的是2181端口,可能是端口没有开放问问题导致没有连接上

这里写图片描述

解决办法
#添加规则
iptables -I INPUT -p tcp -m tcp --dport 2181 -m state --state NEW,ESTABLISHED -j ACCEPT

#保存
service iptables save 

#重启生效
service iptables restart

#登录成功后,会有提示是zk: xxx connected
 ./zkCli.sh -server 127.0.0.1:2181

这里写图片描述

简单操作

#创建节点
create /test test1

#获取节点数据
get /test

#更新节点
set /test  test2

#删除节点
delete /test

#递归删除数据,将子目录的数据也删除掉
rmr /test 

#查看节点
ls / 


#查看输入过的命令
history

这里写图片描述

具体的api操作,说实话,功能还不少
这里写图片描述

使用ZooKeeper四字命令

zooKeeper 四字命令功能描述
conf输出相关服务配置的详细信息。
cons列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。包括“接受 / 发送”的包数量、会话 id 、操作延迟、最后的操作执行等等信息。
dump列出未经处理的会话和临时节点。
envi输出关于服务环境的详细信息(区别于 conf 命令)。
reqs列出未经处理的请求
ruok测试服务是否处于正确状态。如果确实如此,那么服务返回“imok ”,否则不做任何相应。
stat输出关于性能和连接的客户端的列表。
wchs列出服务器 watch 的详细信息。
wchc通过 session 列出服务器 watch 的详细信息,它的输出是一个与watch 相关的会话的列表。
wchp通过路径列出服务器 watch 的详细信息。它输出一个与 session相关的路径。

使用命令的方法

#查看配置信息
echo conf|en localhost 2181

#查看连接信息
echo cons|en 192.168.1.1 2181

这里写图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐