如何实现等待其他 minions 完成某些工作然后执行某个状态的状态?

How to implement a state that wait for other minions finishing certain jobs then execute certain state?

如何实现等待其他minions完成某些工作然后执行某个状态的状态?

比如我有一个叫minion-aha1到minion-aha3的minions集群,我在这3个minions上安装了hadoop和hbase。现在,我想将它们转换为 HA 模式。假设 minion-aha1 是领导者。所以逻辑流程是:

Start hadoop and hbase on all 3 minions
-> minion-aha1 wait till rest of minions are hadoop and hbase are on and healthy
-> minion-aha1 call join (e.g. stop namenode, hdfs namenode -initializeSharedEdits, start namenode)
-> rest minions call nn2 (e.g. hdfs namenode -bootstrapStandby, start namenode)

我已经知道怎么把hbase转成HA模式,而且可以设置leader in grain,只是好奇上面的过程怎么缩成单行的,即

salt 'minion-aha*' state.apply hadoop.hbase_to_ha 

甚至 salt.orch 状态都可以接受。由于 minion-aha1 永远不知道其余 minions 的状态,因此上述操作会失败。换句话说,如果开发人员幸运的话,它可能 运行 成功一次,但我寻找的解决方案每次都会 运行 成功。

谢谢。

如果您想在不使用 Orchestration SLS 的情况下解决这个问题,您可以查看以下方法之一:

  • 使用 Salt Mine 将信息从 Minion 发布到 Master,然后可以由另一个 Minion 检索
  • 使用 Peer Communication 允许一个 Minion 生成要在另一个 Minion 上执行的作业

基本上我从这个答案中受益并做了一些修改:

对于发送到 salt master 的自定义事件,例如mycompany/hbase/status/*/start,我要发送事件-> saltutil.sync_all,然后是wait_for_event.