版权声明:本文为博主原创文章,未经博主允许不得转载。https://www.jianshu.com/p/4cd64554fb2d
关于CDH6集成kerberos的配置参见我的另一篇文章:CDH集成kerberos,感兴趣的朋友可以查阅。
目前Kerberos服务器的高可用是通过主备模式实现,数据同步是通过kprop服务,定时将主节点上的数据同步到从节点上。本文以host1/host2为例进行说明。
1、在主节点上,修改/etc/krb5.conf,在realms配置下增加备kerberos的配置。
注意:括号位置不能有任何改变,否则会识别不到kdc。
[realms]
SPDB1.COM = {
kdc= host1
admin_server = host1
kdc = host2
admin_server = host2
}
将配置文件分发到所有客户端节点上
$> scp krb5.conf host2$PWD
$> scp krb5.conf host3:$PWD
2、保持配置后,重启krb5kdc和kadmin服务
$> service krb5kdc restart
$> service kadmin restart
3、在主节点安装好的kerberos服务器中,添加用来进行同步的账户
$> kadmin.local
$> kadmin.local: addprinc -randkey host/host1
$> kadmin.local: addprinc -randkey host/host2
$> kadmin.local: ktadd host/host1
$> kadmin.local: ktadd host/host2
使用随机生成密钥的方式闯进同步账号,并使用ktadd命令生成同步账号的keytab文件,默认文件生成在/etc/krb5.keytab下,生成多个账号则在krb5.keytab基础上追加。
4、在从节点上,部署kerberos服务
$>yum install krb5*
5、在主节点上,将配置文件与包含同步账户的keytab文件同步到从节点上
$> cd /var/kerberos/krb5kdc
$> scp .k5.SPDB1.COM host2:$PWD
$> scp kadm5.acl host2:$PWD
$> scp kdc.conf host2:$PWD
$> cd /etc
$> scp krb5.keytab host2:$PWD
6、在从节点上,申明用来同步的用户,新建/var/kerberos/krb5kdc/kpropd.acl文件,配置文件中添加对应账户
注意:主节点上不能有该文件,否则kadmin服务无法启动,会报错:Error. This appears to be a slaveserver, found kpropd.acl
[root@host2 krb5kdc]# cat kpropd.acl
host/host1@SPDB1.COM
host/host2@SPDB1.COM
7、检查kpropd会用到的端口
[root@host2 krb5kdc]# cat /etc/services
|grep -i krb5_prop
krb5_prop 754/tcp tell # Kerberos slave propagation
8、从节点启动kprop服务
$> service kprop start
$> chkconfig kprop on
至此,从节点上已经准备好数据接收。
9、回到主节点上,在主节点上将kerberos中包含的用户信息导出,然后通过kprop命令传输到从节上。
$> kdb5_util dump /var/kerberos/krb5kdc/slave_datatrans
导出成功后生成slave_datatrans和slave_datatrans.dump_ok两个文件。
$> kprop -r SPDB1.COM -f /var/kerberos/krb5kdc/slave_datatrans -d -P754 host2
如果此步失败,报错"kprop: Decrypt integrity check failed while getting initial credentials",请重新执行第3步和第5步。
10、在从节点上验证kadmin服务是否正常
1)启动krb5kdc服务
$> service krb5kdc start
$> service krb5kdc status
2)验证kadmin服务是否正常
$> kadmin.local
$> listprincs
3)kill主服务的krb5kdc和kadmin服务进行验证
$> ps -ef|grep -i krb5
$> kill -9 11652
$> ps -ef|grep -i kadmin
$> kill -9 11740
4)此时在备服务器上服务依旧正常,且可以正常添加凭证
[root@host2 krb5kdc]# kadmin.local
Authenticating as principal root/admin@SPDB1.COM with password.
kadmin.local: addprinc cloudera-scm1/admin@SPDB1.COM
WARNING: no policy specified for cloudera-scm1/admin@SPDB1.COM; defaulting to no policy
Enter password for principal "cloudera-scm1/admin@SPDB1.COM":
Re-enter password for principal "cloudera-scm1/admin@SPDB1.COM":
Principal "cloudera-scm1/admin@SPDB1.COM" created
并且在其他客户端也可以认证在备服务器上刚新增的凭证
11、在主节点上将同步命令做成脚本,以能够实时进行同步
[root@host1 krb5kdc]# catkprop_trans.sh
#!/bin/bash
DUMP=/var/kerberos/krb5kdc/slave_datatrans
REALM=SPDB1.COM
PORT=754
SLAVE="host2"
TIMESTAMP=`date`
echo "Start $TIMESTAMP"
kdb5_util dump $DUMP
krpop -r $REALM -f $DUMP -d -P $PORT $SLAVE
12、添加到定时任务中
$> chmod 700 kprop_trans.sh
$> vi /etc/crontab
0 * * * * root /var/kerberos/krb5kdc/kprop_trans.sh> /var/kerberos/krb5kdc/lastupdate
$> service crond start
$> chkconfig crond on
cdh集群在集成kerberos时,只指定一个kdc,可能会报Communication failure with server while initializing kadmin interface
解决方法:
临时停掉备节点的kdc服务,将集群krb5.conf文件中的备kdc信息去掉,再重启主节点上的kadmin和kdc服务。
等待集群集成完成后,再重新修改回原配置即可。