最新版zookeeper配置看这一篇就够了

zookeeper

下载

download http://mirror.bit.edu.cn/apache/zookeeper/stable/zookeeper-3.4.12.tar.gz

安装

解压

# tar -zxf zookeeper-3.4.12.tar.gz

移动

# mv zookeeper-3.4.6 /usr/local/zookeeper

配置

#进入zookeeper目录
cd /usr/local/zookeeper/
#新建日志文件夹
$ mkdir -p /var/zookeeper/data  
$ mkdir -p /var/zookeeper/datalogs
$ mkdir -p /var/zookeeper/logs

准备配置文件

$ cd /conf
$ mp zoo_sample.cfg zoo.cfg
$ vi /conf/zoo.cfg

我的配置:

tickTime=2000
dataDir=/var/zookeeper/data
dataLogDir=/var/zookeeper/datalogs
clientPort=2181
autopurge.snapRetainCount=10
autopurge.purgeInterval=48

配置参数的含义:

  • ClientPort:zk服务器监听的端口,客户端通过该端口建立连接,每台zk服务器也允许设置为不同的值。默认配置文件设定的是2181,除非你有什么难言之隐否则不需要修改
  • dataDir:zk用于保存内存数据库的快照的目录,除非设置了dataLogDir,否则这个目录也用来保存更新数据库的事务日志。在生产环境使用的zk集群,强烈建议设置dataLogDir,让dataDir只存放快照,因为写快照的开销很低,这样dataDir就可以和其他日志目录的挂载点放在一起。
  • dataLogDir: zk的事务日志路径
    tickTime:前面已提到过,zk使用的基本时间单位是tick,这个参数用于配置一个tick的长度,单位为毫秒,默认配置文件设定的是3000,除非你有什么难言之隐否则不需要修改
  • autopurge.snapRetainCount:3.4.0及之后版本zk提供了自动清理快照文件和事务日志文件的功能,该参数指定了保留文件的个数,默认为3,这里我设置为10.
  • autopurge.purgeInterval:和上一个参数配合使用,设置自动清理的频率,单位为小时,默认为0表示不清理,建议设为6或12之类的值。这里我设置了48,意思是48小时自动清理一次。

其他高级设置:

配置日志

关于zookeeper的日志:

zookeeper有三种日志:快照日志,事务日志,log4j日志
zoo.cfg中的dataDir是快照日志;datalogDir是事务日志;
log4j配置了集群的服务器日志:该日志的配置地址在conf/目录下的log4j.properties文件中,该文件中有一个配置项为“zookeeper.log.dir=.”,表示log4j日志文件在与执行程序(zkServer.sh)在同一目录下。当执行zkServer.sh时,在该文件夹下会产生zookeeper.out日志文件。
zookeeper默认将事务日志文件和快照日志文件都存储在dataDir对应的目录下。建议将事务日志(dataLogDir)与快照日志(dataLog)单独配置,因为当zookeeper集群进行频繁的数据读写操作是,会产生大量的事务日志信息,将两类日志分开存储会提高系统性能,而且,可以允许将两类日志存在在不同的存储介质上,利用磁盘顺序写的特性,提高日志写入速度。

进入conf,修改log4j.properties

$ vi conf/log4j.properties
#将以下配置:
zookeeper.root.logger=INFO, CONSOLE
log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
#修改为:
zookeeper.root.logger=INFO, ROLLINGFILE
log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppender

进入 zookeeper/bin目录,修改zkEnv.sh

$ vi /bin/zkEnv.sh
## 将以下配置:
if [ "x${ZOO_LOG_DIR}" = "x" ]
then
    ZOO_LOG_DIR="."
fi

if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
    ZOO_LOG4J_PROP="INFO,CONSOLE"
fi

## 修改为:
if [ "x${ZOO_LOG_DIR}" = "x" ]
then
    ZOO_LOG_DIR="/var/local/zookeeper/logs"
fi

if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
    ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
fi

经过配置zoo.cfg,log4j.properties,zkEnv.sh后,我的zookeeper的几个日志目录如下:
数据快照日志

  • /zookeeper/data

事务日志

  • /zookeeper/datalogs

服务器日志

  • /zookeeper/logs

配置集群(缺)

运行zookeeper

$ /usr/local/zookeeper/bin/zkServer.sh start
# 遇到zookeeper_server.pid没有写权限,给这个目录加权限
$ sudo chown :kfk:kfk /var/zookeeper/data

使用zookeeper

$ cd zookeeper/bin
$ zookeeper-shell localhost:2181  #启动zookeeper-shell 

zookeeper-shell 命令

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

为当前用户配置alias

cd ~
vi .bashrc
# alias zookeeper_start='/usr/local/zookeeper/bin/zkServer.sh start'
# alias zookeeper_stop='/usr/local/zookeeper/bin/zkServer.sh stop'
source .bashrc
    原文作者:秋天的程序员
    原文地址: https://www.jianshu.com/p/784c4d0233a1
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞