集群配置和Kerberos安装配置如Kerberized_HDFS.Zookeeper的Kerberos配置过程如下所示。

#Kerberos parts##

##添加principals###

在KDC上创建ZooKeeper principals,并随机生成密钥:

#   kadmin.local
addprinc -randkey zookeeper/node21@HADOOP
addprinc -randkey zookeeper/node22@HADOOP
addprinc -randkey zookeeper/node23@HADOOP
listprincs

##生成keytab文件###

为集群中每个节点生成相应的zookeeper.keytab文件。

创建名为/tmp/zookeeper_keytabs的目录,在该目录下执行:

#   kadmin.local 
ktadd -k zookeeper_21.keytab zookeeper/node21@HADOOP
ktadd -k zookeeper_22.keytab zookeeper/node22@HADOOP
ktadd -k zookeeper_23.keytab zookeeper/node23@HADOOP

##部署keytab文件###

将每个keytab文件拷贝到相应的节点的/etc下,并重命名为zookeeper.keytab:

# scp zookeeper_21.keytab root@node21:/etc/zookeeper.keytab
# scp zookeeper_22.keytab root@node22:/etc/zookeeper.keytab
# scp zookeeper_23.keytab root@node23:/etc/zookeeper.keytab

在每个节点上将keytab文件的owner改为zookeeper:hadoop,权限改为400:

# chown zookeeper:hadoop /etc/zookeeper.keytab; chmod 400 /etc/zookeeper.keytab

#ZooKeeper Part##

##修改zoo.cfg###

在node21上修改配置文件/ZOOKEEPER_CONF/zoo.cfg(ZOOKEEPER_CONF为ZooKeeper的配置文件路径),添加:

authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
jaasLoginRenew=3600000

将上述修改同步到ZooKeeper集群的其他节点。

##创建JAAS文件###

在/ZOOKEEPER_CONF/创建JAAS(Java Authentication and Authorization Service)配置文件,内容如下(每个节点的principal不同,以node21为例):

Server {
  com.sun.security.auth.module.Krb5LoginModule required
  useKeyTab=true
  keyTab="/etc/zookeeper.keytab"
  storeKey=true
  useTicketCache=false
  principal="zookeeper/node21@HADOOP";
};

节点node22,node23也要创建JAAS文件。

##创建java.env文件###

在/ZOOKEEPER_CONF/创建java.env,添加如下内容:

export JVMFLAGS="-Djava.security.auth.login.config=/ZOOKEEPER_CONF/jaas.conf"

记得将ZOOKEEPER_CONF替换为实际的配置文件所在目录的路径。

##重启集群###

在集群中的每个节点上,执行如下(以node21为例):

# kinit -k -t /etc/zookeeper.keytab zookeeper/node21@HADOOP
# klist                 //查看ticket信息
# service zookeeper-server restart