企业 Saltstack 里的Job管理

  • 时间:
  • 来源:互联网
  • 文章标签:

Job简介

master在下发指令任务时,会附带上产生的jid。
minion在接收到指令开始执行时,会在本地的/var/cache/salt/minion/proc目录下产生该jid命名的文件,用于在执行过程中master查看当前任务的执行情况。
指令执行完毕将结果传送给master后,删除该临时文件。

我们在推送后看的输出结果就是,就是产生的job文件
在这里插入图片描述
当处于图形化管理的时候,推送的结果是看不到的,而这些存放结果的job文件,就是查看推送成功与否的重要指示

Job缓存默认保存24小时:

# vim /etc/salt/master
keep_jobs: 24

master端Job缓存目录:/var/cache/salt/master/jobs

为了可以长久性保存job文件并且可以随时方便的查看,就需要将job储存在数据库里,方式就是当minion节点返回数据给master是,master在将数据发送给数据库进行储存。

储存job到数据库

首先需要在master上安装数据库,启动mariadb就可以直接使用了,默认是没有密码的

[root@server1 salt]# yum install -y mariadb-server
[root@server1 salt]# systemctl start mariadb.service 

还需要安装MySQL-python插件支持使用

[root@server1 salt]# yum install -y MySQL-python

更改配置,开启return: mysql

[root@server1 salt]# vim /etc/salt/master
return: mysql
master_job_cache: mysql
mysql.host: 'localhost'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'

[root@server1 salt]# systemctl restart salt-master.service	#重启服务生效配置

在这里插入图片描述
需要编写salt.sql语句文件,给数据库导入job的数据

[root@server1 ~]# vim salt.sql
CREATE DATABASE  `salt`
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;
USE `salt`;
DROP TABLE IF EXISTS `jids`;
CREATE TABLE `jids` (
  `jid` varchar(255) NOT NULL,
  `load` mediumtext NOT NULL,
  UNIQUE KEY `jid` (`jid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `salt_returns`;
CREATE TABLE `salt_returns` (
  `fun` varchar(50) NOT NULL,
  `jid` varchar(255) NOT NULL,
  `return` mediumtext NOT NULL,
  `id` varchar(255) NOT NULL,
  `success` varchar(10) NOT NULL,
  `full_ret` mediumtext NOT NULL,
  `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  KEY `id` (`id`),
  KEY `jid` (`jid`),
  KEY `fun` (`fun`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `salt_events`;
CREATE TABLE `salt_events` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`tag` varchar(255) NOT NULL,
`data` mediumtext NOT NULL,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`master_id` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `tag` (`tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

导入因为我们没有设置数据库密码直接回车就可以

[root@server1 ~]# mysql -p < salt.sql 
Enter password: 
[root@server1 ~]# mysql
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| salt               |
| test               |
+--------------------+
5 rows in set (0.00 sec)

MariaDB [(none)]> grant all on salt.* to salt@localhost identified by 'salt';
Query OK, 0 rows affected (0.00 sec)	#添加授权用户

完成上述操作后,我们再去执行推送时,job数据就会自动保存在数据库里的salt库里的salt_returns表里

[root@server1 ~]# mysql
MariaDB [(none)]> use salt;
MariaDB [salt]> show tables;		#导入salt.sql会产生3张表
+----------------+
| Tables_in_salt |
+----------------+
| jids           |	#jid
| salt_events    |	#事件表
| salt_returns   |	#返回值的表
+----------------+

这样就部署好了job的返回数据自动储存在数据库的操作

Job的管理命令

查看所有minion当前正在运行的jobs(在所有minions上运行saltutil.running)
salt-run jobs.active

列出当前master jobs cache中所有job
salt-run jobs.list_jobs ,这个会展示你所有推送过的操作

从master jobs cache中查询指定jid的运行结果
salt-run jobs.lookup_jid

[root@server1 ~]# salt-run jobs.lookup_jid 20200609093635428312	#jid
server2:	#操作执行的结果
    server2
server3:
    server3

本文链接http://www.taodudu.cc/news/show-82998.html