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