ZooKeeper学习之配置【1】基本配置

ZooKeeper的设计对开发人员来说很友好,但同时也对运维人员友好。当集群越来越大时,管理操作也便得复杂起来,稳妥的管理也变得重要起来。ZooKeeper应该是一个标准的分布式系统组件,一个运维团队可以轻松的学习并管理它。虽说ZooKeeper很容易跑起来,但对于一些配置选项必须牢记在心。你应该很熟悉你的ZooKeeper服务,并使用一些管理工具方便的管理它。

为了让一个ZooKeeper服务正确工作,必须正确的配置好它,只有这样,基于ZooKeeper工作的其他分布式产品才能正常工作。例如,所有的ZooKeeper投票服务器必须拥有一致的配置。这是很多人的经验之谈,不一致的配置是普遍发生的问题的原因。

 

想要配置得好,需要理解一些基本概念,其实不难掌握,关键是要理解它们是什么,是如何工作的。 

 

本文开始陆续的详细讲解所有的配置选项,大部分配置项一般都有一个默认的值,很多都应该根据实际情况进行优化。因为ZooKeeper的设计很容易使用,有一些在不明白具体的配置项就开始使用,一开始工作得还好,但后续很可能会出问题。所以你需要花些时间来深入学习配置项,你会发现你将可以得到更好的性能,并能更容易的诊断问题。本文会带你了解每个配置项的含义,为什么会需要使用它们。

 

每一个ZooKeeper进程启动的时候会去读一个名为zoo.cfg的配置文件。担任不同角色(如leader,follower后者observer)的server共享一些基本的配置。在数据目录的myid文件用来区分各个server。每一个数据目录必须是独立的,所以myid文件需要放在数据目录中。myid存放的是server id,用来在配置文件中标识每一个server。当然,如果组建集群的话,每一个server必须有一个自己专属的配置文件。

 

配置选项一般都在配置文件中设置。每一个选项也可以通过Java system property进行设置,通常以zookeeper.property的形式使用。在启动server的使用使用-D选项来指定。下文中如果可以通过这种方式启动的话,会在圆括号中标明。在配置文件中的选项会比Java system property有更高的优先权。

扫描二维码关注公众号,回复: 617768 查看本文章

基本配置

有一些配置选项没有默认值,所以必须配置它们:

 

clientPort

一个TCP端口,提供client来连接。默认会监听所有的网络接口,除非设置了clientPortAddress配置。这个端口可以随意设置,只要不与其他端口冲突,默认端口为2181.

 

dataDir和dataLogDir

dataDir目录用来存放快照文件。如果当前的server是集群的一部分,则id文件也放在这个目录。此目录不需要放在一个专用的设备。因为是使用一个后台线程去写这个文件的,不需要锁住放在内存中的data tree,当完成快照之前,写操作的数据不会sync到磁盘(不会落地)。

 

如果没有设置dataLogDir,事务日志也会放到这个目录。事务日志所在的设备最好是专用的。server会试图对事务日志做顺序的写操作,因为在server对一个事务进行ack之前数据必须sync到磁盘。同一个设备的其他磁盘操作,比如生成快照,会显著的影响写操作,在sync期间把磁盘的磁头调到别的地方去。所以,最佳实践是为事务日志设置一个专用的设备,并把dataLogDir配到这个设备的一个目录上。

 

tickTime

指明一个tick的长度,单位是毫秒。tick是时间的一个基本度量,它决定了session超时的bucket的size(前文的文章有提过)。

 

超时时间就是根据以tick为单位进行设置的。这意味着,超时时间的下限就是1个tick的时间,因为最小只能设置为1个tick。最小的cilent的session超时时间是2个tick。

 

默认的tickTime为3000毫秒。调低这个值会减少超时时间。但是也会引起网络流量(心跳)和CPU时间(session bucket处理)的增加。

猜你喜欢

转载自damacheng009.iteye.com/blog/2086391