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

SaltStack PostgreSQL返回器异常:离线Minion结果未缓存

SaltStack PostgreSQL任务结果缓存异常排查与解决

我尝试将SaltStack的任务返回结果缓存到PostgreSQL,已按照官方文档修改Master节点配置,但返回器未按预期工作。

以离线Minion(名称gcp2926devapp07)为例:

  • 使用本地缓存时,salt-run jobs.lookup_jid可正常返回结果
  • 切换到PostgreSQL缓存后,无法获取结果
  • 数据库中jids表存在该任务的JID记录,但salt_returns表无对应条目
  • 执行salt-run jobs.lookup_jid <JID>无输出,即使添加missing=true参数也无效

一、Master节点配置

####### return returner data to postgres
returner.postgres.host: 'abcd.postgres.database.azure.com'
returner.postgres.user: 'admin'
returner.postgres.passwd: 'P@ss'
returner.postgres.db: 'salt_dev_returner'
returner.postgres.port: 5432

###### send job retuns to postgreql
master_job_cache: postgres

###### send event data to postgresql
event_return:
  - postgres


#ext_job_cache: postgres
runner_returns: True

二、数据库查询结果

查询jids表

salt_dev_returner=> select * from jids where jid='20250127100954811966';
         jid          |                                                                                                                    load
----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 20250127100954811966 | {\"cmd\": \"publish\", \"tgt\": \"gcp2926devapp07\", \"fun\": \"test.ping\", \"arg\": [], \"tgt_type\": \"glob\", \"ret\": \"\", \"jid\": \"20250127100954811966\", \"kwargs\": {\"show_timeout\": true, \"show_jid\": false, \"delimiter\": \":\"}, \"user\": \"root\", \"to\": 20}

查询salt_returns表

salt_dev_returner=> select * from salt_returns where jid='20250127100954811966';
 fun | jid | return | full_ret | id | success | alter_time
-----+-----+--------+----------+----+---------+------------
(0 rows)

三、调试日志

[DEBUG   ] Checking whether jid 20250127100954811966 is still running
[DEBUG   ] Closing AsyncReqChannel instance
[DEBUG   ] retcode missing from client return
[DEBUG   ] return event: {'gcp2926devapp07': {'failed': True}}
[DEBUG   ] The functions from module 'localfs' are being loaded by dir() on the loaded module
[DEBUG   ] LazyLoaded localfs.init_kwargs
[DEBUG   ] The functions from module 'localfs' are being loaded by dir() on the loaded module
[DEBUG   ] LazyLoaded localfs.init_kwargs
[DEBUG   ] The functions from module 'no_return' are being loaded by dir() on the loaded module
[DEBUG   ] LazyLoaded no_return.output
gcp2926devapp07:
    Minion did not return. [Not connected]

四、命令执行结果

[root@azr6387devapp01 ~]# salt-run jobs.lookup_jid 20250127100954811966
[root@azr6387devapp01 ~]#
[root@azr6387devapp01 ~]# salt-run jobs.lookup_jid 20250127100954811966 missing=true
[root@azr6387devapp01 ~]#

排查与解决步骤

  1. 启用ext_job_cache配置
    取消配置中#ext_job_cache: postgres的注释,设置为ext_job_cache: postgres。master_job_cache仅存储任务元数据(对应jids表),ext_job_cache负责存储包括离线失败状态在内的任务返回结果。

  2. 验证数据库用户权限
    确保PostgreSQL用户admin对salt_dev_returner数据库的salt_returns表拥有INSERT权限,执行以下SQL确认:

GRANT INSERT ON salt_returns TO admin;
  1. 重启Salt Master服务
    修改配置后必须重启服务使设置生效:
systemctl restart salt-master
  1. 重新测试验证
    重新执行针对离线Minion的任务,查询salt_returns表确认是否生成记录,再执行salt-run jobs.lookup_jid <JID> missing=true,验证是否能返回离线提示信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:43:16