基于Ambari禁用Kerberos
前面的文章介绍了《Kerberos原理–经典对话》、《Kerberos基本概念及原理汇总》、《基于ambari的Kerberos安装配置》、《Windows本地安装配置Kerberos客户端》,《Kerberos应用》,接下来再来聊聊基于Ambari
如何禁用Kerberos
,可不是在页面上点击禁用Kerberos
那么顺利噢,有的时候服务会启动失败啊~
一、思考
使用Ambari
启用Kerberos
过程中,都做了哪些操作?
- 生成
Principal
和Keytab
- 修改集群内各服务的配置
- 将
Zookeeper
上的某些服务的znode
进行sasl
权限控制。sasl
是Kerberos
特有的设置znode
的一种权限
但是在Ambari
页面上禁用Kerberos
的过程中,有的Zookeeper
的znode
节点的权限依旧被sasl
控制,所以禁用Kerberos
后,有的服务起不来,或者有告警出现。
二、禁用Kerberos
在Ambari
页面切换到Kerberos
管理界面,点击禁用Kerberos
按钮,如下图所示:
会弹出一个窗口,如下图所示:
我们点击”坚持继续“,Ambari
就会自动解除Kerberos
的控制,如下图所示:
过程中可能会出现“管理会话过期的提示”,如下图所示:
- 管理主体:填写你自定义创建的
Principal
。例如:`admin/admin@EXAMPLE.COM,也可以省略
@EXAMPLE.COM,可直接填写
admin/admin`。 - 管理密码:填写自定义创建
Principal
时的密码。
这样禁用Kerberos
就已经算是成功了,不过返回服务面板,可能会出现告警。是的,因为Zookeeper
中有的znode
节点可能还在受sasl
的权限控制,所以有的服务中的组件就会启动失败。
比如hiveserver2
,就会报端口号10000
监听不到的告警异常。
所以我们需要修改znode
权限,将znode
的权限全部修改为world:anyone:cdrwa
模式。
三、修改znode权限
使用普通用户无法删除带有sasl
的znode
节点。我们可以启用Zookeeper
超级管理员模式来删除znode
节点。
1. md5加密超级管理员密码
设置Zookeeper
超级管理员权限,首先需要对超级管理员的密码进行md5
加密,现在设置超级管理员的密码是admin
,那么密码需要怎么加密呢?
1 | export ZK_CLASSPATH=/etc/zookeeper/conf/:/usr/hdp/current/zookeeper-server/lib/*:/usr/hdp/current/zookeeper-server/* |
由输出结果可见,admin
经过md5
加密,变成了xQJmxLMiHGwaqBvst5y6rkB6HQs=
2. 编辑zkServer.sh
1 | vim /usr/hdp/2.6.4.0-91/zookeeper/bin/zkServer.sh |
定位到文件的第135
行,将
1 | "-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6HQs=" |
粘贴到指定位置,如下图所示:
进入到Ambari Web UI
,重启该节点上的Zookeeper
服务。
注:如果需要取消Zookeeper
超级管理员,可将zkServer.sh
文件中新添的内容删除,并重启该节点上的Zookeeper
服务即可。
3. 删除znode节点或修改znode权限
首先确保该节点用户下无Principal
缓存认证,可以执行kdestroy
命令进行销毁,klist
命令进行查看。
1 | /usr/hdp/2.6.4.0-91/zookeeper/bin/zkCli.sh |
我们可以使用getAcl
命令来查看每个znode
节点的权限。
由于随着服务个数的增多,znode
的个数也会增多,所以还是建议根据服务的异常(启动失败或异常告警)来查看对应服务的znode
节点的权限,如果是sasl
权限的话,我们可以使用Zookeeper
超级管理员的身份对znode
做点事情了,好让服务变得正常。
这里我们有两种方式,这两种方式各有利弊:
方式一
可以使用setAcl /xxx world:anyone:cdrwa
命令来重新设置znode
权限,去除sasl
模式。例如:修改hiveserver2的权限为cdrwa
1 | setAcl /hiveserver2 world:anyone:cdrwa |
弊端:设置znode
权限并不影响该节点的子znode
的权限。换句话说,设置一个节点的权限,并不影响该节点的子节点的权限。所以我们需要一个一个的去setAcl
,会比较麻烦,但是这样不会丢失znode
注册的信息数据。
方式二
简单粗暴的,将有sasl
的znode
节点全部删除,然后重启对应的服务,它会自动的在Zookeeper
集群上注册znode
信息。执行rmr <path>
命令,例如:删除hiveserver2
1 | rmr /hiveserver2 |
有时候会提示由于子znode
存在,该znode
无法被删除。我们可以先删除子znode
后,再删除父znode
。
弊端:这样会导致一些信息的丢失。
很抱歉,目前还没有找到更好的处理方式。
值得一提的是,Zookeeper
中的znode
节点如果在启用Kerberos
之前就已经被注册,那么在启用Kerberos
之后就不会被重新注册,所以权限也不会被改变,依旧使用的是启用Kerberos
之前的权限(cdrwa
)。如果需要更改为sasl权限,可以将自己使用setAcl
命令设置,或删除znode
节点后,重启对应服务。
四、总结
使用Ambari
禁用Kerberos
,不像CDH产品
一样,可以进行服务的Zookeeper初始化
。在禁用Kerberos
后,我们需要手动修改部分znode
的权限,这样某些服务在禁用Kereros
服务之后才可以正常使用。
当然我们也可以先停止所有服务,然后删除所有znode
,然后再启动禁用kerberos
流程。只不过这样有些信息会被丢失。比如ResourceManager
的Applications
历史数据会被清空;由于Solr
的配置文件会在Zookeeper
上储存,所以也会丢失。个中利弊,自个儿权衡吧😕
五、坑
除了Zookeeper
上的znode
节点权限不会被清空,有时候,只是有时候,在禁用Kerberos
的过程中,有的服务的配置压根就没有将Kerberos
相关的配置移除掉,所以肯定会导致服务在禁用kerberos
后启动失败。
我的做法是:打开Ambari
面板上对应服务
的配置项,右上角对配置进行搜索,搜索关键词kerberos
,将设置为kerberos
的相关选项删除或按照Ambari
提示进行更改,然后再重启该服务试试,应该就可以成功启动了。
点关注,不迷路
好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是人才。
白嫖不好,创作不易。各位的支持和认可,就是我创作的最大动力,我们下篇文章见!
如果本篇博客有任何错误,请批评指教,不胜感激 !
原文作者: create17
原文链接: https://841809077.github.io/2019/01/18/Kerberos/基于Ambari禁用Kerberos.html
版权声明: 转载请注明出处(码字不易,请保留作者署名及链接,谢谢配合!)