前言
大家好,牧码心今天给大家推荐一篇zookeeper系列(二)—安装,部署和配置说明的文章,在实际工作中有很多应用场景,希望对你有所帮助。内容如下:
- 版本说明
- 安装前准备
- 安装部署
- 配置说明
- 基本命令
版本说明
2019年5月20日发行的3.5.5是3.5分支的第一个稳定版本。此版本被认为是3.4稳定分支的后续版本,可以用于生产。基于3.4它包含以下新功能
- 动态重新配置
- 本地会议
- 新节点类型:容器,TTL
- 原子广播协议的SSL支持
- 删除观察者的能力
- 多线程提交处理器
- 升级到Netty 4.1
- Maven构建
注意:建议的最低JDK版本为1.8
安装前准备
- 环境说明
zookeeper 基于JAVA开发,下载后只要有对应JVM环境即可运行。其默认的端口号是2181运行前得保证其不冲突。 - 下载zookeeper
官方下载地址
安装部署
Zookeeper的安装和配置比较简单,既可以配置成单机模式,伪集群模式和集群模式,下面分别对这三种模式进行说明:
单机模式
单机模式较简单,是指只部署一个zk进程,客户端直接与该zk进程进行通信。 在开发测试环境下,通过来说没有较多的物理资源,因此我们常使用单机模式。当然在单台物理机上也可以部署集群模式,但这会增加单台物理机的资源消耗。故在开发环境中,我们一般使用单机模式。 但是要注意,生产环境下一般不可用单机模式,这是由于无论从系统可靠性还是读写性能,单机模式都不能满足生产的需求。
运行配置
- 下载:wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/current/apache-zookeeper-3.5.5-bin.tar.gz
- 解压到某个目录下,如 /data/zookeeper/;
- 拷贝解压后的conf目录下的zoo_sample.cfg文件,重命名为zoo.cfg;
- 修改默认的配置,配置如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/tmp/data
dataLogDir=/data/zookeeper/tmp/log
clientPort=2181
autopurge.purgeInterval=1
autopurge.snapRetainCount=3
maxClientCnxns=60
- 参数说明:
tickTime: 心跳间隔(毫秒),超过2倍tickTime将会被认为会话超时, 毫秒值.
syncLimit:允许follower与leader数据同步最大时长,它表示tickTime时间倍数;
initLimit:允许follower初始化连接到leader最大时长,它表示tickTime时间倍数 即:initLimit*tickTime
dataDir: 数据目录. 可以是任意目录.
dataLogDir: log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和dataDir相同的设置.
clientPort: 监听client连接的端口号.
maxClientCnxns:单个客户端与zookeeper最大并发连接数;
autopurge.snapRetainCount:保存的数据快照数量,之外的将会被清除;
autopurge.purgeInterval:自动触发清除任务时间间隔,小时为单位。默认为0,表示不自动清除。
至此,单机模式的zookeeper已经配置完毕,下面启动即可,启动server 只需运行脚本:
bin/zkServer.sh start
Server启动之后, 就可以启动client连接server了, 执行脚本:
bin/zkCli.sh -server localhost:2181
伪集群模式
所谓伪集群, 是指在单台机器中启动多个zookeeper进程, 并组成一个集群. 以启动3个zookeeper进程为例.
1、将zookeeper的目录拷贝2份,分别解压到三个目录下,如
/data/zookeeper/zServer1,/data/zookeeper/zServer2,/data/zookeeper/zServer3
2、创建每个目录下的conf/zoo.cfg配置文件,如/data/zookeeper/zServer1/conf/zoo.cfg 内容如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/zServer1/tmp/data
dataLogDir=/data/zookeeper/zServer1/tmp/log
clientPort=2181
server.1=127.0.0.1:2287:3387
server.2=127.0.0.1:2288:3388
server.3=127.0.0.1:2289:3389
其他的/data/zookeeper/zServer2/confzoo.cfg /data/zookeeper/zServer3/confzoo.cfg,与zServer1的相同
注意:因为是在一台机器上模拟集群,所以端口不能重复,这里用21812183,22872289,以及3387~3389相互错开。另外每个zk的instance,都需要设置独立的数据存储目录、日志存储目录,所以dataDir、dataLogDir这二个节点对应的目录,需要手动先创建好。
3、另外还有一个关键的设置,在每个zk server配置文件的dataDir所对应的目录下,必须创建一个名为myid的文件,其中的内容必须与zoo.cfg中server.x 中的x相同,即:
/data/zookeeper/zServer1/data/myid 中的内容为1,对应server.1中的1
/data/zookeeper/zServer2/data/myid 中的内容为2,对应server.2中的2
/data/zookeeper/zServer3/data/myid 中的内容为3,对应server.3中的3
生产环境中,分布式集群部署的步骤与上面基本相同,只不过因为各zk server分布在不同的机器,上述配置文件中的localhost换成各服务器的真实Ip即可。
分布在不同的机器后,不存在端口冲突问题,可以让每个服务器的zk均采用相同的端口,这样管理起来比较方便。
4、启动验证
进入每个zServer的bin/目录下执行 zServer.sh start进行启动,若已启动,请杀掉进程后启动。
启动成功后,执行jps查看进程,或用zServer.sh status查看状态。
集群模式
集群模式与伪集群模式的配置基本相同,由于集群模式是分布在不同的机器上,因此各server的conf/zoo.cfg文件可以完全一样。
下面是一个配置实例:
tickTime=2000
initLimit=5
syncLimit=2
dataDir=/home/zookeeper/data
dataLogDir=/home/zookeeper/logs
clientPort=4180
server.43=hadoop01:2888:3888
server.47=hadoop02:2888:3888
server.48=hadoop03:2888:3888
示例中部署了3台zookeeper server, 分别部署在hadoop01, hadoop02, hadoop03上. 需要注意的是, 各server的dataDir目录下的myid文件中的数字必须不同.hadoop01 server的myid为43, hadoop02 server的myid为47, hadoop03 server的myid为48.
基本命令
zookeeper的基本命令,可以通过help查看,如图所示:
[zk: localhost:2181(CLOSED) 1] help
ZooKeeper -server host:port cmd args
stat path [watch]
set path data [version]
ls path [watch]
delquota [-n|-b] path
ls2 path [watch]
setAcl path acl
setquota -n|-b val path
history
redo cmdno
printwatches on|off
delete path [version]
sync path
listquota path
rmr path
get path [watch]
create [-s] [-e] path data acl
addauth scheme auth
quit
getAcl path
close
connect host:port
命令说明
close:关闭当前会话
connect host:port 重新连接指定Zookeeper服务
create [-s] [-e] [-c] [-t ttl] path [data] [acl]: 创建节点
delete [-v version] path :删除节点,(不能存在子节点);
deleteall path :删除路径及所有子节点
setquota -n|-b val path: 设置节点限额 -n 子节点数 -b 字节数 ;
listquota path: 查看节点限额;
delquota [-n|-b] path :删除节点限额
get [-s] [-w] path: 查看节点数据 -s 包含节点状态 -w 添加监听
getAcl [-s] path:查看节点权限,-s 包含节点状态
ls [-s] [-w] [-R] path 列出子节点 -s状态 -R 递归查看所有子节点 -w 添加监听
printwatches on|off 是否打印监听事件
quit:退出客户端
history:查看执行的历史记录
redo cmdno:重复执行命令,history 中命令编号确定
removewatches path [-c|-d|-a] [-l] :删除指定监听
set [-s] [-v version] path data :设置值
setAcl [-s] [-v version] [-R] path: acl为节点设置ACL权限
stat [-w] path:查看节点状态 -w 添加监听
sync path:强制同步节点
节点数据的增删改查
- 列出子节点 :
ls /
- 创建节点:
create /zk-data "zk data"
- 查看节点 :
get /zk-data
- 创建子节点:
create /zk-data/sex "man"
- 删除节点:
delete /zk-data/sex
- 删除所有节点 包括子节点 :
deleteall /zk-data