You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Salt-Master上针对Minion不可达情况做出响应

解决方案:通过Salt Master监控离线minion并触发minion2的服务启动

这确实是个常见的痛点——当minion离线时,它自己没法主动上报状态变化,所以得换个思路,从Salt Master这边入手来监控状态并触发后续动作。下面是两种经过验证的可靠方案:

方案一:使用Salt Master的minion_status Beacon(推荐)

Salt Master本身可以通过minion_status beacon监控所有minion的在线状态,当minion1从在线变为离线时,master会主动触发事件,咱们就可以基于这个事件配置reactor来控制minion2。

步骤1:配置Master的Beacon

在Salt Master上创建(或修改)beacon配置文件,比如/etc/salt/master.d/beacons.conf,添加以下内容:

beacons:
  minion_status:
    - interval: 60  # 每隔60秒检查一次minion状态
    - nodes:
        minion1: {}  # 只监控minion1的状态
    - disable_during_state_run: True

这个配置会让master每60秒检查一次minion1的状态,当它从在线切换到离线时,会触发salt/beacon/<master_id>/minion_status/minion1/down事件。

步骤2:配置Reactor规则

接下来配置master的reactor,让它监听上面的离线事件并执行动作。创建(或修改)/etc/salt/master.d/reactor.conf:

reactor:
  - 'salt/beacon/*/minion_status/minion1/down':
    - /srv/reactor/minion1_down.sls

这里指定了当minion1的离线事件触发时,执行/srv/reactor/minion1_down.sls这个reactor文件。

步骤3:编写Reactor执行脚本

创建/srv/reactor/minion1_down.sls文件,添加以下内容,实现让minion2启动目标服务(替换成你实际需要启动的服务名,比如nginx):

start_service_on_minion2:
  local.cmd.run:
    - tgt: minion2
    - fun: service.start
    - arg:
      - your_service_name  # 替换成你要启动的服务名

保存后,重启Salt Master服务让配置生效:

systemctl restart salt-master

方案二:使用Master的Schedule定期检查

如果beacon的方式不符合你的需求,还可以用Salt Master的schedule功能,定期主动检查minion1的在线状态,发现离线后直接触发动作。

配置Master的Schedule

在Master配置文件(比如/etc/salt/master.d/schedule.conf)中添加以下内容:

schedule:
  check_minion1_status:
    function: salt.cmd
    args:
      - run.manage.down
    kwargs:
      outputter: json
    interval: 60  # 每隔60秒检查一次
    onchanges:
      - local.cmd.run:
          tgt: minion2
          fun: service.start
          arg:
            - your_service_name  # 替换成目标服务名
    require_in:
      - local.cmd.run: check_minion1_status

这个配置会让master每60秒执行salt-run manage.down命令,检查离线的minion列表。当minion1出现在离线列表中时,就会触发在minion2上启动服务的动作。

测试验证

  1. 手动停止minion1的服务:systemctl stop salt-minion
  2. 等待配置的检查间隔(比如60秒)
  3. 查看minion2上的服务状态:salt minion2 service.status your_service_name,确认服务已启动

另外,你可以通过salt-run state.event pretty=True在master上实时查看事件流,确认离线事件是否正常触发。

内容的提问来源于stack exchange,提问作者bluefish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:58:54