Job的概念
1.master在下發指令任務時,會附帶上產生的jid。
Jid: job id 格式爲%Y%m%d%H%M%S%f
2.minion在接收到指令開始執行時,會在本地的/var/cache/salt/minion/proc
目錄下產生該jid命名的文件,用於在執行過程中master查看當前任務的執行情況。指令執行完畢將結果傳送給master後,刪除該臨時文件。
3.Job緩存默認保存24小時:
# vim /etc/salt/master
keep_jobs: 24
master端Job緩存目錄:
/var/cache/salt/master/jobs
job管理中的基本命令
saltutil模塊中的job管理方法
saltutil.running #查看minion當前正在運行的jobs
saltutil.find_job <jid> #查看指定jid的job(minion正在運行的jobs)
saltutil.signal_job <jid> <single> #給指定的jid進程發送信號
saltutil.term_job <jid> #終止指定的jid進程(信號爲15)
saltutil.kill_job <jid> #終止指定的jid進程(信號爲9)
salt runner中的job管理方法
salt-run jobs.active #查看所有minion當前正在運行的jobs(在所有minion上運行saltutil.running)
salt-run jobs.lookup_jid <jid#從master jobs cache中查詢指定的jid的運行結果
salt-run jobs.list_jobs #列出當前master jobs cache中的所有job
將job存儲到數據庫
除了默認作業緩存之外,Salt還提供了兩種額外的機制來將作業結果發送到其他系統(數據庫,本地系統日誌和其他系統):
External Job Cache
Master Job Cache
這兩種機制之間的主要區別在於返回結果是來自Salt Master還是Salt Minion。
官方文檔:
http://docs.saltstack.cn/ref/returners/all/salt.returners.mysql.html#module-salt.returners.mysql
External Job Cache
配置外部作業緩存後,數據會像往常一樣返回Salt Master上的默認
作業緩存,然後使用Salt Minion上運行的Salt返回器模塊將結果發送到外部作業緩存。
優點:存儲數據時不會在Salt Master上增加額外負載。
缺點:每個Salt Minion都連接到外部作業緩存,這可能會導致大量連接。 還需要額外的配置才能在所有Salt Minions上獲得返回者模塊設置。
實驗背景:
172.25.2.3 ser2 salt-master
172.25.2.4 ser3 salt-minion
172.25.2.5 ser4 salt-minion
實驗步驟:
1.在ser2上安裝數據庫:
yum install -y mariadb-server
systemctl start mariadb
2.創建數據庫
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;
3.將數據庫導入到mariadb,並且進行授權。
[root@ser2 ~]#mysql -uroot -pwestos< add.sql
[root@ser2 ~]# mysql
MariaDB [(none)]> use salt;
MariaDB [salt]> show tables;
+----------------+
| Tables_in_salt |
+----------------+
| jids |
| salt_events |
| salt_returns |
+----------------+
3 rows in set (0.00 sec)
MariaDB [salt]> grant all on salt.* to salt@'%' identified by 'salt'; # 授權所有主機可登陸
Query OK, 0 rows affected (0.00 sec)
MariaDB [salt]> grant all on salt.* to salt@'localhost' identified by 'salt';
4.minion端安裝python的mysql模塊,才能使得 salt能夠連接mysql
[root@ser3 ~]# yum install -y MySQL-python.x86_64 # 安裝mysql的接口
[root@ser3 ~]# vim /etc/salt/minion
return: mysql
mysql.host: '172.25.2.3'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306
[root@server3 ~]# yum install -y mysql
[root@server3 ~]# mysql -h 172.25.3.3 -usalt -p # 可以登陸並查看數據庫
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| salt |
| test |
+--------------------+
3 rows in set (0.00 sec)
[root@server3 ~]# systemctl restart salt-minion
測試:
[root@server2 ~]# salt server3 test.ping --return mysql
server3:
True
5.在master端進行測試
(1)
(2)
Master Job Cache
配置主作業緩存以從Salt Master發送作業結果,而不是在每個Salt Minion上配置外部作業緩存。
在此配置中,Salt Minions像往常一樣將數據發送到默認作業緩存,然後Salt Master使用在Salt Master上運行的Salt返回器模塊將數據發送到外部系統。
1.優點:外部系統需要單個連接。 這對於數據庫和類似系統來說是首選。
2.缺點:在Salt Master上增加額外負載
實驗步驟:
[root@ser2 ~]# yum install -y MySQL-python.x86_64
[root@ser2 ~]# vim /etc/salt/master
master_job_cache: mysql
mysql.host: 'localhost'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306
[root@ser2 ~]# systemctl restart salt-master
1.2.測試