我们的设置:1 个应用程序,数十个实例。每个实例都是 Baremetal/KVM 或 vmware VM/LXC 容器之一(取决于所需大小)。
我们通过 puppet (masterless) 更新所有实例,它由 mcollective 执行。效果很好。
问题是硬盘负载过高,当 Puppet 在所有实例上同时执行时,
当我们执行时mco rpc puppetrun run
,puppet会立即在集群中的所有机器上执行,从而导致由于解压deb包而导致硬盘过载。
我们希望同时在有限数量的服务器上顺序运行 mcollective。
我们已将 mcollective 执行更新为:
mco rpc puppetrun run --batch XXX --batch-sleep YYY
这很有帮助,但并不理想,因为有时我们部署小的更改,这些更改会在一秒钟内处理,有时我们会部署伴随数据库迁移的较大更改,这需要几十秒才能完成。
我们很高兴能得到关于如何处理这个问题的提示。
此外,我们希望跳过所有需要外部库存的解决方案,因为实例数量是动态变化的。Mcollective 在这方面做得很棒。
答案1
目前正在考虑其中一种解决方案(我个人不喜欢):
for i in $(mco ping); do
mco rpc puppetrun run --with-identity $i
done
这将按顺序逐个运行 mcollective。
但我正在寻找更好的解决方案。