zookeeper系列之进阶


ZooKeeper的配置

ZooKeeper 的功能特性通过 ZooKeeper 配置文件来进行控制管理( zoo.cfg 配置文件)。 ZooKeeper 这样的设计其实是有它自身的原因的。通过前面对 ZooKeeper 的配置可以看出,对 ZooKeeper 集群进行配置的时候,它的配置文档是完全相同的(对于集群伪分布模式来说,只有很少的部分是不同的)。这样的配置方使得在部署 ZooKeeper 服务的时候非常地方便。另外,如果服务器使用不同的配置文件,必须要确保不同配置文件中的服务器列表相匹配。

在设置 ZooKeeper 配置文档的时候,某些参数是可选的,但是某些参数是必须的。这些必须的参数就构成了 ZooKeeper 配置文档的最低配置要求。

下面是在最低配置要求中必须配置的参数:

1 )最低配置

clientPort

监听客户端连接的端口;

dataDir

存储内存中数据库快照的位置;

注意 应该谨慎地选择日志存放的位置,使用专用的日志存储设备能够大大地提高系统的性能,如果将日志存储在比较繁忙的存储设备上,那么将会在很大程度上影响系统的性能。

  tickTime

基本事件单元,以毫秒为单位。它用来控制心跳和超时,默认情况下最小的会话超时时间为两倍的tickTime 


2 )高级配置

下面是高级配置要求中可选的配置参数,用户可以使用下面的参数来更好地规定 ZooKeeper 的行为:

dataLogDir

这个操作将管理机器把事务日志写入到“ dataLogDir ”所指定的目录,而不是“ dataDir ”所指定的目录。这将允许使用一个专用的日志设备并且帮助我们避免日志和快照之间的竞争。配置如下:

#the location of the log file

dataLogDir=/root/hadoop-0.20.2/zookeeper-3.3.1/log/data_log

maxClientCnxns

这个操作将限制连接到 ZooKeeper 的客户端的数量,限制并发连接的数量,它通过 IP 来区分不同的客户端。此配置选项可以用来阻止某些类别的 Dos 攻击。将它设置为 0 或者忽略而不进行设置将会取消对并发连接的限制。

例如,此时我们将 maxClientCnxns 的值设置为 1 ,如下所示:

#set maxClientCnxns

maxClientCnxns=1

启动 ZooKeeper 之后,首先用一个客户端连接到 ZooKeeper 服务器之上。然后,当第二个客户端尝试对ZooKeeper 进行连接,或者某些隐式的对客户端的连接操作,将会触发 ZooKeeper 的上述配置。系统会提示相关信息,如下图 1 所示:


 1  ZooKeeper maxClientCnxns 异常

minSessionTimeout  maxSessionTimeout

最小的会话超时时间以及最大的会话超时时间。其中,最小的会话超时时间默认情况下为 2 倍的 tickTme时间,最大的会话超时时间默认情况下为 20 倍的会话超时时间。在启动时,系统会显示相应信息,见下图 2所示,默认会话超时时间:


图2 :默认会话超时时间

从上图中可以看书, minSessionTimeout 以及 maxSessionTimeout 的值均为 -1 ,现在我们来设置系统的最小会话超时时间以及最大会话超时时间,如下所示:

#set minSessionTimeout

minSessionTimeout=1000

 

#set maxSessionTImeout

maxSessionTimeout=10000

在配置 minSessionTmeout 以及 maxSessionTimeout 的值的时候需要注意,如果将此值设置的太小的话,那么会话很可能刚刚建立便由于超时而不得不退出。一般情况下,不能将此值设置的比 tickTime 的值还小。


3 )集群配置

initLimit

此配置表示,允许 follower (相对于 leader 而言的“客户端”)连接并同步到 leader 的初始化连接时间,它以 tickTime 的倍数来表示。当超过设置倍数的 tickTime 时间,则连接失败。

syncLimit

此配置表示, leader  follower 之间发送消息,请求和应答时间长度。如果 follower 在设置的时间内不能与 leader 进行通信,那么此 follower 将被丢弃。

ZooKeeper的运行

1)单机模式

用户可以通过下面的命令来启动 ZooKeeper 服务:

zkServer.sh start

这个命令默认情况下执行 ZooKeeper  conf 文件夹下的 zoo.cfg 配置文件。当运行成功用户会看到类似如下的提示界面:

root@ubuntu :~# zkServer.sh start

JMX enabled by default

Using config: /root/hadoop-0.20.2/zookeeper-3.3.1/bin/../conf/zoo.cfg

Starting zookeeper ...

STARTED

    ... ...

2013-11-19 10:04:42,300 - WARN  [main:[email protected]] - Either no config or no quorum defined in config, running  in standalone mode

... ..

2013-11-19 10:04:42,419 - INFO  [main:[email protected]] - tickTime set to 2000

2013-11-19 10:04:42,419 - INFO  [main:[email protected]] - minSessionTimeout set to -1

2013-11-19 10:04:42,419 - INFO  [main:[email protected]] - maxSessionTimeout set to -1

2013-11-19 10:04:42,560 - INFO  [main:[email protected]] - binding to port 0.0.0.0/0.0.0.0:2181

2013-11-19 10:04:42,806 - INFO  [main:[email protected]] - Reading snapshot /root/hadoop-0.20.2/zookeeper-3.3.1/data/version-2/snapshot.200000036

2013-11-19 10:04:42,927 - INFO  [main:[email protected]] - Reading snapshot /root/hadoop-0.20.2/zookeeper-3.3.1/data/version-2/snapshot.200000036

2013-11-19 10:04:42,950 - INFO  [main:[email protected]] - Snapshotting: 400000058

从上面可以看出,运行成功后,系统会列出 ZooKeeper 运行的相关环境配置信息。

 

2)集群模式

集群模式下需要用户在每台 ZooKeeper 机器上运行第一部分的命令,这里不再赘述。

 

3)集群伪分布模式

在集群伪分布模式下,我们只有一台机器,但是要运行三个 ZooKeeper 服务实例。此时,如果再使用上述命令式肯定行不通的。这里,我们通过下面三条命能够令来运行 ZooKeeper系列之三:ZooKeeper的安装 我们配置的 ZooKeeper 服务。如下所示:

zkServer.sh start zoo1.cfg

 

zkServer.sh start zoo2.cfg

 

zkServer.sh start zoo3.cfg

在运行完第一条命令之后,读者将会发现一些系统错误提示,如下图 1 所示:


 1 :集群伪分布异常提示

产生如上图所示的异常信息是由于 ZooKeeper 服务的每个实例都拥有全局的配置信息,它们在启动的时候需要随时地进行 Leader 选举操作(此部分内容下面将会详细讲述)。此时第一个启动的 Zookeeper 需要和另外两个 ZooKeeper 实例进行通信。但是,另外两个 ZooKeeper 实例还没有启动起来,因此将会产生上述所示的异常信息。

我们直接将其忽略即可,因为当把图示中的“ 2 号”和“ 3 号” ZooKeeper 实例启动起来之后,相应的异常信息就回自然而然地消失

ZooKeeper四字命令


ZooKeeper 支持某些特定的四字命令字母与其的交互。它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息。用户在客户端可以通过 telnet  nc  ZooKeeper 提交相应的命令。 ZooKeeper 常用四字命令见下表 1 所示:


ZooKeeper 四字命令

功能描述

conf

输出相关服务配置的详细信息。

cons

列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。包括“接受 / 发送”的包数量、会话 id 、操作延迟、最后的操作执行等等信息。

dump

列出未经处理的会话和临时节点。

envi

输出关于服务环境的详细信息(区别于 conf 命令)。

reqs

列出未经处理的请求

ruok

测试服务是否处于正确状态。如果确实如此,那么服务返回“imok ”,否则不做任何相应。

stat

输出关于性能和连接的客户端的列表。

wchs

列出服务器 watch 的详细信息。

wchc

通过 session 列出服务器 watch 的详细信息,它的输出是一个与watch 相关的会话的列表。

wchp

通过路径列出服务器 watch 的详细信息。它输出一个与 session相关的路径。

下图  ZooKeeper 四字命令的简单用例:

zookeeper系列之进阶

 1  ZooKeeper 四字命令用例



转载于:https://my.oschina.net/sunzy/blog/180806