背景和现状

主节点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页面测试连接线可以链接,并且能进行认证:
kerberos修复 - 图1
kerberos修复 - 图2
kerberos修复 - 图3
kadmin.local -q “addprinc admin/admin@ocdp”
此时所有主机kadmin都报这个错:
kadmin: GSS-API (or Kerberos) error while initializing kadmin interface
kerberos修复 - 图4
解决:删除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 服务器,所以会报密码不对。
kerberos修复 - 图5
ps :kinit admin/admin@ocdp 使用的是kadmin服务器的principal:可通过下面图片说明:
kerberos修复 - 图6

操作步骤:

1、页面修改kadmin host 到从节点,之后重启kerberos client部分主机卡着不动的时候,重启这部分主机的ambari agent重新操作即可。
主节点停止kadmin
service kadmin stop
从节点
service kadmin start
此时:
kerberos修复 - 图7
如果此时主节点在停止kdc serve,则:
service krb5kdc stop
kerberos修复 - 图8
因为从节点里面没有admin/admin@ocdp
kerberos修复 - 图9
从节点添加一个admin/admin@ocdp后即可以链接上:
addprinc admin/admin@ocdp
kerberos修复 - 图10
kerberos修复 - 图11
此时链接的是好的从princapal数据库,页面上regenerate keytabs:

Regenerate Keytabs

kerberos修复 - 图12
kerberos修复 - 图13
这里选手动启动组件,即不勾选,重新生成keytab后,服务保留的原来的状态,需要手动重启。
kerberos修复 - 图14

过程54:

kerberos修复 - 图15
一直卡在create principals这里,日志也没有打印输出的时候,可以在kadmin server上查看数据库里是否有添加pricipal的数据。
kadmin.local -q “listprincs” | wc -l
kerberos修复 - 图16
kerberos修复 - 图17
kerberos修复 - 图18
kerberos修复 - 图19
kerberos修复 - 图20
kerberos修复 - 图21
kerberos修复 - 图22

过程53:

kerberos修复 - 图23
kerberos修复 - 图24

过程52:

kerberos修复 - 图25
kerberos修复 - 图26

Regenerate Keytabs后

此时,原来的主节点的principal数据库里面没有数据,因为krb5kdc进程是停止的,而原来从节点的principal里面产生了新的数据,拷贝从节点的principal数据库到主节点后kadmin.local -q “listprincs”
service krb5kdc start
即可。
之后也可以在ambari页面把kadmin server修改回去
kerberos修复 - 图27
kerberos修复 - 图28
kerberos修复 - 图29
查看主机的keytab文件,发现所有主机文件日期都已经发生变化:
kerberos修复 - 图30
kerberos修复 - 图31
ps:
kerberos修复 - 图32
选择自动重启服务会先停止,后启动服务:
kerberos修复 - 图33

Disable Kerberos:

可以先手动check集群服务,不然在集群disabled Kerberos的过程中会check服务,check失败之后就会卡住。不能完成,只能叉掉。
kerberos修复 - 图34
kerberos修复 - 图35
kerberos修复 - 图36
停止指定的服务差不多要停所有的组件了:
kerberos修复 - 图37
取消集群kerberos:
kerberos修复 - 图38
启动组件:
kerberos修复 - 图39
kerberos修复 - 图40
kerberos修复 - 图41