Linux Saltstack Job管理 及 外部缓存数据库的部署

一、Job简介

master在下发指令任务时,会附带上产生的jid。

minion在接收到指令开始执行时,会在本地的/var/cache/salt/minion/proc目录下产生该jid命名的文件,用于在执行过程中master查看当前任务的执行情况。

指令执行完毕将结果传送给master后,删除该临时文件。

Job缓存默认保存24小时:

[root@server1 master]# vim /etc/salt/master

 
 
  • 1

在这里插入图片描述master端Job缓存目录:/var/cache/salt/master/jobs

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

# salt-run jobs.active

 
 
  • 1

列出当前master jobs cache中所有job

# salt-run jobs.list_jobs

 
 
  • 1

从master jobs cache中查询指定jid的运行结果

# salt-run jobs.lookup_jid <jid>

 
 
  • 1

二、在外部系统中存储Job结果

Job执行后,每个Salt Minion将Job结果返回给Salt Master。 这些结果存储在默认Job缓存中。

除默认Job缓存外,Salt还提供了两种其他机制将Job结果发送到其他系统(数据库,本地syslog等):

  • 外部Job缓存
  • 主Job缓存

这两种机制之间的主要区别在于返回结果的位置(来自Salt Master或Salt Minion)。

外部工作缓存-小型返回器

配置了外部Job缓存后,数据将像往常一样返回到Salt Master上的Default Job Cache,然后使用在Salt Minion上运行的Salt返回模块将结果发送到External Job Cache。
在这里插入图片描述优点: 存储数据时,不会对Salt Master造成额外的负担。

缺点: 每个Salt Minion连接到外部作业缓存,这可能导致大量连接。 还需要进行其他配置才能在所有Salt Minions上获得返回模块的设置。

接下来我们来部署这种方式,我们这里将数据库放在server1(master端),当然也可以放在其他主机,将minion端sercer2作为发送缓存方:

配置外部缓存数据库

首先安装并开启mysql:

[root@server1 salt]# yum install -y mariadb-server
[root@server1 salt]# systemctl start mariadb.service 
[root@server1 salt]# mysql			#默认没有密码
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)
MariaDB [(none)]> exit
Bye

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

初始化数据库(可以参考:https://docs.saltstack.cn/ref/returners/all/salt.returners.mysql.html#module-salt.returners.mysql):

[root@server1 ~]# vim add.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;

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

然后导入初始化语句:

[root@server1 ~]# mysql < add.sql 

 
 
  • 1

导入后查看:

[root@server1 ~]# mysql
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| salt               |
| test               |
+--------------------+
5 rows in set (0.00 sec)
MariaDB [(none)]> use salt;
Database changed
MariaDB [salt]> show tables;
+----------------+
| Tables_in_salt |
+----------------+
| jids           |
| salt_events    |
| salt_returns   |
+----------------+
3 rows in set (0.00 sec)

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

可以看出多了一个salt库,且下面有一系列的表。

接着我们进行授权:

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';
Query OK, 0 rows affected (0.00 sec)

 
 
  • 1
  • 2
  • 3
  • 4
  • 5

以上sql语句表示给salt用户(密码salt)赋予在所有其他地址和本地上的mysql的所有权限。

进行测试:

[root@server1 ~]# mysql -usalt -psalt salt
MariaDB [salt]> show tables;
+----------------+
| Tables_in_salt |
+----------------+
| jids           |
| salt_events    |
| salt_returns   |
+----------------+

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

可以看出授权成功。

minion端的配置

接下来进行minion的配置:

首先安装mysql的python依赖包:

[root@server2 ~]# yum install -y MySQL-python.x86_64

 
 
  • 1

更改minion端的配置文件:

[root@server2 ~]# vim /etc/salt/minion

 
 
  • 1

在这里插入图片描述
更改后重启:

[root@server2 ~]# systemctl restart salt-minion.service 

 
 
  • 1

接下来安装mysql的客户端来测试mysql的远程连接:

[root@server2 ~]# yum install mysql -y
[root@server2 ~]# mysql -h 172.25.63.1 -usalt -psalt salt
MariaDB [salt]> show tables;
+----------------+
| Tables_in_salt |
+----------------+
| jids           |
| salt_events    |
| salt_returns   |
+----------------+
3 rows in set (0.00 sec)

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

可以看出musql的远程连接正常。

minion端配置完成。

测试

在server1(salt-master)给server2推送:

[root@server1 ~]# salt server2 test.ping --return mysql
server2:
    True

 
 
  • 1
  • 2
  • 3

加–return mysql表示将直接返回给数据库,推送成功后我们可以在数据库查看:

[root@server1 ~]# mysql -usalt -psalt salt
MariaDB [salt]> select * from salt_returns;
+-----------+----------------------+--------+---------+---------+-------------------------------------------------------------------------------------------------------------------------------------+---------------------+
| fun       | jid                  | return | id      | success | full_ret                                                                                                                            | alter_time          |
+-----------+----------------------+--------+---------+---------+-------------------------------------------------------------------------------------------------------------------------------------+---------------------+
| test.ping | 20200518161124169377 | true   | server2 | 1       | {"fun_args": [], "jid": "20200518161124169377", "return": true, "retcode": 0, "success": true, "fun": "test.ping", "id": "server2"} | 2020-05-19 00:11:24 |
+-----------+----------------------+--------+---------+---------+-------------------------------------------------------------------------------------------------------------------------------------+---------------------+
1 row in set (0.00 sec)
MariaDB [salt]> Bye

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

可以看到结果已经保存到了数据库,这种方式的Job管理部署成功。

主Job缓存-master端返回

除了在每个Salt Minion上配置外部作业缓存,还可以配置主作业缓存以从Salt Master发送作业结果。 在此配置中,Salt Minions照常将数据发送到默认作业缓存,然后Salt Master使用在Salt Master上运行的Salt Returner模块将数据发送到外部系统。
在这里插入图片描述

优点:到外部系统的单个连接是必需的。 这对于数据库和类似系统是首选的。

缺点:给Salt Master带来额外的负担。

接下来部署这种方式,这种方式只需要在master端部署:

master端部署

安装mysql的python依赖包:

[root@server1 ~]# yum install -y MySQL-python.x86_64

 
 
  • 1

由于数据库已经部署好了,因此我们只需要编辑配置文件:

[root@server1 ~]# vim /etc/salt/master
[root@server1 ~]# tail -7 /etc/salt/master			#在文件的最后加入以下文件
master_job_cache: mysql
mysql.host: 'localhost'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

重启master端:

[root@server1 ~]# systemctl restart salt-master.service 

 
 
  • 1

部署完成。

测试

在master端测试推送:

[root@server1 ~]# salt '*' test.ping 
server2:
    True
server3:
    True

 
 
  • 1
  • 2
  • 3
  • 4
  • 5

在数据库中查看:

[root@server1 ~]# mysql salt
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;
+-----------+----------------------+--------+---------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
| fun       | jid                  | return | id      | success | full_ret                                                                                                                                                                                      | alter_time          |
+-----------+----------------------+--------+---------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
| test.ping | 20200518161124169377 | true   | server2 | 1       | {"fun_args": [], "jid": "20200518161124169377", "return": true, "retcode": 0, "success": true, "fun": "test.ping", "id": "server2"}                                                           | 2020-05-19 00:11:24 |
| test.ping | 20200518161848475717 | true   | server2 | 1       | {"fun_args": [], "jid": "20200518161848475717", "return": true, "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2020-05-18T16:18:48.661091", "fun": "test.ping", "id": "server2"} | 2020-05-19 00:18:48 |
| test.ping | 20200518161848475717 | true   | server3 | 1       | {"fun_args": [], "jid": "20200518161848475717", "return": true, "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2020-05-18T16:18:48.686814", "fun": "test.ping", "id": "server3"} | 2020-05-19 00:18:48 |
| test.ping | 20200518161848475717 | true   | server2 | 1       | {"fun_args": [], "jid": "20200518161848475717", "return": true, "retcode": 0, "success": true, "fun": "test.ping", "id": "server2"}                                                           | 2020-05-19 00:18:48 |
+-----------+----------------------+--------+---------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
4 rows in set (0.00 sec)

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

可以看到server2和server3的缓存均保存在数据库中,这种方式的Job管理也部署完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值