关于saltstack的job问题
问题背景:搭建一个多节点后端集群,使用saltstack作为底层管理,使用Python封装saltstack接口成逻辑层。通过逻辑层的调用实现对整个集群的运维管理。
问题:随着项目中模块的增多,发现saltstack并不能很好的满足集群管理功能。原因就是saltAPI的返回值不一定正确。简单的来讲,salt每一个接口(以下所有的saltAPI均指salt同步接口)调用时都会产生一个job,当job在5s(默认参数)内没有返回时候,会产生一个fetch-job去查找执行的job,每10s检测一次,判断job是否还在运行,然后返回结果。但salt的机制中fetch-job不一定能拿到job的返回值,为不可信的。在实际测试中发现,调用salt-api时,salt-api返回为空(正常应该为一个字典或字符串,多个salt-api执行时容易出现异常情况),使用fetch-job去查找job,试图获取返回值,但发现fetch-job也为不可信的(原因就是fetch-job一旦有一次查找job失败,则停止查找)
环境准备:
salt --version查看版本:salt 2017.7.1 (Nitrogen)
两台机器,搭建salt-master(ip:192.168.136.191) salt-minion(ip:192.168.136.191,ip:192.168.136.192)

1.演示fetch-job
在191主机上执行test.sleep 20,然后通过salt-run查看

通过salt-run jobs.list_jobs 查看上一步中执行的任务

分析:其中第一个标注中,是执行的test.sleep 20秒任务,然后在5s之后,也就是15:08:41时候,触发了一个find_job。此时,find_job成功找到job,所以没有返回。第三个标注中,触发了第二个find_job,在这个job之后没有find_job任务了(find_job在没有找到job时,不继续执行了),可以认为这个find_job是没有找到job了。
补充测试,下面一个是执行test.sleep 25秒的结果,分析同上。

2.继续探究
我尝试模拟fetch-job失败的情况,但是没有重现。可能的原因是模拟的系统太单一,没有完整项目的复杂。完整的项目中,涉及到的模块多,都是调用salt-api接口,就可能造成fetch-job失败的情况。总的来说,在系统简单的时候,salt-api返回值是可信的,但随着系统模块的增加,会导致返回值不能成功返回。
没有模拟出环境就解释下用到的几个接口(截图自官方文档)
1.查询所有的job,通常job任务比较多,推荐使用 " > jobs.txt" 重定向到一个文件,再进行查找

2.配合missing=True参数使用,能够查询find_job是否丢失(实际上fetch-job也是一个job任务)。

3.打印job执行结果,在job没有执行结束的时候调用,返回为 minion not return

4.查找一个job,功能类似salt自带的fetch-job

总结:
1.简单系统在使用salt-api时候,salt-api能按照期望的返回。(具体什么程度为简单,没有具体的数据,只是真实项目中做到后期,模块量庞大的时候发现了这个问题)
2.复杂系统使用salt-api接口的时候,会有以下情况:
a.单纯的使用salt-api接口,接口已经返回,返回为空(没有返回值)。但实际job依然在执行,待job真实执行结束后,通过salt-run jobs.print_job xxx,能查看返回值。在没有执行结束的时候查看,返回为【minion not return】(xxx为jid, 即job id,文中图里的每一组数据唯一标识)
b.为了解决a中问题,等待fetch-job不再查找时,认定job执行成功。在实际操作中,观察到fetch-job可能会失败,即job实际还在运行,但fetch-job查找job失败,然后不再继续fetch-job。(观察方法:fetch-job已经不再查找job,但手动使用saltutil.find_job能查找到job还在继续运行)
c.在job没有执行结束的时候,使用jobs.list_jobs打印出的job没有返回,但在最终job执行结束后,原来的job会有返回值。说明salt会去修改job执行的结果,并不是类似日志一样,单纯根据时间来记录
3.实际情况中,最终所有的job能执行成功,但问题的关键在于这个成功是不可控的。无法获知一个指令执行的结束时间,也就无法获取其执行结果。
问题依然没有解决,如果有相同问题的朋友,欢迎联系我交流 :)
关于saltstack的job问题的更多相关文章
- saltstack初探
salt-key -y -d linux-node1 #删除linux-node1节点的认证 salt -G 'cpuarch:x86_64' grains.item num_cpus >> ...
- saltstack命令执行过程
saltstack命令执行过程 具体步骤如下 Salt stack的Master与Minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc salt ...
- Saltstack之salt-master的打开文件数问题
一.引言: 单个salt-master下的minion数已经达到2101个了,所以在master日志有如下的提示: 2016-09-09 11:36:22,221 [salt.utils.verify ...
- Saltstack
一.Satlstack的概述 Saltstack是什么? Salt是一种和以往不同的基础设施管理方法,它是建立在大规模系统高速通讯能力可以大幅提升的想法上.这种方法使得Salt成为一个强大的能够解决基 ...
- python virtualenv 安装运行saltstack
需求产生场景: 1.python的virtualenv虚拟环境非常的好用. 2.saltstack作为运维自动化的一个重要组件也挺好用的. 但是: 1.saltsatck ...
- 自动化运维:网站svn代码上线更新(flask+saltstack)
阶段性总结: 跌跌撞撞的用了一周左右的时间做完了网站自动升级功能,中间遇到了很多的问题,也学到了很多,在此做一个总结. 1.整体架构: 后台:nginx+uwsgi #nginx提供w ...
- saltstack安装配置(halite)
saltstack官方提供了一个简单的web UI--halite.但是给出的安装配置方法实在没法实现,在网上找了几篇博客,见文章末尾的参考链接,可以用起来了.但是功能有点简单.这篇文章记录安装配置h ...
- Saltstack异步执行命令(十三)
Saltstack异步执行命令 salt执行命令有时候会有超时的问题,就是命令下发下去了,部分主机没有返回信息,这时候就很难判断命令或任务是否执行成功.因此,salt提供异步执行的功能,发出命令后立即 ...
- Saltstack之SSH(十一)
Saltstack之SSH 安装 yum install -y salt-ssh 官方文档 https://docs.saltstack.com/en/latest/topics/ssh/index ...
- Saltstack之Syndic(十)
Saltstack之Syndic 使用条件: 1.salt syndic必须运行在一台master上 2.salt syndic必须依赖更高级的master 安装 yum install -y sal ...
随机推荐
- 方正璞华Java面试总结(武汉)
方正璞华Java面试总结(武汉) 现在社会急缺复合型人才,计算机与日语的结合,具备这两种能力的人不愁工作,最后他们大多到的也是日企,甚至到日本去工作.至今为止接触的日企有光庭.方正璞华.先锋·商泰.英 ...
- Django- 开发通用且万能的的权限框架组件
本节内容 需求讨论 权限设计 代码设计 自定义权限钩子 业务场景分析 假设我们在开发一个培训机构的 客户关系管理系统,系统分客户管理.学员管理.教学管理3个大模块,每个模块大体功能如下 客户管理销售人 ...
- tensorflw-gpu 运行 。py程序出现gpu不匹配的问题
安装好了tensorflow-gpu版本,然后程序中写好了 with tf.device('/gpu:0'): 但是python3 .py程序时还是有错误. 报错为: 2018-04-24 12: ...
- 拦截器(Interceptor)中的invocation.invoke()是什么意思?
拦截器(Interceptor)中的invocation.invoke()是什么意思? 最佳答案: invocation.invoke() 就是通知struts2接着干下面的事情 比如 调用下一个拦截 ...
- OSCP Learning Notes - Exploit(5)
Java Applet Attacks Download virtual machines from the following website: https://developer.microsof ...
- RocketMQ在面试中那些常见问题及答案+汇总
0.汇总 RocketMQ入门到入土(一)新手也能看懂的原理和实战! RocketMQ入门到入土(二)事务消息&顺序消息 从入门到入土(三)RocketMQ 怎么保证的消息不丢失? Rocke ...
- 资深CIO介绍如何选型OA系统的?
OA办公系统成为企业管理的标配软件,在于可有效加强组织管理能力,提高员工协同效率,助力企业科学决策,合理分配企业资源,提升企业综合实力与市场竞争力.企业OA选型的经验总结来说也就是品牌.技术.产品.服 ...
- 服务注册与发现【Eureka】- Eureka简介
什么是服务治理 SpringCloud 封装了 Netflix 公司开发的 Eureka 模块来 实现服务治理. 在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所 ...
- javascript实战 : 简单的颜色渐变
HTML <div id="color"></div> CSS .item{ display:inline-block; margin:10px; widt ...
- 【Floyd算法+贪心】 travel 计蒜客 - 45275
题目: 有 n 个景点,从一个景点 i 旅行到另一个景点 j 要花费 Ai,j=Aj,i(n≤100),现在给出由 m(≤1e5) 个景点的组成序列 A,求:在所有 "有子序列 A 的序列中 ...