03 深入远程执行

0、学习目的

http://docs.saltstack.cn/topics/execution/index.html  官方文档

0.1 命令解释

 03 深入远程执行

[[email protected]192-168-23-39 ~]# salt '*' cmd.run 'w'
salt 命令
* 指定目标
cmd 模块
run 模块的方法
w 模块的参数

0.2 学习目的

03 深入远程执行

1、目标Target

Targets也可以使用正则表达式:
salt -E 'virtmach[0-9]' test.ping

Targets也可以指定列表:
salt -L 'foo,bar,baz,quo' test.ping

 03 深入远程执行

 03 深入远程执行

 # Ip地址

 03 深入远程执行

或者在一个命令中混合使用多target类型:

03 深入远程执行

2、模块Module

http://docs.saltstack.cn/ref/modules/all/index.html#all-salt-modules

2.1 network模块

# 活动的tcp

03 深入远程执行

# 查看arp

03 深入远程执行

# 查看网卡接口

03 深入远程执行

# 测试连接性

salt '*' network.connect archlinux.org 80
salt '*' network.connect baidu.com 80

2.2 service

salt '*' service.get_all
salt '*' service.get_all |grep sshd

 # 服务开启着

 03 深入远程执行

# 获取所有服务

03 深入远程执行

# 服务是否关闭

03 深入远程执行

# 重新加载,重启,状态

03 深入远程执行

# 停止服务

03 深入远程执行

2.3 state模块

https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.state.html

03 深入远程执行

2.4 file模块

批量文件分发

# cp文件目录
[[email protected]-node1 salt]# salt-cp '*' /etc/passwd /tmp/hehe
{'linux-node1.example.com': {'/tmp/hehe': True},
 'linux-node2.example.com': {'/tmp/hehe': True}}

# ls
[[email protected]-node1 salt]# salt \* cmd.run 'ls /tmp/hehe'
linux-node1.example.com:
    /tmp/hehe
linux-node2.example.com:
    /tmp/hehe

2.5 模块用户访问控制

http://docs.saltstack.cn/topics/eauth/access_control.html

1. 要求:redhat用户只能用这两个模块

2.[[email protected] ~]# vim /etc/salt/master

03 深入远程执行

重启master服务

 

3.PERMISSION授权

[[email protected] ~]# chmod 775 /var/cache/salt /var/cache/salt/master /var/cache/salt/master/jobs /var/run/salt /var/run/salt/master

4. 创建redhat用户,切换用户,执行命令

[[email protected] ~]# useradd redhat
[[email protected]-node1 ~]# passwd redhat

03 深入远程执行

 03 深入远程执行

5. 只在某个机器执行

 03 深入远程执行   03 深入远程执行

6.问题:

错误,表明用户没有写log权限,

 03 深入远程执行

解决方式:

test用户加到root用户组,

并对root用户组赋予/var/log/salt/master 文件的写权限

03 深入远程执行

3、返回returners

https://docs.saltstack.com/en/latest/ref/returners/index.html

https://docs.saltstack.com/en/latest/ref/returners/all/salt.returners.mysql.html

返回到Mysql

返回时minion返回的,返回命令,直接写入MySQL

1.minion端配置

(1)每个Minion都需要装MySQL

[[email protected] ~]# salt \* cmd.run 'yum install -y MySQL-python'

Pkg模块
[[email protected]-node1 ~]# salt \* pkg.install MySql-python

03 深入远程执行

 (2)master端安装数据库,创建表结构

[[email protected] ~]# yum install mariadb-server
[[email protected]-node1 ~]# systemctl restart mariadb
[[email protected]-node1 ~]# mysql

创建表结构

03 深入远程执行03 深入远程执行
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`;
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;

--
-- Table structure for table `salt_events`
--

DROP TABLE IF EXISTS `salt_events`;
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;
View Code

 查看表

 03 深入远程执行

授权

MariaDB [salt]> grant all on salt.* to [email protected]'%' identified by 'salt';
Query OK, 0 rows affected (0.00 sec)

(3)minion端,修改配置文件

[[email protected] ~]# vim /etc/salt/minion

03 深入远程执行03 深入远程执行
mysql.host: '192.168.194.131'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306
View Code

03 深入远程执行

重启

[[email protected] ~]# systemctl restart salt-minion

 (4)执行命令查看

[[email protected] ~]# salt '*' cmd.run 'df -h' --return mysql

mysql查看

MariaDB [salt]> show tables;
MariaDB [salt]> select * from salt_returns;
MariaDB [salt]> select * from salt_returns\G;

 03 深入远程执行

2. job cache机制

(1)Master配置文件

[[email protected] ~]# vim /etc/salt/master

保持24小时

03 深入远程执行

03 深入远程执行

(2) 重启

[[email protected] ~]# systemctl restart salt-master

 (3)执行命令,查看

[[email protected] ~]# salt '*' test.ping

[[email protected] ~]# salt '*' cmd.run 'uptime' -v

03 深入远程执行

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

 03 深入远程执行