问题描述
如何实现一种状态,等待其他小兵完成某些工作然后执行某些状态?
例如,我有一个名为minion-aha1到minion-aha3的奴才集群,并且在这3个奴才上安装了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模式,并且我可以设置谷物的领导者,只是很好奇如何将上述过程缩小到单行,即
salt 'minion-aha*' state.apply hadoop.hbase_to_ha
甚至是salt.orch状态都可以接受。由于minion-aha1永远不知道其余小兵的状态,因此上述操作将失败。换句话说,如果开发人员幸运的话,它可能成功运行一次,但我希望解决方案每次都能成功运行。
谢谢。
解决方法
如果要在不使用业务流程SLS的情况下解决此问题,则可以查看以下方法之一:
- 使用imap-simple将一个小兵的信息发布到Master,然后其他人可以检索该信息
- 使用Salt Mine允许一个Minion生成要在另一个上执行的作业