zoukankan      html  css  js  c++  java
  • DSC注册Agent失败- InternalServerError

    问题

    有大概5台Agent Server,注册的时候,发现2台可以成功,其他的不成功。

    注册失败的错误日志如下:

    初步尝试

    首先,Pull Server已经平稳的运行了几年了,此次注册还有部分Agent能成功,所以,首先排除Pull Server的问题。包括网络问题和代码逻辑问题。

    明显是失败的Agent存在某些问题,检索关键词可以找到官方文档:

     

    简单来说是证书的CN name存在问题,但我们从Agent上发其他请求是可以的,所以可以排除该问题。

    我们使用curl命令进行请求测试,如下图:

    其他尝试

    既然有注册成功的Server,我们可以和注册失败的Server进行一些其他方面的对比,看是否是系统配置问题(展示命令为主,非实际操作)

    对比操作系统

    对比PowerShell版本

    对比NET 版本

     

    对比WinRM设置

    对比网络设置

    结果发现,2台Server除了操作系统版本不一样以外,其他的配置完全一样。

    其他尝试

    这个时候,就没有思路了,Pull Server不可能针对某些Server进行设置,况且就是在Agent应用LCM 配置的时候出错了,查下数据库,确保它确实没有注册成功(写入数据)。

    根据AgentId查询,果然是没有写入数据。

    理论上,即使有数据,重复注册也是可以的。

    到此,实在没有好办法了。(其实就在此处错过了)

    后来

    总要给客户一个交代的,找不出来原因,我们可以通过人工手动向数据库插入数据进行注册。

    我们写了insert的SQL脚本,运行,提示:已经有相同的Node Name了!

    柳暗花明!

    怎么会有Node Name了呢,刚明明使用AgentId查询还没有呢?

    使用Node Name查询,确实查到了一条,但是AgentId却不是现在Server的。

    也就是说,该Agent Server在之前某个时候注册过(通过Get-DSCLocalcongurtionManager命令也可以看出来),但后来AgentId变化了,所以新注册的时候,由于已经存在该Node Name,导致数据库插入数据失败。

    删除该脏数据后,重新注册,一切好了。

    AgentId为什么会改变呢?我们通过systeminfo命令看到,该系统一个月前重装了,所以产生了新的guid给LCM,也就是新的AgentId。

    吐槽

    • DSC这块由微软打包提供,出现问题,错误抛出的比较笼统,不好明确的定位出问题
    • 其实一开始就发现该Server已经注册过,应该查询数据库,并且思维缜密些,使用Node Name + AgentId+ ip等分别查询,确保数据的问题。
    • 该问题出现的场景实在特殊,也增加了排查的难度。
    • DSC相关的资料实在太少,而且不够详细。

    总结

    总之,该问题出现的原因就是DSC数据库中已经存在相同的Node Name,删除旧数据即可解决。

  • 相关阅读:
    docker架构的详解
    docker的核心原理-cgroup
    网络运维面试题
    100道linux运维笔试题
    运维岗位面试题集合
    python——筛子游戏
    同道前辈
    delphi中使用SocketStream读写数据的技巧
    百度地图API
    HTML中小meta的大作用
  • 原文地址:https://www.cnblogs.com/talentzemin/p/12456135.html
Copyright © 2011-2022 走看看