zookeeper简单用法之zookeeper安装部署

一、zookeeper是啥?
ZooKeeper是一个开源的分布式服务框架,它是Apache Hadoop项目的一个子项目,主要用来解决分布式应用场景中存在的一些问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置管理等。
简单点说,正如某位前辈说的zookeeper = 通知机制 + 文件系统。

  • 文件系统 : 这是所说文件系统,其实并非真正的文件系统,它是一种类似于文件系统的层次结构(树开结构),如下图:

  • 通知机制 : 客户端注册监听它关心的目录节点,当目录节点发生变化,如数据改变、被删除、子目录节点增加删除时,zookeeper会通知客户端。 这时客户端就可以根据传过来的信息采取一系列的操作。

二、在Linux上安装zookeeper

注:安装zookeeper请确认是否安装jdk,zookeeper需要先安装zookeeper(为啥要装jdk呢?因为zookeeper就是用java写的啊)

1、下载zookeeper源码

请移步官网:http://zookeeper.apache.org/

  1. wget http://mirror.bit.edu.cn/apache/zookeeper/stable/zookeeper-3.4.10.tar.gz
2、解压zookeeper源码
  1. tar -zxvf zookeeper-3.4.10.tar.gz
  2. mv zookeeper-3.4.10 /usr/local/zookeeper
3、修改配置文件
  1. cd /usr/local/zookeeper/conf
  2. mv zoo_sample.cfg zoo.cfg

注:如果是单机,按默认配置即可,如果是集群,可加入以下配置:

  1. #本机IP设置成0.0.0.0
  2. server.1=0.0.0.0:2888:3888
  3. #集群中另一台主机IP地址
  4. server.2=192.168.0.101:2888:3888
4、zookeeper配置文件参数说明
参数名 参数说明 默认值
clientPort 客户端连接服务端的端口,即对外服务端口 2181
dataDir 存储快照文件snapshot的目录,集群的myid文件也会存放在这个文件夹。默认情况下,事务日志也会存储在这里。建议同时配置参数dataLogDir, 事务日志的写性能直接影响zk性能。
tickTime 心跳检测间隔时间,以毫秒为单位
dataLogDir 事务日志输出目录。尽量给事务日志的输出配置单独的磁盘或是挂载点,这将极大的提升ZK性能
globalOutstandingLimit 客户端请求队列最大长度,为了防止内在溢出 1000
preAllocSize 预先为事务日志分配的空间大小
snapCount 每进行snapCount次事务日志输出后,触发一次快照(snapshot), 此时,ZK会生成一个snapshot.文件,同时创建一个新的事务日志文件log. 100000
traceFile 用于记录请求的log,一般用于Deug,不建议打开
maxClientCnxns 最大并发客户端数
clientPortAddress 可以设置指定的客户端IP和端口
minSessionTimeout 最小的客户端session超时时间(毫秒为单位)
maxSessionTimeout 最大的客户端session超时时间
fsync.warningthresholdms 事务日志输出时,如果调用fsync方法超过指定的超时时间,那么会在日志中输出警告信息
autopurge.snapRetainCount ZK提供了自动清理事务日志和快照文件的功能,这个参数指定了清理频率,单位是小时,需要配置一个1或更大的整数,默认是0,表示不开启自动清理功能
autopurge.purgeInterval 这个参数和上面的参数搭配使用,这个参数指定了需要保留的文件数目  

集群模式的参数:

参数名 参数说明 默认值
electionAlg 用于选举实现的参数,0表示以原始的基于UDP的方式协作;1表示不进行用户验证的基于UDP的方式选举;2表示进行用户验证的基于UDP的试选举;3表示基于TCP的快速选举 3
initLimit 多少个tickTime内,接受其他server连接及初始化数据
leaderServes leader是否接受客户端连接
server.x 配置集群里的主机信息,如server.x=[hostname]:nnnnn[:nnnnn]
syncLimit 在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。如果L发出心跳包在syncLimit之后,还没有从F那里收到响应,那么就认为这个F已经不在线了
group.x 分组信息,表明哪个分组有哪些节点
weight.x 权重信息,表明哪个节点权重多少
cnxTimeout 设置leader选举通知连接的超时时间  

更多参数请参考:http://zookeeper.apache.org/doc/r3.4.10/zookeeperAdmin.html#sc_configuration

三、zookeeper基本操作

zookeeper的操作脚本都在安装目录下面bin目录中,主要使用到以下脚本

  • zkServer.sh:服务端操作脚本(包括zookeeper的启动、关闭等)
  • zkCli.sh: zookeeper客户端操作工具
1、zookeeper启动与关闭
  1. #启动 zookeeper
  2. /usr/local/zookeeper/bin/zkServer.sh start
  3. #停止 zookeeper
  4. /usr/local/zookeeper/bin/zkServer.sh stop
  5. #重启 zookeeper
  6. /usr/local/zookeeper/bin/zkServer.sh restart
2、查看zookeeper状态
  1. /usr/local/zookeeper/bin/zkServer.sh status

输出结果:

  1. ZooKeeper JMX enabled by default
  2. Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
  3. Mode: standalone

注:通过status参数查看的状态,可以查看zookeeper的配置文件位置和启动模式(本例是单机模式)

3、通过自带的客户端连接zookeeper服务器
  1. ./zkCli.sh -server 127.0.0.1:2181
  2. ls /

客户端常用命令

1) ls

使用ls命令,可以列出ZooKeeper指定节点下的所有的子节点,不过只能看到指定节点下第一级所有子节点。用法如下:

ls path [watch]

  • 其中,path表示的是指定数据节点的节点路径,如:
  1. ls /
2) create

使用create命令,可以创建一个ZooKeeper节点。用法如下:

  1. create [-s] [-e] path data acl

其中:

  • -s或-e分别指定节点特性:顺序或临时节点。默认情况下,即不添加-s或-e参数的,创建的是持久节点。data代表节点的数据内容。acl是进行权限控制,缺省情况下,不做任何权限控制。 如:
  1. create /app1 "应用1"
3) get

使用get命令,可以获取ZooKeeper指定节点的数据内容和属性信息。用法如下:

get path [watch]

  1. get /app1
4) set

使用set命令,可以更新指定节点的数据内容。用法如下:

set path data [version]

  1. set /app1 "应用改名"
5) delete

使用delete命令,可以删除ZooKeeper上的指定节点。用法如下:

delete path [version]

  1. delete /app1