gpt4 book ai didi

rest - 有没有什么方法可以在 Chef 节点中获得互斥?

转载 作者:行者123 更新时间:2023-12-04 22:44:41 25 4
gpt4 key购买 nike

例如,如果一个进程在厨师客户端运行时更新节点,厨师客户端将覆盖节点数据:

  • Chef-client 获取节点数据(状态 1)
  • 进程A获取节点数据(状态1)
  • 进程A在本地更新节点数据(状态2)
  • 此过程保存节点数据(状态 2)
  • 厨师客户端在本地更新节点数据(状态 2*)
  • Chef-client 保存节点数据,该节点数据不包含来自进程 A(状态 2)的更改。厨师客户端覆盖节点数据。 (状态 2*)

  • 出现同样的问题,如果我们有两个进程同时保存节点数据

    编辑

    我们需要进行外部修改,因为我们有一个漂亮的 Chef 服务器 UI 来远程管理大量计算机,显示为一棵树(类似于 LDAP)。管理员可以从这里更新配方的值。这个项目是开源的: https://github.com/gecos-team/

    虽然我们有一个信号量系统,但我们检测到如果我们有两个或更多的并发请求,我们可能会遇到并发问题:
  • 常规情况是系统works
  • 但有时系统does not work

  • 编辑 2

    I have added a document with a lot of information about our problem.

    最佳答案

    抛出我会为这个案例做的事情作为答案:

  • 有一个分布式锁机制,比如
    This
    我自己没有使用它,它只是为了想法
  • 构建一个启动/报告/错误处理程序,它将
  • 在开始时获取对 DLM 中节点名称的锁定 1。
  • 如果它不能中止运行或等到锁空闲
  • 最后(报告或错误)释放锁。
  • 修改External system 和上面的handler一样,修改前获取锁,完成后释放。
  • 注意锁的生命周期!!!它应该比你的 Chef Run 长加上一个边距,并且 UI 应该确保它的锁在写入之前仍然存在,如果没有则中止。


  • 摆脱处理程序(但您仍然需要锁定 UI)的一种方法是利用 reporting api (Chef 12的高级功能,25个节点以下免费,向上需要许可证)

    这有点令人费解,需要节点进行报告(因此chef-server url 应以organizations/结尾,并且客户端版本应高于11.16 或 use the backport)

    那么您可以询问 runs for a node并检查该节点是否有一个处于启动状态,并等待它结束。

    关于rest - 有没有什么方法可以在 Chef 节点中获得互斥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33419695/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com