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 将被丢弃。
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 服务的当前状态及相关信息。用户在客户端可以通过 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相关的路径。 |
下图 1 是 ZooKeeper 四字命令的简单用例:
图 1 : ZooKeeper 四字命令用例
转载于:https://my.oschina.net/sunzy/blog/180806