最近我在我的集群中启用了kerberos,一切都运行良好,直到我的kerberos登录到期,比如12小时.此时我创建的任何连接,使用这些连接创建的任何表都会在我使用它们时抛出.这可能会使我的应用程序崩溃,具体取决于我如何处理它.
我不介意崩溃,因为我的应用程序是由滑块管理的,当它下降时会复活应用程序,但这只会在HBase被"使用"时发生(即我在一个现在陈旧的桌子上调用方法连接)可能是由用户交互引起的,这会导致用户体验不佳.
我不希望身份验证实现细节遍及我的应用程序,也不希望更频繁地创建连接对象,因为这是一个代价高昂的操作,会产生大量的RPC调用(zookeeper元数据位置开始).
有没有一个共同的策略(最好是在HBase客户端中内置)来管理kerberos身份验证到期并在发生这种情况时更新HBase连接/表?
Sam*_*ter 25
Kerberos TGT具有寿命(例如12小时)和可更新寿命(例如7天).只要票证仍然有效并且仍然可以续订,您可以请求"免费"续订 - 无需密码 - 并且重置终身计数器(例如,12小时再次启动).
Hadoop身份验证库生成一个特定的Java线程,用于自动续订当前的TGT.它有点难看,使用kinit -R命令行而不是JAAS库调用,但它可以工作 - 请参阅HADOOP-6656
所以,如果你让Slider在启动时创建一张可更新的票,如果你可以贿赂你的SysAdmin来提高默认值(参见客户端配置)和max(比较KDC conf)可续订的生命周期,比如30天,那么您的应用程序可以使用初始TGT直接运行30天.一个很好的改进.
~~~~~~~~~~
如果你真的渴望永恒...对不起,但你实际上会有一些编程要做.这意味着一个专门的线程/流程负责或自动重新创建 TGT.
loginUserFromKeytab()然后checkTGTAndReloginFromKeytab()不时运行
kinit(b)产生一个子流程,定期kinit再次触发(c)启动你的Java应用程序,然后当你的应用程序永久终止时杀死子流程警告:如果某个其他线程碰巧在重新创建TGT时打开或重新打开连接,则该连接可能会失败,因为缓存在访问它的确切时间是空的("竞争条件").下一次尝试将成功,但期望您的日志中出现一些流氓警告.
~~~~~~~~~~
最后的建议:您可以通过设置环境变量,为您的应用程序使用私人票证缓存(即,您可以在同一节点上使用相同的Linux帐户,但使用不同的Kerberos主体运行多个应用程序)KRB5CCNAME,只要它是"FILE:"缓存即可.
| 归档时间: |
|
| 查看次数: |
7335 次 |
| 最近记录: |