我试图编写一些将HBase转换为高可用模式的编排状态。要做到这一点,有两个检查要求:
- Datanode进程必须在
ALL
节点上启动并运行。 - HRegion进程必须在
ALL
节点上启动并运行。 - 转换后,namenode进程必须仅在
two
节点上启动和运行。
所以我免费得到了ALL
,例如
{# If all minions passed, then this will pass #}
2_1_example_pod_is_dn_running:
salt.function:
- name: cmd.run
- tgt: 'G@stype:hbase and G@pod_name:example_pod'
- tgt_type: compound
- arg:
- ps aux | grep datanode
- failhard: True
但是如何检查any
或两个?
{# Pseduo code. This won't work. #}
2_3_example_pod_is_nn_running:
- name: cmd.run
- tgt: 'G@stype:hbase and G@pod_name:example_pod'
- tgt_type: compound
- arg:
- ps aux | grep namenode
- successful_count: 2 {# <== namenode process has to be running on two minions #}
- failhard: True
所以,你想要的是知道哪个随从应该"失败"检查。如果你知道,你可以使用fail_minions来标记没有namenode的minions。
对于这样的事情,它几乎总是要么是具体的。在设置它时,您知道哪些随从将具有namenode。或者,为了跳过检查,使用子集只在2台服务器上启动namenode。子集将随机选择目标随从子集的服务器数量,并仅在该子集上运行命令。