什么是SaltSack的job?
在许多系统上运行的作业就叫job。
由于Salt执行在许多系统上运行的作业,因此Salt需要能够管理在许多系统上运行的作业。
job的缓存:
salt master每次执行一个任务,都会为该任务创建一个jobid。
master上默认会缓存24小时内的所有执行过的job的操作信息,其路径为/var/cache/salt/master/jobs/。
minion上在每次有任务执行时,在/var/cache/salt/minion/proc/目录下会出现以jobid为名的缓存文件,可以通过strings命令查看此文件的内容;当任务执行完毕后,该缓存文件会被删掉。
相关文档可查看:https://docs.saltproject.io/en/latest/topics/jobs/
管理的两种方式
下面用两种方式来对job进行管理。
部署环境:
三台虚拟机主机名/ip/角色如下所示:
server1 172.25.26.1 salt-master
server2 172.25.26.2 salt-minion(1)
server3 172.25.26.3 salt-minion(2)
#三台都是已经部署好salt的
##为了方便,可以在真机ssh连接虚拟机操作
第一种模式:
minion端自己远程登录将数据写入数据库
在master端安装数据库
安装数据库:
[root@server1 salt]# yum install mariadb-server -y
[root@server1 salt]# systemctl start mariadb
安全初始化:
[root@server1 salt]# mysql_secure_installation
##设的root密码是root
写数据文件
[root@server1 ~]# ls
job.sql
[root@server1 ~]# vim job.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;
#CREATE INDEX jid ON jids(jid) USING BTREE;
--
-- Table structure for table `salt_returns`
--
DROP TABLE IF EXISTS `salt_returns`;
给数据库导入数据:
[root@server1 ~]# mysql -proot < job.sql
[root@server1 ~]# mysql -proot
MariaDB [(none)]> show databases ; #查看所有库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| salt | #有salt库,导入成功!
+--------------------+
4 rows in set (0.00 sec)
MariaDB [(none)]> use salt ##进入salt库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [salt]> show tables; ##看下salt库里的表
+----------------+
| 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'; ##%意味着给远程用户授权,密码是salt
Query OK, 0 rows affected (0.00 sec)
MariaDB [salt]> quit
Bye
在server2端(minion)编辑minion配置文件:
[root@server2 salt]# vim /etc/salt/minion
return: mysql
mysql.host: '172.25.26.1' #写master的ip
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt' #之前配置数据库时设置的密码
mysql.port: 3306
下载插件并重启minion服务
[root@server2 salt]# systemctl restart salt-minion.service
[root@server2 salt]# yum install -y MySQL-python.x86_64
必须下载这个插件,因为salt是用python写的,想将数据上传到数据库需要这个插件
远程执行ping命令测试看数据有没有导入
[root@server1 ~]# salt server2 test.ping --return mysql
[root@server1 ~]# mysql -proot
MariaDB [(none)]> use salt
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [salt]> show tables;
+----------------+
| Tables_in_salt |
+----------------+
| jids |
| salt_events |
| salt_returns |
+----------------+
3 rows in set (0.00 sec)
MariaDB [salt]> select * from salt_returns\G;
*************************** 1. row ***************************
fun: test.ping #job记录在,已成功导入!
jid: 20210718032655214162
return: true
id: server2
success: 1
full_ret: {"fun_args": [], "jid": "20210718032655214162", "return": true, "retcode": 0, "success": true, "fun": "test.ping", "id": "server2"}
alter_time: 2021-07-18 11:26:55
存在缓存里的记录和导入mysql的数据是一样的
第二种模式:
master端自己远程执行命令,记录数据
master端修改master配置文件
[root@server1 jobs]# vim /etc/salt/master
##在最后加入
master_job_cache: mysql
mysql.host: 'localhost' #本地
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306
进入数据库给本地用户授权并下载插件
[root@server1 jobs]# mysql -proot
MariaDB [(none)]> grant all on salt.* to salt@localhost identified by 'salt';
MariaDB [(none)]> quit
[root@server1 jobs]# mysql -usalt -psalt salt
##登陆成功即可!
[root@server1 jobs]# systemctl restart salt-master.service
[root@server1 jobs]# yum install -y MySQL-python
执行ping命令测试看数据有没有导入
[root@server1 jobs]# salt '*' test.ping
server2:
True
server3:
True
[root@server1 jobs]# mysql -proot
MariaDB [salt]> select * from salt_returns\G;
*************************** 3. row ***************************
fun: test.ping
jid: 20210718034155642202
return: true
id: server2
success: 1
full_ret: {"fun_args": [], "jid": "20210718034155642202", "return": true, "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2021-07-18T03:41:56.534789", "fun": "test.ping", "id": "server2"}
alter_time: 2021-07-18 11:41:56
*************************** 4. row ***************************
fun: test.ping
jid: 20210718034155642202
return: true
id: server3
success: 1
full_ret: {"fun_args": [], "jid": "20210718034155642202", "return": true, "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2021-07-18T03:41:56.567097", "fun": "test.ping", "id": "server3"}
alter_time: 2021-07-18 11:41:56
可以看到job记录成功导入!