定位 发表于 2019-8-13 17:58:36

Linux下SaltStack把数据返回到mysql数据库

官方帮助文档: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状态为disabled2、各主机信息如下:
主机        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文件:# 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)

# yum install mariadb-server -y   #安装mariadb-server
# systemctl start mariadb   #开启mariadb服务
# mysql -uroot -proot
MariaDB [(none)]> grant all on salt.* to salt@'%' identified by 'salt';  #创建用户并授权。值的一提的是:这里还没有创建好salt数据库,但是并不会报错
MariaDB > Bye   #按住Ctrl+d退出。
# mysql < test.sql   #导入数据库和表的相关信息
# mysql   #登录数据库,查看数据库salt及数据库中相应的表是否导入成功
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| salt               |            |
+--------------------+
MariaDB [(none)]> use salt;
MariaDB > show tables;
+----------------+
| Tables_in_salt |
+----------------+
| jids           |
| salt_events    |
| salt_returns   |
+----------------+
MariaDB > Bye   #按住Ctrl+d退出。


2、配置minion端(server2)

# yum install MySQL-python -y
# 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
# systemctl restart salt-minion   #修改完配置文件后,重启服务


3、测试:

# salt server4 cmd.run hostname   #master端(server1)将任意的命令推送到minion端(server2)
server2:
    server2
# salt server3 cmd.run hostname
server3:
    server3
# salt server4 cmd.run hostname
server4:
    server4
# 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):删除之前的配置

# vim /etc/salt/minion   #删除之前编写的874-879行的内容
# systemctl restart salt-minion   #修改完配置文件之后,重启服务


2、配置master端(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端数据库相关信息,那么执行结果将会在数据库中保存两份

# systemctl restart salt-master   #修改完配置文件之后,重启服务
# 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退出

# mysql -usalt -psalt salt   #验证是否授权成功
MariaDB > Bye   #按Ctrl+d退出

# yum install MySQL-python -y


3、测试:

# salt server2 test.ping
server2:
    True
# salt server3 test.ping
server3:
    True
# salt server4 test.ping
server4:
    True
# 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数据库中。表示配置成功。

页: [1]
查看完整版本: Linux下SaltStack把数据返回到mysql数据库