是否有任何方法可以在厨师节点中进行互斥?

时间:2015-10-29 16:27:20

标签: rest chef mutex

例如,如果进程在chef-client运行时更新节点,则chef-client将覆盖节点数据:

  1. chef-client获取节点数据(状态1)
  2. 进程A获取节点数据(状态1)
  3. 进程A在本地更新节点数据(状态2)
  4. 此过程保存节点数据(状态2)
  5. chef-client在本地更新节点数据(状态2 *)
  6. chef-client保存节点数据,此节点数据不包含进程A(状态2)的更改。 chef-client覆盖节点数据。 (州2 *)
  7. 如果我们有两个进程在同一时刻保存节点数据,则会出现同样的问题

    修改

    我们需要进行外部修改,因为我们有一个很好的Chef服务器UI来远程管理很多计算机,就像一棵树(类似于LDAP)。管理员可以从此处更新配方的值。这个项目是OpenSource:https://github.com/gecos-team/

    虽然我们有一个信号量系统,但我们检测到如果我们有两个或多个同时发出的请求,我们就会遇到并发问题:

    1. 常规情况是系统works
    2. 但有时系统does not work
    3. 编辑2

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

5 个答案:

答案 0 :(得分:3)

作为答案,抛出我将为此案件做的事情:

  1. 有一个像分布式锁定机制 This 我自己并没有使用它,只是为了这个想法
  2. 构建一个启动/报告/错误处理程序
    • 在开始时获取1中DLM中节点名称的锁定。
      • 如果它无法中止运行或等待直到锁定是免费的
    • 结束时(报告或错误)释放锁定。
  3. 修改外部系统以执行与上述处理程序相同的操作,在修改之前获取锁定并在完成时释放。
  4. 注意锁定寿命!!!它应该比Chef Run加上一个余量更长,并且UI应该确保在写入之前它仍然存在,如果没有则中止。
  5. 摆脱处理程序(但仍然需要锁定UI)的方法是利用reporting api(厨师12的高级功能,25个以下节点免费,需要向上许可)< / p>

    这个转折点有点复杂,需要节点做报告(所以chef-server url应该以组织/结尾,客户端版本应该高于11.16或use the backport

    然后你可以询问runs for a node并检查这个节点是否处于启动状态,并等到它结束。

答案 1 :(得分:3)

我建议您避免从外部应用程序更新Chef节点数据,并将所需的节点配置移动到Chef databag。

因此,节点将读取Chef节点数据和配置数据字节,并仅在节点数据中写入。而你的外部应用程序读取两个但只写在数据库中。

答案 2 :(得分:2)

在生产中发现了这个,并得出结论,没有直接编辑节点属性的安全方法。留给厨师 - 客户: - )

好消息是还有其他更可靠的方法来设置节点属性。在客户端运行时,可以安全地编辑Chef角色和环境,并且只有在下一次厨师运行期间才能生效。另外node attribute precedence rules确保您所做的任何设置都会覆盖配方可能做出的设置。

答案 3 :(得分:2)

Chef没有实现事务功能,并且默认情况下它不会自动在更新上重新聚合节点。它对于竞争条件是开放的,你可以尝试通过厨师 - 客户端运行中的更新节点属性来减少(在你做一些关键的事情之前),但你永远不会在一个可靠的工作设置中结束。

收敛时间越长,差距和腐败风险就越高。

Chef的节点属性仅用于在节点本身上运行的chef-client进行调试或修改,在高度并发/动态环境中几乎无用。

我会使用Consul.io来实时协调信号量和键/值配置数据。使用厨师配方或LWRP使用consul提供的各种界面(http,DNS,...)访问它。

你可以实现一个非常简单的推送工作任务来运行chef-client(恕我直言,比厨师的“推送工作”功能更容易,更强大,但没有集成在厨师的ACL /用户管理中),这也是有问题的{{ 3}}或使用by a distributed semaphore功能。当然,您也必须将此逻辑添加到节点更新脚本中。

然后,

Chef-client将在启动时检索锁定并阻止您在收敛时操纵数据,反之亦然。

答案 4 :(得分:0)

如果你想避免依赖其他外部服务,也许你可以使用某种时间切片。

粗略地说:节点只在奇数分钟启动厨师 - 客户端。 Api仅在几分钟内更新厨师数据(如果您有多个队列,则分配这些甚至几分钟)。