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 ~]#
排查与解决步骤
启用
ext_job_cache配置
取消配置中#ext_job_cache: postgres的注释,设置为ext_job_cache: postgres。master_job_cache仅存储任务元数据(对应jids表),ext_job_cache负责存储包括离线失败状态在内的任务返回结果。验证数据库用户权限
确保PostgreSQL用户admin对salt_dev_returner数据库的salt_returns表拥有INSERT权限,执行以下SQL确认:
GRANT INSERT ON salt_returns TO admin;
- 重启Salt Master服务
修改配置后必须重启服务使设置生效:
systemctl restart salt-master
- 重新测试验证
重新执行针对离线Minion的任务,查询salt_returns表确认是否生成记录,再执行salt-run jobs.lookup_jid <JID> missing=true,验证是否能返回离线提示信息。
内容的提问来源于stack exchange,提问作者Rahul Singh
相关产品推荐
相关产品推荐

