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,删除旧数据即可解决。

 

posted @ 2020-03-10 15:45  talentzemin  阅读(189)  评论(0编辑  收藏  举报