废话不多说,直接上步骤:
zk的安装支持2种方式,一种是单机,一种是集群,集群环境要求服务器之间系统时间保持一致
1.上传 zookeeper-3.4.5.tar.gz 到目录 /usr/local
2.解压 tar -zxvf zookeeper-3.4.5.tar.gz
3.修改文件夹名称 mv zookeeper-3.4.5 zookeeper
4.修改conf目录下配置文件名称 mv zoo_sample.cfg zoo.cfg
5.修改配置文件内容 :2步
将dataDir=/tmp/zookeeper 改为 dataDir=/usr/local/zookeeper/data
如果是集群模式,第二步
在配置文件地址添加:
server.1 = server-01:2888:3888
server.2 = server-02:2888:3888
server.3 = server-03:2888:3888
完整如下:
# 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=/usr/local/zookeeper/data # 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.1=server-01:2888:3888 server.2=server-02:2888:3888 server.3=server-03:2888:3888tickTime: 基本事件单元,以毫秒为单位。这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,
也就是每隔 tickTime时间就会发送一个心跳。
dataDir: 存储内存中数据库快照的位置,顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
clientPort: 这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
initLimit: 这个配置项是用来配置 Zookeeper 接受客户端初始化连接时最长能忍受多少个心跳时间间隔数,
当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,
那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒。
syncLimit: 这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 5*2000=10 秒
server.A = B:C:D :
A表示这个是第几号服务器,
B 是这个服务器的 ip 地址;
C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;
D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader
ZooKeeper集群中具有两个关键的角色:Leader和Follower。集群中所有的节点作为一个整体对分布式应用提供服务,集群中每个结点之间都互相连接,
所以,在配置的ZooKeeper集群的时候,每一个节点的host到IP地址的映射都要配置上集群中其它结点的映射信息。
如:修改server1主机地址
vi /etc/hosts
添加:
172.21.121.53 server-01 172.21.121.54 server-02 172.21.121.55 server-03
6.创建data文件夹 mkdir data
7.data文件夹下创建 myid文件 vi myid 并填写内容为 0
如果是集群模式,myid的值应与配置文件中集群配置server.x=server-01:2888:3888中的x值对等
8.配置环境变量 vi /etc/profile
添加:
ZOOKEEPER_HOME=/usr/local/zookeeper PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:ZOOKEEPER_HOME/bin export PATH ZOOKEEPER_HOME保存退出,刷新环境变量 source /etc/profile
9.配置日志 cd /usr/local/zookeeper/bin
vi zkEnv.sh进入编辑状态
找到
if [ "x${ZOO_LOG_DIR}" = "x" ] then ZOO_LOG_DIR="/usr/local/zookeeper/logs" fi if [ "x${ZOO_LOG4J_PROP}" = "x" ] then ZOO_LOG4J_PROP="INFO,ROLLINGFILE" fi其中,ZOO_LOG_DIR就是日志保存地址,ZOO_LOG4J_PROP日志等级。
保存退出,进入conf目录
修改日志配置文件 vi log4j.properties
zookeeper.root.logger=INFO, ROLLINGFILE //修改此处,保证与zkEnv.sh的修改一致,保证日志轮转 zookeeper.console.threshold=INFO //打印级别 zookeeper.log.dir=/ zookeeper.log.file=zookeeper.log //日志文件 zookeeper.log.threshold=DEBUG //日志级别 zookeeper.tracelog.dir=. zookeeper.tracelog.file=zookeeper_trace.log
RollingFileAppender按log文件最大长度限度生成新文件,DailyRollingFileAppender按日期生成新文件。
具体配置如下(log4j.properties):
# Max log file size of 10MB log4j.appender.ROLLINGFILE.MaxFileSize=10MB # uncomment the next line to limit number of backup files #log4j.appender.ROLLINGFILE.MaxBackupIndex=10 log4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout log4j.appender.ROLLINGFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n # # Add TRACEFILE to rootLogger to get log file output # Log DEBUG level and above messages to a log file log4j.appender.TRACEFILE=org.apache.log4j.FileAppender log4j.appender.TRACEFILE.Threshold=TRACE log4j.appender.TRACEFILE.File=${zookeeper.tracelog.dir}/${zookeeper.tracelog.file}
最后进入bin目录,启动zk服务
./zkServer.sh start (stop 停止 restart 重启)
./zkCli 进入客户端
具体命令如下:
[zk: localhost:2181(CONNECTED) 0] help ZooKeeper -server host:port cmd args connect host:port get path [watch] ls path [watch] set path data [version] rmr path delquota [-n|-b] path quit printwatches on|off create [-s] [-e] path data acl// -e为创建临时节点/ -s为创建时序节点/ 什么都没有为创建永久节点 stat path [watch] close ls2 path [watch] history listquota path setAcl path acl getAcl path sync path redo cmdno addauth scheme auth delete path [version] setquota -n|-b val path
./zkCli -server server-01:2181 进入指定zk服务