SaltSack自动化运维:job管理

Posted Tuki_a

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SaltSack自动化运维:job管理相关的知识,希望对你有一定的参考价值。

什么是SaltSack的job?

在许多系统上运行的作业就叫job。
由于Salt执行在许多系统上运行的作业,因此Salt需要能够管理在许多系统上运行的作业

job的缓存:
salt master每次执行一个任务,都会为该任务创建一个jobid
master上默认会缓存24小时内的所有执行过的job的操作信息,其路径为/var/cache/salt/master/jobs/。
minion上在每次有任务执行时,在/var/cache/salt/minion/proc/目录下会出现以jobid为名的缓存文件,可以通过strings命令查看此文件的内容;当任务执行完毕后,该缓存文件会被删掉。

相关文档可查看:https://docs.saltproject.io/en/latest/topics/jobs/

管理的两种方式

下面用两种方式来对job进行管理。
部署环境:

三台虚拟机主机名/ip/角色如下所示:
server1	172.25.26.1	salt-master
server2 172.25.26.2	salt-minion(1)
server3 172.25.26.3	salt-minion(2)

#三台都是已经部署好salt的
##为了方便,可以在真机ssh连接虚拟机操作

第一种模式:

minion端自己远程登录将数据写入数据库
在master端安装数据库

安装数据库:
[root@server1 salt]# yum install mariadb-server -y
[root@server1 salt]# systemctl start mariadb
安全初始化:
[root@server1 salt]# mysql_secure_installation
##设的root密码是root

写数据文件

[root@server1 ~]# ls
job.sql
[root@server1 ~]# vim job.sql
#写入以下内容 
CREATE DATABASE  `salt`
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;

USE `salt`;

--
-- Table structure for table `jids`
--

DROP TABLE IF EXISTS `jids`;
CREATE TABLE `jids` (
  `jid` varchar(255) NOT NULL,
  `load` mediumtext NOT NULL,
  UNIQUE KEY `jid` (`jid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#CREATE INDEX jid ON jids(jid) USING BTREE;

--
-- Table structure for table `salt_returns`
--

DROP TABLE IF EXISTS `salt_returns`;

给数据库导入数据:

[root@server1 ~]# mysql -proot < job.sql
[root@server1 ~]# mysql -proot
MariaDB [(none)]> show databases ;		#查看所有库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| salt               |					#有salt库,导入成功!
+--------------------+
4 rows in set (0.00 sec)

MariaDB [(none)]> use salt		##进入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]> show tables;	##看下salt库里的表
+----------------+
| 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';	##%意味着给远程用户授权,密码是salt
Query OK, 0 rows affected (0.00 sec)

MariaDB [salt]> quit
Bye

在这里插入图片描述
在这里插入图片描述
在server2端(minion)编辑minion配置文件:

[root@server2 salt]# vim /etc/salt/minion
return: mysql
mysql.host: '172.25.26.1'		#写master的ip
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'				#之前配置数据库时设置的密码
mysql.port: 3306

在这里插入图片描述
下载插件并重启minion服务

[root@server2 salt]# systemctl restart salt-minion.service 
[root@server2 salt]# yum install -y MySQL-python.x86_64
必须下载这个插件,因为salt是用python写的,想将数据上传到数据库需要这个插件

远程执行ping命令测试看数据有没有导入

[root@server1 ~]# salt server2 test.ping --return mysql
[root@server1 ~]# mysql -proot
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]> show tables;
+----------------+
| Tables_in_salt |
+----------------+
| jids           |
| salt_events    |
| salt_returns   |
+----------------+
3 rows in set (0.00 sec)
MariaDB [salt]> select * from salt_returns\\G;
*************************** 1. row ***************************
       fun: test.ping					#job记录在,已成功导入!
       jid: 20210718032655214162
    return: true
        id: server2
   success: 1
  full_ret: {"fun_args": [], "jid": "20210718032655214162", "return": true, "retcode": 0, "success": true, "fun": "test.ping", "id": "server2"}
alter_time: 2021-07-18 11:26:55

在这里插入图片描述
存在缓存里的记录和导入mysql的数据是一样的
在这里插入图片描述

第二种模式:

master端自己远程执行命令,记录数据
master端修改master配置文件

[root@server1 jobs]# vim /etc/salt/master
##在最后加入
master_job_cache: mysql
mysql.host: 'localhost'		#本地
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306

在这里插入图片描述
进入数据库给本地用户授权并下载插件

[root@server1 jobs]# mysql -proot
MariaDB [(none)]> grant all on salt.* to salt@localhost identified by 'salt';
MariaDB [(none)]> quit
[root@server1 jobs]# mysql -usalt -psalt salt
##登陆成功即可!

[root@server1 jobs]# systemctl restart salt-master.service 
[root@server1 jobs]# yum install -y MySQL-python

在这里插入图片描述
执行ping命令测试看数据有没有导入

[root@server1 jobs]# salt '*' test.ping
server2:
    True
server3:
    True
[root@server1 jobs]# mysql -proot
MariaDB [salt]> select * from salt_returns\\G;
*************************** 3. row ***************************
       fun: test.ping
       jid: 20210718034155642202
    return: true
        id: server2
   success: 1
  full_ret: {"fun_args": [], "jid": "20210718034155642202", "return": true, "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2021-07-18T03:41:56.534789", "fun": "test.ping", "id": "server2"}
alter_time: 2021-07-18 11:41:56
*************************** 4. row ***************************
       fun: test.ping
       jid: 20210718034155642202
    return: true
        id: server3
   success: 1
  full_ret: {"fun_args": [], "jid": "20210718034155642202", "return": true, "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2021-07-18T03:41:56.567097", "fun": "test.ping", "id": "server3"}
alter_time: 2021-07-18 11:41:56

可以看到job记录成功导入!
在这里插入图片描述

以上是关于SaltSack自动化运维:job管理的主要内容,如果未能解决你的问题,请参考以下文章

SaltSack自动化运维:SaltAPI

SaltSack自动化运维:topmaster--syndic--master

SaltSack自动化运维:SalkStack的state模块(使用YAML格式)

SaltSack 自动化运维2

SaltSack自动化运维:编写简单的远程执行模块

SaltSack自动化运维:Zabbix的部署