SaltStack ----Job管理
1 什么是Job?
在saltstack中执行任何一个操作都会在master上产生一个jid号,minion端接收到指令开始执行时,会在cache目录下地proc目录创建一个以jid命名的文件这个文件的内容就是本次操作的记录,当操作完成后悔自动删除该文件,master端会记录每次操作的详细信息,在master的cache目录的job下
2 Job cache的两种方式
(1) master端Job缓存目录: cd /var/cache/salt/master/jobs/
(2) 查看master的配置文件:vim /etc/salt/master
- Job缓存默认保存24小时
3 将Job存储到数据库
3.1 External Job Cache
master的返回加入mysql数据库
配置了 External Job Cache 时,数据会和往常一样,返回到 salt master 本地的默认缓存。同时 minion 会运用salt returner 模块发送到配置的外部存储中
- 优点:存储数据时不会对Salt Master造成额外的负担
- 缺点:每个Salt-Minion连接到外部作业缓存,这可能导致大量连接。还需要对所有minion配置returner模块,才能返回数据到外部存储中
3.1.1 sale-minion的配置
(1)编辑server2的sale-minion配置文件:vim /etc/salt/minion
ext_job_cache: mysql
mysql.host: '172.25.12.1'
mysql.user: 'salt'
mysql.pass: 'westos'
mysql.db: 'salt'
mysql.port: 3306
(2)重启sale-minion服务: systemctl restart salt-minion.service
3.1.2 sale-master端的配置
(1)安装数据库:yum install mariadb-server -y
(2)创建python的mysql模块:yum install MySQL-python -y
(3) 启动数据库服务:systemctl start mariadb.service
(4)数据库授权:grant all on salt.* to salt@'%' identified by 'westos';
(5)salt数据库文件:vim salt.sql
CREATE DATABASE `salt`
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
USE `salt`;
--
-- Table structure for table `jids`
--
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;
--
-- Table structure for table `salt_returns`
--
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;
--
-- Table structure for table `salt_events`
--
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;
(6) 将salt.sql导入数据库:mysql < salt.sql
(7) 测试:salt server3 test.ping --return mysql
- 登陆数据库,查看salt库的tables中是否有记录server3的jid
mysql
use salt;
show tables;
3.2 Master Job Cache
在master上配置master job cache,而不是每个minion上配置external job cache。在此配置中,minion照常将返回的数据发给master上的默认job cache,然后在使用Salt Returner模块将数据发送给外部系统
salt-maste端的配置和External Job Cache 方式salt-master的配置除了需要修改master端的配置文件之外其他的都相同,minion端不用配置
(1)编辑salt-maste的配置文件:vim /etc/salt/master
master_job_cache: mysql
mysql.host: 'localhost'
mysql.user: 'salt'
mysql.pass: 'westos'
mysql.db: 'salt'
mysql.port: 3306
(2) 重启salt-master服务:systemctl restart salt-master.service
(3) 测试:salt '*' test.ping
- 登陆数据库,查看salt库的tables中是否有记录server2和server3的jid
mysql
use salt;
show tables;
4 job管理
- 获取任务的jid:
salt '*' test.ping -v
- 通过jid获取此任务的返回结果:
salt-run jobs.lookup_jid 20210122132950691006
- 列出当前master jobs cache中所有job:
salt-run jobs.list_jobs