(本文所有主机ip均为172.25.17网段,主机名和ip相对应。比如172.25.17.3对应server3,并且所有salt包和python包需要自行下载并配置到yum源中)
数据返回
模型:将minion返回的数据通过master存储在数据库中
实现:
1.在server3端安装mysql-server和MySQL-python并开启数据库服务:
[root@server3 ~]# yum install mysql-server -y
[root@server3 ~]# yum install MySQL-python -y
2.新建.sql文件test.sql:
[root@server3 ~]# 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;
51
将这个文件导入数据库:
sql文件导入之后会在数据库中创建相应的库和表,用来存储返回的数据。
[root@server3 ~]# mysql < test.sql
3.同样在server5端也安装MySQL-python:
[root@server5 ~]# yum install MySQL-python -y
4.测试servre5端能否成功返回:
[root@server3 ~]# salt server5 test.ping --return mysql
server5:
True
5.编辑server3端的配置文件写入配置:
[root@server3 ~]# vim /etc/salt/master
写入:
1056 # Which returner(s) will be used for minion's result:
1057 #return: mysql
1058 master_job_cache: mysql
1059 mysql.host: 'localhost'
1060 mysql.user: 'salt'
1061 mysql.pass: 'westos'
1062 mysql.db: 'salt'
1063 mysql.port: '3306'
之后重启服务:
[root@server3 ~]# /etc/init.d/salt-master restart
Stopping salt-master daemon: [ OK ]
Starting salt-master daemon: [ OK ]
6.进入数据库进行用户授权:
扫描二维码关注公众号,回复:
2850200 查看本文章
[root@server3 ~]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.1.71 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> grant all on salt.* to salt@localhost identified by 'westos';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
7.执行指令获取返回数据:
[root@server3 ~]# salt server5 cmd.run 'df -h'
[WARNING ] Returner unavailable: MySQL returner could not connect to database: (1045, "Access denied for user 'salt'@'server3' (using password: YES)")
server5:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 19G 1.1G 17G 6% /
tmpfs 499M 16K 499M 1% /dev/shm
/dev/vda1 485M 33M 427M 8% /boot
这里如果出现的WARNING说用户salt无法连接数据库,可能重启salt-master服务也会出错。这时候重启虚拟机。重启虚拟机开启数据库服务和salt-master服务,重新执行指令获取返回数据,如果出现以下错误:
需要重启server5端的salt-minion服务。
再次获取数据,没有WARNING警告说明获取数据成功:
[root@server3 ~]# salt server5 cmd.run 'df -h'
server5:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 19G 1.1G 17G 6% /
tmpfs 499M 32K 499M 1% /dev/shm
/dev/vda1 485M 33M 427M 8% /boot
这时在数据库中也可以看到返回的数据:
mysql> use salt;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------+
| Tables_in_salt |
+----------------+
| jids |
| salt_events |
| salt_returns |
+----------------+
3 rows in set (0.00 sec)
mysql> select * from salt_returns;
返回数据:
模块定义
1.在server3端新建目录/srv/salt/_modules并进入目录新建python文件:
[root@server3 ~]# mkdir /srv/salt/_modules
[root@server3 ~]# cd /srv/salt/_modules/
[root@server3 _modules]# vim my_disk.py
文件内容:
定义一个df -h 模块:
1 #/usr/bin/env python
2 def df():
3 return __salt__['cmd.run']('df -h')
2.在所有minion端刷新模块:
[root@server3 _modules]# salt '*' saltutil.sync_modules
server5:
- modules.my_disk
server3:
- modules.my_disk
server6:
- modules.my_disk
server4:
- modules.my_disk
3.模块执行:
[root@server3 _modules]# salt '*' my_disk.df
server5:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 19G 1.1G 17G 6% /
tmpfs 499M 32K 499M 1% /dev/shm
/dev/vda1 485M 33M 427M 8% /boot
server4:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 19G 1.1G 17G 6% /
tmpfs 499M 16K 499M 1% /dev/shm
/dev/vda1 485M 33M 427M 8% /boot
server6:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 19G 1.1G 17G 6% /
tmpfs 246M 16K 246M 1% /dev/shm
/dev/vda1 485M 33M 427M 8% /boot
server3:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 19G 1.1G 17G 7% /
tmpfs 499M 36K 499M 1% /dev/shm
/dev/vda1 485M 33M 427M 8% /boot