前言
在master端向minion端推送之后,minion端会保存推送信息24小时
,可是为了日后便于查看推送的信息,我们应该将这些信息长期存储起来,而存放在数据库中是个不错的选择。
- saltstack把执行的结果保存到mysql中,以便进行命令安全审计。
- mysql负责存储数据,mysql-python负责收集数据
- master需要安装mysql和MySQL-python,minion端安装MySQL-python。
实验环境
主机名(IP) | 服务 |
---|---|
server1(172.25.254.1) | master,mysql,MySQL-python(master_job_cache用到) |
server2(172.25.254.2) | minion ,MySQL-python |
server3(172.25.254.3) | minion,MySQL-python |
把执行结果存储到mysql服务器
第一种配置方法
-
当配置外部作业缓存时,数据像往常一样返回salt master上的缺省作业缓存,然后使用在salt minion上运行的 Salt returne模块将结果发送到外部作业缓存。
-
minion与master通信时将数据返回给master的同时,然后通过MySQL-python将数据返回给相应的数据存储系统。
-
server1安装mariadb-server
[root@server1 pillar]# yum install mariadb-server -y
[root@server1 pillar]# yum install mariadb -y
[root@server1 pillar]# systemctl start mariadb
[root@server1 pillar]# systemctl enable mariadb
[root@server1 pillar]# mysql_secure_installation #进行安全初始化
- 注释掉文件的17行,否则后面会有保存,将文件导入数据库中。
[root@server1 ~]# mysql -p < test.sql #下载test.sql文件,注释17行。导入
- 登陆数据库,创建用户并授权。
MariaDB [(none)]> grant all on salt.* to salt@'%' identified by 'salt'; #授权
- 修改server2端minion配置文件
修改server2的配置文件:
896 mysql.host: '172.25.11.1' #取消注释并填入mysql数据库的信息
897 mysql.user: 'salt'
898 mysql.pass: 'salt'
899 mysql.db: 'salt'
900 mysql.port: 3306
[root@server2 mnt]# systemctl restart salt-minion #修改完后重启minion。
- 在server1测试:
[root@server1 ~]# salt server2 test.ping
MariaDB [salt]> select * from salt_returns; #登陆数据库查看,发现数据已经记录在数据库中。
- 查看缓存数据在系统中的位置。
[root@server1 master]# cd jobs/
[root@server1 jobs]# ls
1e 28 2a 35 4c 68 8e 92 9c b9 cf e2 ea
25 29 2e 4a 4d 7d 91 97 a5 be dc e4 ee
[root@server1 jobs]# pwd
/var/cache/salt/master/jobs
第二种配置方法
master_job_cache
实现master直连数据库,由master将数据同步给mysql
原理图如下:
优点:外部缓存系统只需要维护单个连接。这对数据库和类似系统是首选。
缺点:在Salt Master上增加了额外的负载。
这种方式只用在master端进行操作,需要在master端同时安装mysql与mysql-python。
- 修改master端的配置文件,修改为本机的信息。
[root@server1 salt]# vim /etc/salt/master
1288 master_job_cache: mysql
1289 mysql.host: 'localhost'
1290 mysql.user: 'salt'
1291 mysql.pass: 'salt'
1292 mysql.db: 'salt'
1293 mysql.port: 3306
- 登陆数据库给本地用户授权:
MariaDB [(none)]> grant all on salt.* to salt@'localhost' identified by 'salt';
[root@server1 ~]# mysql -usalt -psalt salt #登陆测试
- 重启服务,测试,此时有报错,查看日志,报错的原因是因为没有安装mysql-python。
[root@server1 ~]# systemctl restart salt-master
[root@server1 ~]# salt-key -L
[root@server1 ~]# salt server3 test.ping
[root@server1 ~]# cat /var/log/salt/master #查看日至 报错的原因是因为没有安装mysql-python
- 安装mysql-python,重启服务,再次查看日志。
[root@server1 ~]# yum search mysql
[root@server1 ~]# yum install MySQL-python.x86_64 -y
[root@server1 ~]# systemctl restart salt-master
[root@server1 ~]# cat /var/log/salt/master
- 执行测试命令,并登陆数据库中查看。
[root@server1 ~]# salt server3 test.ping
[root@server1 ~]# lsof -i :4505
[root@server1 ~]# salt server3 cmd.run hostname
[root@server1 ~]# salt server3 cmd.run df
MariaDB [(none)]> use salt;
MariaDB [salt]> select * from salt_returns;