# 目录与配置文件

## Zookeeper主要目录结构

* bin： 主要的一些运行命令。
* conf：存放配置文件，其中我们运行zookeeper之前需要修改zk.cfg。
* contrb：附加的一些功能。
* dist-maven：mvn编译后的目录，包含写jar包及pom文件
* docs：文档
* lib：需要依赖的jar包
* recipes：案例demo代码
* src：源码

> 支持c和java的客户端

## Zookeeper配置文件

zoo.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=/home/myuser/zooA/data 

# the port at which the clients will connect 
clientPort=2181 

# ZooKeeper server and its port no. # ZooKeeper ensemble should know about every other machine in the ensemble # specify server id by creating 'myid' file in the dataDir # use hostname instead of IP address for convenient maintenance
server.1=127.0.0.1:2888:3888 
server.2=127.0.0.1:2988:3988  
server.3=127.0.0.1:2088:3088 

# 
# 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  <br>
#autopurge.purgeInterval=1 
dataLogDir=/home/myuser/zooA/log
```

* tickTime：心跳时间，为了确保连接存在的，以毫秒为单位，最小超时时间为两个心跳时间。
* initLimit：多少个心跳时间内，允许其他server连接并初始化数据，如果ZooKeeper管理的数据较大，则应相应增大这个值。（用于集群，允许从节点连接并同步到master节点的初始化连接时间，以tickTime的倍数来表示）。
* clientPort：服务的监听端口（连接服务器的端口，默认2181）。
* dataDir：必须配置，用于存放内存数据库快照的文件夹，同时用于集群的myid文件也存在这个文件夹里（注意：一个配置文件只能包含一个dataDir字样，即使它被注释掉了。）
* dataLogDir：日志目录，用于单独设置transaction log的目录，transaction log分离可以避免和普通log还有快照的竞争，如果不配做会和dataDir公用。
* syncLimit：多少个tickTime内，允许follower同步，如果follower落后太多，则会被丢弃。（用于集群，master主节点与从节点之间发送消息，请求和应答时间长度，以tickTime的倍数来表示。心跳机制）
* server.A=B：C：D：
  * A是一个数字,表示这个是第几号服务器,
  * B是这个服务器的ip地址
  * C第一个端口用来集群成员的信息交换,表示的是这个服务器与集群中的Leader服务器交换信息的端口
  * D是在leader挂掉时专门用来进行选举leader所用

> dataDir 和 dataLogDir 在zookeeper当前目录建立相应的目录配置即可。
