saltstack return mysql_SaltStack之return与job管理

1. SaltStack组件之return

eturn组件可以理解为SaltStack系统对执行Minion返回后的数据进行存储或者返回给其他程序,它支持多种存储方式,比如用MySQL、MongoDB、Redis、Memcache等,通过return我们可以对SaltStack的每次操作进行记录,对以后日志审计提供了数据来源。目前官方已经支持30种return数据存储与接口,我们可以很方便的配置与使用它。当然也支持自己定义的return,自定义的return需由python来编写。在选择和配置好要使用的return后,只需在salt命令后面指定return即可。

//查看所有return列表

[root@node1 ~]# salt 'node2*' sys.list_returners

node2:

- carbon

- couchdb

- elasticsearch

- etcd

- highstate

- local

- local_cache

- mattermost

- multi_returner

- pushover

- rawfile_json

- slack

- slack_webhook

- smtp

- splunk

- sqlite3

- syslog

- telegram

1.1 return流程

return是在Master端触发任务,然后Minion接受处理任务后直接与return存储服务器建立连接,然后把数据return存到存储服务器。关于这点一定要注意,因为此过程都是Minion端操作存储服务器,所以要确保Minion端的配置跟依赖包是正确的,这意味着我们将必须在每个Minion上安装指定的return方式依赖包,假如使用Mysql作为return存储方式,那么我们将在每台Minion上安装python-mysql模块。

1.2 使用mysql作为return存储方式

在所有minion上安装Mysql-python模块

[root@node1 ~]# salt '*' pkg.install MySQL-python

node1:

----------

MySQL-python:

----------

new:

1.2.5-1.el7

old:

node2:

----------

MySQL-python:

----------

new:

1.2.5-1.el7

old:

[root@node1 ~]# salt '*' cmd.run 'rpm -qa|grep MySQL-python'

node2:

MySQL-python-1.2.5-1.el7.x86_64

node1:

MySQL-python-1.2.5-1.el7.x86_64

//部署mysql

[root@node2 ~]# yum -y install mariadb-server

[root@node2 ~]# systemctl start mariadb

[root@node2 ~]# systemctl enable mariadb

[root@node2 ~]# ss -antl

State Recv-Q Send-Q Local Address:Port Peer Address:Port

LISTEN 0 128 *:22 *:*

LISTEN 0 100 127.0.0.1:25 *:*

LISTEN 0 25 *:514 *:*

LISTEN 0 50 *:3306 *:*

LISTEN 0 128 :::22 :::*

LISTEN 0 100 ::1:25 :::*

LISTEN 0 25 :::514 :::*

//创建数据库和表结构

[root@node2 ~]# mysql

Welcome to the MariaDB monitor. Commands end with ; or \g.

Your MariaDB connection id is 2

Server version: 5.5.56-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE `salt`

-> DEFAULT CHARACTER SET utf8

-> DEFAULT COLLATE utf8_general_ci;

Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]>

MariaDB [(none)]> USE `salt`;

Database changed

MariaDB [salt]> CREATE TABLE `jids` (

-> `jid` varchar(255) NOT NULL,

-> `load` mediumtext NOT NULL,

-> UNIQUE KEY `jid` (`jid`)

-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Query OK, 0 rows affected (0.04 sec)

MariaDB [salt]> CREATE TABLE `salt_returns` (

-> `fun` varchar(50) NOT NULL,

-> `jid` varchar(255) NOT NULL,

-> `return` mediumtext NOT NULL,

-> `id` varchar(255) NOT NULL,

-> `success` varchar(10) NOT NULL,

-> `full_ret` mediumtext NOT NULL,

-> `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

-> KEY `id` (`id`),

-> KEY `jid` (`jid`),

-> KEY `fun` (`fun`)

-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Query OK, 0 rows affected (0.00 sec)

MariaDB [salt]> CREATE TABLE `salt_events` (

-> `id` BIGINT NOT NULL AUTO_INCREMENT,

-> `tag` varchar(255) NOT NULL,

-> `data` mediumtext NOT NULL,

-> `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

-> `master_id` varchar(255) NOT NULL,

-> PRIMARY KEY (`id`),

-> KEY `tag` (`tag`)

-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Query OK, 0 rows affected (0.00 sec)

MariaDB [salt]> show tables;

+----------------+

| Tables_in_salt |

+----------------+

| jids |

| salt_events |

| salt_returns |

+----------------+

3 rows in set (0.00 sec)

//授权访问

MariaDB [salt]> grant all on salt.* to salt@'%' identified by 'salt';

Query OK, 0 rows affected (0.00 sec)

MariaDB [salt]> flush privileges;

Query OK, 0 rows affected (0.00 sec)

配置minion

[root@node1 ~]# vim /etc/salt/minion

...

mysql.host: '192.168.136.165'

mysql.user: 'salt'

mysql.pass: 'salt'

mysql.db: 'salt'

mysql.port: 3306

[root@node1 ~]# salt-cp '*' /etc/salt/minion /etc/salt/

node1:

----------

/etc/salt/minion:

True

node2:

----------

/etc/salt/minion:

True

[root@node1 ~]# salt '*' service.restart salt-minion

在Master上测试存储到mysql中

[root@node1 ~]# salt '*' test.ping --return mysql

node1:

True

node2:

True

在数据库中查询

MariaDB [(none)]> 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

MariaDB [salt]> select * from salt_returns\G

*************************** 1. row ***************************

fun: test.ping

jid: 20200228072629951940

return: true

id: node1

success: 1

full_ret: {"fun_args": [], "jid": "20200228072629951940", "return": true, "retcode": 0, "success": true, "fun": "test.ping", "id": "node1"}

alter_time: 2020-02-28 15:26:30

1 row in set (0.00 sec)

2. job cache

2.1 job cache流程

return时是由Minion直接与存储服务器进行交互,因此需要在每台Minion上安装指定的存储方式的模块,比如python-mysql,那么我们能否直接在Master上就把返回的结果给存储到存储服务器呢?

答案是肯定的,这种方式被称作 job cache 。意思是当Minion将结果返回给Master后,由Master将结果给缓存在本地,然后将缓存的结果给存储到指定的存储服务器,比如存储到mysql中。

//开启master端的master_job_cache

[root@node1 ~]# vim /etc/salt/master

#job_cache: True

master_job_cache: mysql

mysql.host: '192.168.136.165'

mysql.user: 'salt'

mysql.pass: 'salt'

mysql.db: 'salt'

mysql.port: 3306

[root@node1 ~]# systemctl restart salt-master salt-minion

//在数据库服务器中清空表内容

MariaDB [salt]> delete from salt.salt_returns;

Query OK, 1 row affected (0.00 sec)

MariaDB [salt]> select * from salt.salt_returns;

Empty set (0.00 sec)

//在master上再次测试能否存储至数据库

[root@node1 ~]# salt '*' cmd.run 'df -h'

node1:

Filesystem Size Used Avail Use% Mounted on

/dev/mapper/rhel-root 17G 2.3G 15G 14% /

devtmpfs 1.9G 0 1.9G 0% /dev

tmpfs 1.9G 300K 1.9G 1% /dev/shm

tmpfs 1.9G 8.7M 1.9G 1% /run

tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup

/dev/sda1 1014M 143M 872M 15% /boot

tmpfs 378M 0 378M 0% /run/user/0

/dev/sr0 3.8G 3.8G 0 100% /mnt

node2:

Filesystem Size Used Avail Use% Mounted on

/dev/mapper/rhel-root 17G 1.3G 16G 8% /

devtmpfs 901M 0 901M 0% /dev

tmpfs 912M 140K 912M 1% /dev/shm

tmpfs 912M 8.6M 904M 1% /run

tmpfs 912M 0 912M 0% /sys/fs/cgroup

/dev/sda1 1014M 143M 872M 15% /boot

tmpfs 183M 0 183M 0% /run/user/0

/dev/sr0 3.8G 3.8G 0 100% /mnt

//在数据库中查询

MariaDB [salt]> select * from salt.salt_returns\G

*************************** 1. row ***************************

fun: test.ping

jid: 20200228073513058938

return: true

id: node2

success: 1

full_ret: {"fun_args": [], "jid": "20200228073513058938", "return": true, "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2020-02-28T07:35:13.358539", "fun": "test.ping", "id": "node2"}

alter_time: 2020-02-28 15:35:13

*************************** 2. row ***************************

fun: saltutil.find_job

jid: 20200228073518286338

return: {}

id: node1

success: 1

full_ret: {"fun_args": ["20200228073513058938"], "jid": "20200228073518286338", "return": {}, "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2020-02-28T07:35:44.153046", "fun": "saltutil.find_job", "id": "node1"}

alter_time: 2020-02-28 15:35:44

2.2 job管理

//获取任务的jid

[root@node1 ~]# salt '*' cmd.run 'uptime' -v

Executing job with jid 20200228073841134382 //此处就是此命令的jid

-------------------------------------------

node1:

15:38:41 up 1:05, 1 user, load average: 0.06, 0.29, 0.20

node2:

15:38:41 up 1:05, 1 user, load average: 0.00, 0.01, 0.05

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值