背景和现状
主节点principal数据库损坏,但能使用,从节点principal没同步主节点内容
测试方案
1、从节点停掉krb5kdc进程,查看确认从节点数据库没同步主节点,然后备份principal文件,拷贝主节点的principal文件,然后查看数据库是否可以访问
kadmin.local -q “listprincs”
service krb5kdc stop
mv /var/kerberos/krb5kdc/principal /var/kerberos/krb5kdc/principal_bak
scp ocdp52:/var/kerberos/krb5kdc/principal /var/kerberos/krb5kdc/principal
kadmin.local -q “listprincs”
这里数据库拷贝过来可能还属于损坏状态,采用如下方法同步:
主节点导出数据库内容:
kdb5_util dump /var/kerberos/krb5kdc/slave
拷贝主节点导出的内容到从节点
scp /var/kerberos/krb5kdc/slave ocdp53:/var/kerberos/krb5kdc/
从节点导入到数据库
kdb5_util load /var/kerberos/krb5kdc/slave
kadmin.local -q “listprincs”
2、从节点启动krb5kdc
service krb5kdc start
3、主节点停掉krb5kdc
service krb5kdc stop
4、查看集群认证是否还正常
kinit -kt /etc/security/keytabs/hdfs.headless.keytab ocdc-ocdp_tests@ocdp ;hadoop fs -ls /
5、主节点备份数据库后初始化数据库,初始化数据库后里面没有admin/admin@ocdp用户:
mv principal /raoyi/principal.bak
rm -fr /var/kerberos/krb5kdc/principal*
kdb5_util create -r ocdp -s
kadmin.local -q “listprincs”
此时kadmin.local可以用,但是kadmin不可用,但是kerberos页面测试连接线可以链接,并且能进行认证:
kadmin.local -q “addprinc admin/admin@ocdp”
此时所有主机kadmin都报这个错:
kadmin: GSS-API (or Kerberos) error while initializing kadmin interface
解决:删除keytabl中原来的admin/admin@ocdp的信息,重新生成。
[root@ocdp52 krb5kdc]# ktutil
ktutil: rkt /etc/krb5.keytab
ktutil: delent 1
ktutil: l
ktutil: delent 1
ktutil: wkt /etc/krb5.keytab.bak
ktutil: quit
[root@ocdp52 krb5kdc]# mv -f /etc/krb5.keytab.bak /etc/krb5.keytab
kadmin.local -q “ktadd admin/admin@ocdp”
service krb5kdc start 这里还不能直接启动,需要修改ambari页面的kerberos配置,变换kdcserver主机,让原来的从主机变为主kdc,这样这里才能启动krb5kdc:这样启动之后kinit能通过,但是kadmin还是报错,原因是kinit用当前/etc/krb5.keytab,但是认证的时候用到了从主机上的kdc 服务器,所以会报密码不对。
ps :kinit admin/admin@ocdp 使用的是kadmin服务器的principal:可通过下面图片说明:
操作步骤:
1、页面修改kadmin host 到从节点,之后重启kerberos client部分主机卡着不动的时候,重启这部分主机的ambari agent重新操作即可。
主节点停止kadmin
service kadmin stop
从节点
service kadmin start
此时:
如果此时主节点在停止kdc serve,则:
service krb5kdc stop
因为从节点里面没有admin/admin@ocdp
从节点添加一个admin/admin@ocdp后即可以链接上:
addprinc admin/admin@ocdp
此时链接的是好的从princapal数据库,页面上regenerate keytabs:
Regenerate Keytabs
这里选手动启动组件,即不勾选,重新生成keytab后,服务保留的原来的状态,需要手动重启。
过程54:
一直卡在create principals这里,日志也没有打印输出的时候,可以在kadmin server上查看数据库里是否有添加pricipal的数据。
kadmin.local -q “listprincs” | wc -l
过程53:
过程52:
Regenerate Keytabs后
此时,原来的主节点的principal数据库里面没有数据,因为krb5kdc进程是停止的,而原来从节点的principal里面产生了新的数据,拷贝从节点的principal数据库到主节点后kadmin.local -q “listprincs”
service krb5kdc start
即可。
之后也可以在ambari页面把kadmin server修改回去
查看主机的keytab文件,发现所有主机文件日期都已经发生变化:
ps:
选择自动重启服务会先停止,后启动服务:
Disable Kerberos:
可以先手动check集群服务,不然在集群disabled Kerberos的过程中会check服务,check失败之后就会卡住。不能完成,只能叉掉。
停止指定的服务差不多要停所有的组件了:
取消集群kerberos:
启动组件: