SaltStack return与job管理
2021/11/8 6:10:33
本文主要是介绍SaltStack return与job管理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
SaltStack return与job管理
return
return组件可以理解为SaltStack系统对执行Minion返回后的数据进行存储或者返回给其他程序,它支持多种存储方式,比如用MySQL、MongoDB、Redis、Memcache等,通过return我们可以对SaltStack的每次操作进行记录,对以后日志审计提供了数据来源。目前官方已经支持30种return数据存储与接口,我们可以很方便的配置与使用它。当然也支持自己定义的return,自定义的return需由python来编写。在选择和配置好要使用的return后,只需在salt命令后面指定return即可
查看所有return列表 [root@master ~]# salt 'minion1' sys.list_returners minion1: - carbon - couchdb - etcd - highstate - local - local_cache - mattermost - multi_returner - pushover - rawfile_json - slack - slack_webhook - smtp - splunk - sqlite3 - syslog - telegram
return流程
return是在Master端触发任务,然后Minion接受处理任务后直接与return存储服务器建立连接,然后把数据return存到存储服务器。关于这点一定要注意,因为此过程都是Minion端操作存储服务器,所以要确保Minion端的配置跟依赖包是正确的,这意味着我们将必须在每个Minion上安装指定的return方式依赖包,假如使用Mysql作为return存储方式,那么我们将在每台Minion上安装python-mysql模块。
使用mysql作为return存储方式
## 在所有minion上安装Mysql-python模块 ## [root@master ~]# salt 'minion1' pkg.install python3-PyMySQL minion1: ---------- python3-PyMySQL: ---------- new: 0.10.1-2.module_el8.4.0+666+456f5f48 old: python3-cffi: ---------- new: 1.11.5-5.el8 old: python3-cryptography: ---------- new: 3.2.1-4.el8 old: python3-ply: ---------- new: 3.9-9.el8 old: python3-pycparser: ---------- new: 2.14-14.el8 old: [root@minion1 ~]# rpm -qa|grep -i pymysql python3-PyMySQL-0.10.1-2.module_el8.4.0+666+456f5f48.noarch ## 部署一台mysql服务器用作存储服务器 ## [root@mysql ~]# yum -y install mariadb mariadb-server [root@mysql ~]# systemctl start mariadb [root@mysql ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 8 Server version: 10.3.28-MariaDB MariaDB Server Copyright (c) 2000, 2018, 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.000 sec) MariaDB [(none)]> use `salt`; Database changed MariaDB [salt]> drop table if exists `jids`; Query OK, 0 rows affected, 1 warning (0.000 sec) 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.003 sec) MariaDB [salt]> drop table if exists `salt_returns`; Query OK, 0 rows affected, 1 warning (0.000 sec) MariaDB [salt]> create table `salt_returns` ( -> `fun` varchar(50) not null, -> `jid` varchar(255) not null, -> `return` mediumtext not null, -> `id` varchar(259) 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.004 sec) MariaDB [salt]> drop table if exists `salt_events`; Query OK, 0 rows affected, 1 warning (0.000 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.003 sec) MariaDB [salt]> show tables; +----------------+ | Tables_in_salt | +----------------+ | jids | | salt_events | | salt_returns | +----------------+ 3 rows in set (0.000 sec) MariaDB [salt]> desc jids; +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | jid | varchar(255) | NO | PRI | NULL | | | load | mediumtext | NO | | NULL | | +-------+--------------+------+-----+---------+-------+ 2 rows in set (0.001 sec) 授权访问 MariaDB [salt]> grant all on salt.* to 'salt'@'%' identified by 'salt'; Query OK, 0 rows affected (0.000 sec) MariaDB [salt]> flush privileges; Query OK, 0 rows affected (0.000 sec) ## 在minion安装mariadb,测试连接mysql服务器 ## [root@minion1 ~]# yum -y install mariadb [root@minion1 ~]# which mysql /usr/bin/mysql [root@minion1 ~]# mysql -usalt -psalt -h192.168.145.195 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 5.5.68-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> quit Bye ## 配置minion ## [root@minion1 ~]# vim /etc/salt/minion #return: # - mysql # - hipchat # - slack 在配置文件里面添加以下几行 mysql.host: '192.168.145.195' mysqlIP mysql.user: 'salt' mysql.pass: 'salt' mysql.db: 'salt' mysql.port: 3306 [root@minion1 ~]# systemctl restart salt-minion ## 在Master上测试存储到mysql中 ## [root@master ~]# salt 'minion1' test.ping minion: True [root@master ~]# salt 'minion1' test.ping --return mysql minion: True ## 在数据库中查询 ## MariaDB [salt]> select * from salt_returns\G *************************** 1. row *************************** fun: test.ping jid: 20211107120045632879 return: true id: minion1 success: 1 full_ret: {"success": true, "return": true, "retcode": 0, "jid": "20211107120045632879", "fun": "test.ping", "fun_args": [], "id": "minion"} alter_time: 2021-11-07 1:29:02 1 row in set (0.00 sec)
总结return执行过程:由master向minion发送指令,然后minion去执行,执行完后minion需要向两边去汇报
job cache
return时是由Minion直接与存储服务器进行交互,因此需要在每台Minion上安装指定的存储方式的模块,比如python-mysql,那么我们能否直接在Master上就把返回的结果给存储到存储服务器呢?
答案是肯定的,这种方式被称作 job cache 。意思是当Minion将结果返回给Master后,由Master将结果给缓存在本地,然后将缓存的结果给存储到指定的存储服务器,比如存储到mysql中
## 开启master端的master_job_cache ## [root@master ~]# vim /etc/salt/master #job_cache: True 在配置文件中添加以下几行 master_job_cache: mysql mysql.host: '192.168.145.195' mysql.user: 'salt' mysql.pass: 'salt' mysql.db: 'salt' mysql.port: 3306 [root@master ~]# systemctl restart salt-master ## 在数据库服务器中清空表内容 ## [root@mysql ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 21 Server version: 5.5.68-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 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]> delete from salt_returns; Query OK, 4 rows affected (0.00 sec) MariaDB [salt]> select * from salt_returns\G Empty set (0.00 sec) ## 在master上再次测试能否存储至数据库 ## [root@master ~]# salt '*' test.ping master: True minion: True [root@master ~]# salt 'minion1' cmd.run 'df -h' minion: Filesystem Size Used Avail Use% Mounted on devtmpfs 371M 0 371M 0% /dev tmpfs 391M 140K 391M 1% /dev/shm tmpfs 391M 16M 375M 4% /run tmpfs 391M 0 391M 0% /sys/fs/cgroup /dev/mapper/cs-root 66G 2.4G 63G 4% / /dev/sda1 1014M 195M 820M 20% /boot /dev/mapper/cs-home 32G 260M 32G 1% /home tmpfs 79M 0 79M 0% /run/user/0 [root@master ~]# salt 'minion1' cmd.run 'date' minion1: Sat Nov 6 21:00:03 CST 2021 ## 在数据库中查询 ## MariaDB [salt]> select * from salt_returns\G *************************** 1. row *************************** fun: test.ping jid: 20211107954368795245 return: true id: master success: 1 full_ret: {"cmd": "_return", "id": "master", "success": true, "return": true, "retcode": 0, "jid": "20211107954368795245", "fun": "test.ping", "fun_args": [], "_stamp": "2021-11-07T1:37:03.038821"} alter_time: 2021-11-07 1:37:03 *************************** 2. row *************************** fun: test.ping jid: 20211106125442844031 return: true id: minion success: 1 full_ret: {"cmd": "_return", "id": "minion", "success": true, "return": true, "retcode": 0, "jid": "20211107954368795245", "fun": "test.ping", "fun_args": [], "_stamp": "2021-11-07T1:37:03.046980"} alter_time: 2021-11-07 1:37:03 2 rows in set (0.00 sec)
job管理
## 获取任务的jid ## root@master ~]# salt 'minion' cmd.run 'date' -v Executing job with jid 20211107456953458735 ------------------------------------------- minion: Sat Nov 6 1:39:24 CST 2021 ## 通过jid获取此任务的返回结果 ## [root@master ~]# salt-run jobs.lookup_jid 20211107456953458735 minion: Sat Nov 6 1:39:24 CST 2021
这篇关于SaltStack return与job管理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26MATLAB 中 A(7)=[];什么意思?-icode9专业技术文章分享
- 2024-11-26UniApp 中如何实现使用输入法时保持页面列表不动的效果?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中怎么实现输入法弹出时禁止页面向上滚动?-icode9专业技术文章分享
- 2024-11-26WebSocket是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-26页面有多个ref 要动态传入怎么实现?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中实现一个底部输入框的常见方法有哪些?-icode9专业技术文章分享
- 2024-11-26RocketMQ入门指南:搭建与使用全流程详解
- 2024-11-26RocketMQ入门教程:轻松搭建与使用指南
- 2024-11-26手写RocketMQ:从入门到实践的简单教程
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版