Zookeepeer使用常见问题(更新中)

Zookeeper是当下热门的分布式应用程序协调工具,包括hadoop在内的一些大数据工具都依赖于它进行数据的交流和同步。当前做的项目就是以它为基础的分布式应用,在此整理出自己对它的认识理解以及在使用上的一些注意事项。

  • Zookeeper server的配置文件

以下是Zookeeper 3.4.5的默认配置文件

# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial # synchronization phase can takeinitLimit=10# The number of ticks that can pass between # sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.# do not use /tmp for storage, /tmp here is just # example sakes.dataDir=/tmp/zookeeper# the port at which the clients will connectclientPort=2181## 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#autopurge.purgeInterval=1

参数不一一解释,谈谈几个个人认为比较重要的:

  1. dataDir 指定目录存储snapshot文件, dataLogDir指定目录存储transaction log文件。这两类文件是zookeeper重要的数据存储文件,每次zookeeper启动都是通过这些文件来恢复上次的状态。从它们的名字上就可以看出它们的关系,例如存在文件snapshot.2d就一定有对应的transaction log文件log.2e,记录着创建这个snapshot之后所有对zookeeper数据的改动。每次启动zookeeper server时,选举出zookeeper leader之后,整个集群会以leader上存储的log数据为准,首先加载最新的snapshot文件,然后根据transaction log重现这个snapshot之后左右的zookeeper操作。通过这样的方式将上次关闭时的zookeeper状态恢复。由此可以看出这些log文件的重要性,如果不小心删除了关键的log文件会导致zookeeper server不能够正常启动。相反,如果因为zookeeper数据的错误而导致了应用不能正常工作,用户可以将snapshot和transaction log全部删除,这样zookeeper就可以恢复到初始状态。这两种文件都是人为不可读的,但是zookeeper提供了工具来查看log以便debug,分别是SnapshotFormatter和LogFormatter。由于transaction log文件是固定大小,一生成就是64M,因此非常占空间,时间长了给硬盘带来很大负荷,好在zookeeper在3.4.0之后增加了log清理的功能,如上所示,autopurge功能可以设定清理的频率以及保留snapshot的数量,snapshot被清理的同时相应的transaction log也会被清除。

  2. minSessionTimeout以及maxSessionTimeout限定了客户端session的持续时间,用户在创建Zookeeper client的时候必须指定clientSessionTimeout,当然要在这个范围之内。这里有一点非常重要,这个数值必须大于客户端实际连接server的时间,我之前碰到过客户端连接远程Zookeeper server耗费了20多秒,但是clientSessionTimeout为18秒,这样导致客户端始终连接不上server。clientSessionTimeout与ephemeral node的生存周期也存在着很大的关系,如果创建ephemeral node的客户端意外退出,Zookeeper server上的这个临时节点必须要在clientSessionTimeout之后才消失,这是很多failover情况下必须考虑的transient状态。

  • Enable Kerberos

zookeeper在安全验证方面常用的是digest,即通过给一个节点设置密码来控制访问。Kerberos是现在使用较多的一种验证方式,包括在CDH内的很多模块Hadoop,Hive等都兼容Kerberos的验证方式。Kerberos这种将验证从应用中脱离开来的实现给集中管理提供了很大的方便。

首先不管是server端还是client端,都得安装好kerberos,因为它们都要需要跟KDC交互,达到验证自己的目的。/etc/krb5.conf中配置好KDC的地址。

  1. 在zookeeper配置文件中加入:

authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProviderjaasLoginRenew=3600000

 2. 在conf文件夹下创建文件jaas.conf

Server {  com.sun.security.auth.module.Krb5LoginModule required  useKeyTab=true  keyTab="/home/xiaofxu/installed/zookeeper-3.4.5/conf/zkserver.keytab"  storeKey=true  useTicketCache=false  principal="zookeeper/my.example.com@EXAMPLE.COM";};Client {  com.sun.security.auth.module.Krb5LoginModule required  useKeyTab=true  keyTab="/home/xiaofxu/installed/zookeeper-3.4.5/conf/zkCli1.keytab"  storeKey=true  useTicketCache=false  principal="zkCli1@EXAMPLE.COM";};

 文件中分别指定了server以及client使用的keytab文件以及其中的principal。需要注意的是server对于principal有命名的规范,必须是zookeeper/hostname@realm,hostname是server所在机器的有效hostname,之所以必须是zookeeper是因为client去向KDC申请ticket时,service名字hard code了zookeeper。

 3. 创建文件java.env

export JVMFLAGS="-Djava.security.auth.login.config=/home/xiaofxu/installed/zookeeper-3.4.5/conf/jaas.conf

 4. 启动zookeeper server

./zkServer.sh start

 5. 启动zookeeper client

./zkCli.sh -server server_hostname:2181

这里填写最好填写完整的hostname,有时填写本机的localhost验证会不成功。成功连接并验证后可见Authenticated字样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值