ttp://hadoop.apache.org/zookeeper/docs/r3.3.1/zookeeperAdmin.html#sc_configuration

ZooKeeper Server的行为受配置文件zoo.cfg的控制,zoo.cfg的设计目标是让所有服务器都可以使用相同的配置文件,如果需要使用不同的配置文件,需要保证关于cluster部分的参数相同。下面是具体的参数:

最小必要配置的参数

clientPort

服务的监听端口

dataDir

用于存放内存数据库快照的文件夹,同时用于集群的myid文件也存在这个文件夹里(注意:一个配置文件只能包含一个dataDir字样,即使它被注释掉了。)

tickTime

心跳时间,为了确保连接存在的,以毫秒为单位,最小超时时间为两个心跳时间

高级配置参数

dataLogDir

用于单独设置transaction log的目录,transaction log分离可以避免和普通log还有快照的竞争

globalOutstandingLimit

client请求队列的最大长度,防止内存溢出,默认值为1000

preAllocSize

预分配的Transaction log空间为block个proAllocSize KB,默认block为64M,一般不需要更改,除非snapshot过于频繁

snapCount

在snapCount个snapshot后写一次transaction log,默认值是100,000

traceFile

用于记录请求的log,打开会影响性能,用于debug的,最好不要定义

maxClientCnxns

最大并发客户端数,用于防止DOS的,默认值是10,设置为0是不加限制

clientPortBindAddress

3.3.0后新增参数,可是设置指定的client ip以及端口,不设置的话等于ANY:clientPort

minSessionTimeout

3.3.0后新增参数,最小的客户端session超时时间,默认值为2个tickTime,单位是毫秒

maxSessionTimeout

3.3.0后新增参数,最大的客户端session超时时间,默认值为20个tickTime,单位是毫秒

集群参数

electionAlg

用于选举的实现的参数,0为以原始的基于UDP的方式协作,1为不进行用户验证的基于UDP的快速选举,2为进行用户验证的基于UDP的快速选举,3为基于TCP的快速选举,默认值为3

initLimit

多少个心跳时间内,允许其他server连接并初始化数据,如果ZooKeeper管理的数据较大,则应相应增大这个值

leaderServes

leader是否接受客户端连接。默认值为yes。 leader负责协调更新。当更新吞吐量远高于读取吞吐量时,可以设置为不接受客户端连接,以便leader可以专注于同步协调工作。默认值是yes,说明leader可以接受客户端连接。(注意:当集群中有超过3台ZooKeeper Server时,强烈建议打开leader选举)

server.x=[hostname]:nnnnn[:nnnnn], etc

配置集群里面的主机信息,其中server.x的x要写在myid文件中,决定当前机器的id,第一个port用于连接leader,第二个用于leader选举。如果electionAlg为0,则不需要第二个port。hostname也可以填ip。

syncLimit

多少个tickTime内,允许follower同步,如果follower落后太多,则会被丢弃。

group.x=nnnnn[:nnnnn]

weight.x=nnnnn

这两个是用于集群分组的参数,暂时只有3台机器,没仔细研究,先给个例子看看吧

group.1=1:2:3

group.2=4:5:6

group.3=7:8:9

weight.1=1

weight.2=1

weight.3=1

weight.4=1

weight.5=1

weight.6=1

weight.7=1

weight.8=1

weight.9=1

用于用户认证的选项

不安全选项

ZooKeeper采用log4j记录日志,log4j.properties文件在[zk_dir]/conf目录下,编辑[zk_dir]/conf/log4j.properties文件,按需要配置,这里给出一个在文件里记录DEBUG, INFO, ERROR等级,并且文件每天重命名一次的例子:

#

# ZooKeeper Logging Configuration

#

log4j.rootLogger=INFO, DEBUG, ERROR

# DEBUG

log4j.appender.DEBUG=org.apache.log4j.DailyRollingFileAppender

log4j.appender.DEBUG.Threshold=DEBUG

log4j.appender.DEBUG.layout=org.apache.log4j.PatternLayout

log4j.appender.DEBUG.layout.ConversionPattern=%d{ISO8601} - %-5p [%t:%C{1}@%L] - %m%n

log4j.appender.DEBUG.datePattern='.'yyyy-MM-dd'.log'

log4j.appender.DEBUG.append=true

log4j.appender.DEBUG.File=/home/user/zk_logs/zk_debug.log

# INFO

log4j.appender.INFO=org.apache.log4j.DailyRollingFileAppender

log4j.appender.INFO.Threshold=INFO

log4j.appender.INFO.layout=org.apache.log4j.PatternLayout

log4j.appender.INFO.layout.ConversionPattern=%d{ISO8601} - %-5p [%t:%C{1}@%L] - %m%n

log4j.appender.INFO.datePattern='.'yyyy-MM-dd'.log'

log4j.appender.INFO.append=true

log4j.appender.INFO.File=/home/user/zk_logs/zk_error.log

 

# ERROR

log4j.appender.ERROR=org.apache.log4j.DailyRollingFileAppender

log4j.appender.ERROR.Threshold=ERROR

log4j.appender.ERROR.layout=org.apache.log4j.PatternLayout

log4j.appender.ERROR.layout.ConversionPattern=%d{ISO8601} - %-5p [%t:%C{1}@%L] - %m%n

log4j.appender.ERROR.datePattern='.'yyyy-MM-dd'.log'

log4j.appender.ERROR.append=true

log4j.appender.ERROR.File=/home/user/zk_logs/zk_error.log

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐