TA的每日心情 | 怒 前天 13:01 |
---|
签到天数: 1643 天 [LV.Master]伴坛终老
|
官方帮助文档:http://docs.saltstack.cn/topics/jobs/external_cache.html
mysql模块相关文档介绍:https://docs.saltstack.com/en/latest/ref/returners/all/salt.returners.mysql.html#module-salt.returners.mysql
一、Job基本管理
在master下发指令消息时,会附带上产生的jid.minion在接收到指令开始执行时,会在本地的cachedir(默认是/var/cache/salt/minion/)下的proc目录下产生以该jid命名的文件,用于在执行过程中master查看当前任务的执行情况,指令执行完毕,将结果传送给master后,删除该临时文件。
master将minion的执行结果存放在本地/var/cache/salt/master/jobs目录,默认缓存24小时(可以通过修改master配置文件keepjobs选项调整)
二、SaltStack把数据返回到mysql数据库的两种配置方法对应的图解
第一种配置方法:
当配置外部作业缓存时,数据像往常一样返回salt master上的缺省作业缓存,然后使用在salt minion上运行的 Salt returne模块将结果发送到外部作业缓存。
第二种配置方法:
在这种配置中,salt minions 像往常一样将数据发送到默认作业缓存,然后salt master使用运行在盐主机上的盐返回器模块将数据发送到外部系统。
三、实验环境(rhel7.3版本)1、selinux和firewalld状态为disabled 2、各主机信息如下:
主机 ip
server1(master) 172.25.83.1
server2(minion) 172.25.83.2
server3(minion) 172.25.83.3
server4(minion) 172.25.83.4
四、SaltStack把数据返回到mysql数据库的两种配置方法
第一种配置方法:
提前编写test.sql文件: [root@server1 ~]# vim test.sql
1 CREATE DATABASE `salt`
2 DEFAULT CHARACTER SET utf8
3 DEFAULT COLLATE utf8_general_ci;
4
5 USE `salt`;
6
7 --
8 -- Table structure for table `jids`
9 --
10
11 DROP TABLE IF EXISTS `jids`;
12 CREATE TABLE `jids` (
13 `jid` varchar(255) NOT NULL,
14 `load` mediumtext NOT NULL,
15 UNIQUE KEY `jid` (`jid`)
16 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
17 #CREATE INDEX jid ON jids(jid) USING BTREE;
18
19 --
20 -- Table structure for table `salt_returns`
21 --
22
23 DROP TABLE IF EXISTS `salt_returns`;
24 CREATE TABLE `salt_returns` (
25 `fun` varchar(50) NOT NULL,
26 `jid` varchar(255) NOT NULL,
27 `return` mediumtext NOT NULL,
28 `id` varchar(255) NOT NULL,
29 `success` varchar(10) NOT NULL,
30 `full_ret` mediumtext NOT NULL,
31 `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
32 KEY `id` (`id`),
33 KEY `jid` (`jid`),
34 KEY `fun` (`fun`)
35 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
36
37 --
38 -- Table structure for table `salt_events`
39 --
40
41 DROP TABLE IF EXISTS `salt_events`;
42 CREATE TABLE `salt_events` (
43 `id` BIGINT NOT NULL AUTO_INCREMENT,
44 `tag` varchar(255) NOT NULL,
45 `data` mediumtext NOT NULL,
46 `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
47 `master_id` varchar(255) NOT NULL,
48 PRIMARY KEY (`id`),
49 KEY `tag` (`tag`)
50 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1、配置master端(server1)
[root@server1 ~]# yum install mariadb-server -y #安装mariadb-server
[root@server1 ~]# systemctl start mariadb #开启mariadb服务
[root@server1 ~]# mysql -uroot -proot
MariaDB [(none)]> grant all on salt.* to salt@'%' identified by 'salt'; #创建用户并授权。值的一提的是:这里还没有创建好salt数据库,但是并不会报错
MariaDB [salt]> Bye #按住Ctrl+d退出。
[root@server1 ~]# mysql < test.sql #导入数据库和表的相关信息
[root@server1 ~]# mysql #登录数据库,查看数据库salt及数据库中相应的表是否导入成功
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| salt | |
+--------------------+
MariaDB [(none)]> use salt;
MariaDB [salt]> show tables;
+----------------+
| Tables_in_salt |
+----------------+
| jids |
| salt_events |
| salt_returns |
+----------------+
MariaDB [salt]> Bye #按住Ctrl+d退出。
2、配置minion端(server2)
[root@server2 ~]# yum install MySQL-python -y
[root@server2 ~]# vim /etc/salt/minion #在874-879行田间如下的内容
874 return: mysql
875 mysql.host: '172.25.83.1'
876 mysql.user: 'salt'
877 mysql.pass: 'salt'
878 mysql.db: 'salt'
879 mysql.port: 3306
[root@server2 ~]# systemctl restart salt-minion #修改完配置文件后,重启服务
3、测试:
[root@server1 ~]# salt server4 cmd.run hostname #master端(server1)将任意的命令推送到minion端(server2)
server2:
server2
[root@server1 ~]# salt server3 cmd.run hostname
server3:
server3
[root@server1 ~]# salt server4 cmd.run hostname
server4:
server4
[root@server1 ~]# mysql
MariaDB [(none)]> select * from salt.salt_returns; #登录数据库查看,是否有上面执行的命令的内容
+---------+----------------------+-----------+---------+---------+--------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
| fun | jid | return | id | success | full_ret | alter_time |
+---------+----------------------+-----------+---------+---------+--------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
| cmd.run | 20190813175201740132 | "server2" | server2 | 1 | {"fun_args": ["hostname"], "jid": "20190813175201740132", "return": "server2", "retcode": 0, "success": true, "fun": "cmd.run", "id": "server2"} | 2019-08-13 17:52:01 |
+---------+----------------------+-----------+---------+---------+--------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
1 row in set (0.00 sec)
从上面的实验结果,我们可以看到,只有master端将命令推送到minion端(server2)执行的命令才能存储到master端(server1)的mysql数据库中,master端将命令推送到其他minion端(如server3)执行的命令并不会存储到master端(server1)的mysql数据库中。这是因为只有server2端的配置文件中(/etc/salt/minion)指定了存储到master端的mysql数据库。那么,如果minion端比较多,并且都想存储到master端的mysql数据库中,要在每一个minion端都进行设置,这未免也太复杂了,因而引入了下面的第二种配置方法,只需在master端进行配置即可。
第二种配置方法:
1、配置minion端(server2):删除之前的配置
[root@server2 ~]# vim /etc/salt/minion #删除之前编写的874-879行的内容
[root@server2 ~]# systemctl restart salt-minion #修改完配置文件之后,重启服务
2、配置master端(server1)
[root@server1 ~]# vim /etc/salt/master #在master端的1261-1266行编写下面的美容
1261 mysql.host: '172.25.83.1' #也可以将172.25.83.1,换为localhost
1262 mysql.user: 'salt'
1263 mysql.pass: 'salt'
1264 mysql.db: 'salt'
1265 mysql.port: 3306
1266
1267 master_job_cache: mysql
切记:开启master端的master_job_cache,该方法就不需要再minion端配置数据库相关信息了,如果也配置了minion端数据库相关信息,那么执行结果将会在数据库中保存两份
[root@server1 ~]# systemctl restart salt-master #修改完配置文件之后,重启服务
[root@server1 ~]# mysql
MariaDB [(none)]> grant all on salt.* to salt@localhost identified by 'salt'; #重新授权(之前授的权是:在所有主机都可以对salt数据库进行操作,这里授权:只有本及才能对salt数据库进行操作)
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> Bye #按Ctrl+d退出
[root@server1 ~]# mysql -usalt -psalt salt #验证是否授权成功
MariaDB [salt]> Bye #按Ctrl+d退出
[root@server1 ~]# yum install MySQL-python -y
3、测试:
[root@server1 ~]# salt server2 test.ping
server2:
True
[root@server1 ~]# salt server3 test.ping
server3:
True
[root@server1 ~]# salt server4 test.ping
server4:
True
[root@server1 ~]# mysql
MariaDB [(none)]> select * from salt.salt_returns;
+-----------+----------------------+-----------+---------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
| fun | jid | return | id | success | full_ret | alter_time |
+-----------+----------------------+-----------+---------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
| cmd.run | 20190813175301740132 | "server2" | server2 | 1 | {"fun_args": ["hostname"], "jid": "20190813172301740132", "return": "server2", "retcode": 0, "success": true, "fun": "cmd.run", "id": "server2"} | 2019-08-13 17:53:01 |
| test.ping | 20190813175656352624 | true | server2 | 1 | {"fun_args": [], "jid": "20190813175656352624", "return": true, "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2019-04-03T09:46:56.644733", "fun": "test.ping", "id": "server2"} | 2019-08-13 17:56:56 |
| test.ping | 20190813175714004299 | true | server3 | 1 | {"fun_args": [], "jid": "220190813175714004299", "return": true, "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2019-04-03T09:47:14.087166", "fun": "test.ping", "id": "server3"} | 2019-08-13 17:57:14 |
| test.ping | 20190813175721089451 | true | server4 | 1 | {"fun_args": [], "jid": "20190813175721089451", "return": true, "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2019-04-03T09:47:21.170593", "fun": "test.ping", "id": "server4"} | 2019-08-13 17:57:21 |
+-----------+----------------------+-----------+---------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
MariaDB [(none)]> Bye #按Ctrl+d退出
我们可以看到,master端将命令推送到任意的minion端执行的命令,都会保存在master端的mysql数据库中。表示配置成功。
|
|