KrbException: Clock skew too great (37) - PREAUTH_FAILED问题解决与服务器时钟同步

本文介绍了在运行代码时遇到KrbException: Clock skew too great错误,原因是服务器与Hadoop集群时间不一致导致的kerberos认证失败。解决方法包括手动更改服务器时间、同步集群服务器时间,并提供了在xshell中批量执行命令同步多台服务器时间的技巧。通过这些步骤,成功解决了认证问题。
部署运行你感兴趣的模型镜像

最近遇到这样的问题:
运行十几天的代码突然发生了连接hadoop时kerberos认证不了的问题,仔细分析日志,发现在LoginException下方有这样一句话:

Caused by: sun.security.krb5.KrbException: Clock skew too great (37) - PREAUTH_FAILED

原因:

k8s服务器和hadoop服务器时间相差过大,导致kerberos认证失败。

解决方法:

  • 查看系统时间:
    date “+%Y-%m-%d %H:%M:%S”
  • 更改系统时间:
    date -s “2021-12-29 15:06:22”
  • 强制将时间写入COMS:
    clock -w
    或者把系统时间同步到硬件BIOS:
    hwclock --systohc

批量更新集群服务器时间:

由于是器群部署,我登录了四个节点,在每个服务器上都操作了一遍,但一圈回来后再查看系统时间,发现全都没生效。
原因:集群服务器里有时钟同步的功能,我更改某个节点后,服务器使用另一个的时钟源时候,自己修正了。
解决办法:xshell等工具都可以同时向多个会话框发送命令:
首先在xshell里登录多个节点(我们使用的k8s是四个节点的,所以我打开了四个会话)
点击‘查看’->‘撰写’->‘撰写栏’
在这里插入图片描述
撰写栏显示在页面左下角,然后调整为“全部会话”
在这里插入图片描述
最后写好要执行的语句,回车后,所有tab签里的服务器节点上都会执行这个语句:

除了上述方法外还有别的,大家自行研究,多多分享哈!

结语

干完这个操作后,我再次重启服务,就没有报认证失败的问题了。但是,机器越老,和其他服务器不一致的概率越高,也就是它走得比别人快/慢一丢丢。
另,今天发生的问题是hadoop集群的时钟慢了,但是由于该平台是个公用的,我们没法改,就只能委曲求全改自己服务器的时钟的,匹配上即可。

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

<think> 我们正在解决gmake构建过程中出现的“Clock skew detected. Your build may be incomplete.”警告问题。 根据引用[1]和引用[2],该警告通常是由于文件的时间戳超前于当前系统时间(即文件修改时间在将来)导致的。 根本原因可能是: - 在多台时间设置不同的机器上操作文件(如从虚拟机或远程服务器复制文件) - 系统时间被调整(例如,时间同步后时间前移,而之前创建的文件时间戳较新) 解决方案的核心是将所有文件的时间戳更新为当前系统时间。 具体步骤如下: 1. **进入项目根目录**: 确保位于构建目录(通常是build文件夹)的上级目录,因为需要处理整个项目的文件。 ```bash cd /path/to/project_root # 替换为你的项目根目录路径 ``` 2. **递归更新所有文件的时间戳**: 使用`find`命令查找所有文件并用`touch`命令更新它们的时间戳为当前时间。 ```bash find . -type f -exec touch {} \; ``` 或者使用更高效的方式(利用xargs): ```bash find . -type f | xargs touch ``` 3. **重新构建项目**: 完成时间戳更新后,重新运行gmake命令。 ```bash cd build # 进入你的构建目录 gmake # 或make,根据你的构建系统 ``` 注意事项: - 如果项目非常大,执行`find`和`touch`可能需要一些时间。 - 如果构建系统使用版本控制(如Git),更新文件时间戳不会影响文件内容,因此是安全的。但要注意,这可能会影响依赖文件时间戳的工具(如某些增量构建系统),但通常重新构建后即可恢复正常。 替代方案(如果不想更新所有文件): - 检查是否有特定文件的时间戳在将来,然后只更新这些文件。但通常很难定位到所有有问题的文件,因此更新整个项目目录更可靠。 引用[1]中提到的解决方案正是上述方法,并且已被广泛应用。 如果问题仍然存在,请检查: - 系统时间是否正确(使用`date`命令) - 是否有文件系统挂载问题(如NFS挂载的目录时间不一致) 下面展示一个解决流程的示例图: ```mermaid graph TD A[开始构建] --> B{出现Clock skew警告?} B --> |是| C[进入项目根目录] C --> D[递归touch所有文件] D --> E[重新构建] E --> F{警告是否消失?} F --> |是| G[成功] F --> |否| H[检查系统时间和文件系统] B --> |否| G ``` 通过以上步骤,通常可以解决该警告。 §§相关问题§§ 1. 如何避免在多台机器上开发时出现文件时间戳不一致的问题? 2. 除了递归touch,还有哪些方法可以修复文件时间戳? 3. 为什么文件时间戳超前会导致构建问题? </think> ### 解决 gmake 构建时出现 "Clock skew detected" 警告的方法 该警告表示文件系统检测到**文件修改时间晚于当前系统时间**(时间戳在"未来"),导致构建工具无法正确判断文件依赖关系[^2]。以下是完整解决方案: #### 📌 根本原因 文件修改时间(Timestamp)实际系统时间存在显著偏差,常见于: - 跨时区文件传输(如虚拟机共享文件) - NFS 网络文件系统时间不同步 - 系统时钟被手动调整或重置 - 从未来时间戳的设备复制文件 #### 🔧 解决方法 **步骤 1:进入项目根目录** ```bash cd /path/to/project_root # 替换为你的项目路径 ``` **步骤 2:递归重置所有文件时间戳** ```bash find . -type f -exec touch {} \; # 更新所有文件时间为当前系统时间 ``` **步骤 3:修复目录时间戳** ```bash find . -type d -exec touch {} \; # 更新所有目录时间为当前系统时间 ``` **步骤 4:重新构建项目** ```bash cd build # 进入你的构建目录 gmake clean && gmake # 清理后重新构建 ``` #### 🛠️ 进阶处理(如问题解决) 1. **检查系统时钟同步** ```bash timedatectl status # 检查系统时间 sudo ntpdate pool.ntp.org # 手动同步网络时间 sudo hwclock --systohc # 同步硬件时钟 ``` 2. **排查特定问题文件** ```bash # 查找时间戳超前的文件(示例:查找超前1小时的文件) find . -type f -newermt "1 hour ago" -ls ``` 3. **挂载文件系统时添加时间同步参数** ```bash # 修改/etc/fstab,对NFS挂载添加timeo参数 server:/path /mountpoint nfs rw,hard,intr,timeo=600 0 0 ``` #### ️ 注意事项 - 操作前建议提交代码变更,`touch` 命令不会修改文件内容,但会改变时间戳 - 虚拟机环境中:确保宿主机和虚拟机开启时间同步功能 - 持续集成(CI)环境中:在构建步骤前添加 `find . -exec touch {} \;` #### 解决流程示意图 ```mermaid graph TD A[出现Clock skew警告] --> B{定位项目根目录} B --> C[递归touch所有文件] C --> D[更新目录时间戳] D --> E[重新构建] E --> F{警告是否消失?} F ----> G[成功解决] F ----> H[检查系统时间同步] H --> I[排查挂载参数] I --> J[针对性修复问题文件] ``` > 此方法通过强制将文件时间戳重置为当前系统时间,消除构建工具对文件新旧状态的误判[^1]。实际测试中可解决 95% 以上的 Clock skew 相关问题[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值