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

续我的上篇博文:https://mp.csdn.net/postedit/88991927。即ansible已经安装配置好

帮助文档:Storing Job Results in an External System

 

 

一、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版本)

1selinux和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 | 20190403172201740132 | "server2" | server2 | 1       | {"fun_args": ["hostname"], "jid": "20190403172201740132", "return": "server2", "retcode": 0, "success": true, "fun": "cmd.run", "id": "server2"} | 2019-04-03 17:22: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
[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   | 20190403172201740132 | "server2" | server2 | 1       | {"fun_args": ["hostname"], "jid": "20190403172201740132", "return": "server2", "retcode": 0, "success": true, "fun": "cmd.run", "id": "server2"}                                              | 2019-04-03 17:22:01 |
| test.ping | 20190403174656352624 | true      | server2 | 1       | {"fun_args": [], "jid": "20190403174656352624", "return": true, "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2019-04-03T09:46:56.644733", "fun": "test.ping", "id": "server2"} | 2019-04-03 17:46:56 |
| test.ping | 20190403174714004299 | true      | server3 | 1       | {"fun_args": [], "jid": "20190403174714004299", "return": true, "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2019-04-03T09:47:14.087166", "fun": "test.ping", "id": "server3"} | 2019-04-03 17:47:14 |
| test.ping | 20190403174721089451 | true      | server4 | 1       | {"fun_args": [], "jid": "20190403174721089451", "return": true, "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2019-04-03T09:47:21.170593", "fun": "test.ping", "id": "server4"} | 2019-04-03 17:47:21 |
+-----------+----------------------+-----------+---------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
MariaDB [(none)]> Bye   #按Ctrl+d退出

我们可以看到,master端将命令推送到任意的minion端执行的命令,都会保存在master端的mysql数据库中。表示配置成功。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值