SaltStack远程执行

一.远程执行的格式

官方文档:https://www.unixhot.com/docs/saltstack/topics/execution/index.html

格式:

salt '<target>' <function> [arguments]
selt '选择目标' 方法 参数

例:

salt '*' cmd.run 'df -hT'

注:返回的值可以通过returners组件保存在数据库中。

官网组件:https://www.unixhot.com/docs/saltstack/contents.html

returners组件文档:https://www.unixhot.com/docs/saltstack/ref/returners/index.html

 

二.将远程执行命令的结果保存到数据库

注:这里以mysql为例

官方文档:https://www.unixhot.com/docs/saltstack/ref/returners/all/salt.returners.mysql.html#module-salt.returners.mysql 

1.master上安装依赖包: 

yum -y install MySQL-python

2.配置master的配置文件:

vim /etc/slat/master
添加如下内容:
master_job_cache: mysql mysql.host:
'192.168.1.11' #这里的IP地址是mysql安装的IP地址 mysql.user: 'salt' #数据库的用户名 mysql.pass: 'salt' #salt用户的密码 mysql.db: 'salt' #mysql中的salt库 mysql.port: 3306

3.安装mariadb数据库:

yum -y install mariadb  mariadb-server
service mariadb restart
mysql_secure_installation      #生产环境下的安全安装
安全安装具体流程参考:https://www.cnblogs.com/sunny18/p/8684861.html

4.重启master:

service salt-master restart

5.在数据库中创建存储minion返回值的表:

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;

6.查看数据库中的salt_returns表:

select * from salt_returns\G

注:这个表中会存储master上远程执行后,各个minion的返回值。而且每一条远程执行的命令,都会有一个Jid,之后可以通过Jid查找对等的命令。

 

三.远程执行时选择目标

官方文档:https://www.unixhot.com/docs/saltstack/topics/targeting/globbing.html#globbing

例:

salt '*' test.ping    # 这里的*代表所有目标
salt '*.example.net' test.ping    #主机名以.example.net结尾的主机
salt '*.example.*' test.ping      #主机名中间包含.example.的主机 
salt 'web?.example.net' test.ping    #这里的?是单个字符
salt 'web[1-5]' test.ping     #匹配web1到5的minion主机
salt 'web[1,3]' test.ping      #  匹配web1或者web3的minion主机
salt 'web-[x-z]' test.ping  #匹配web-x到web-z的minion主机

对匹配的目标串行执行远程执行:每次执行完一批才会执行下一批

salt '*' -b 10 test.ping                                      #一次性10台机器执行,如果有20台,那么分为两次执行
salt -G 'os:RedHat' --batch-size 25% apache.signal restart    #会将所有匹配的目标,每次按照25%的量执行。

对一个网段的主机进行远程执行:

salt -S 192.168.40.20 test.ping      #对单个IP地址进行远程执行
salt -S 10.0.0.0/24 test.ping        #对一个网段所有的minion主机进行远程执行

通过Grains来过滤匹配的主机进行远程执行:

salt -G 'os:CentOS' test.ping                      #ping所有minion是CentOS系统
salt -G 'cpuarch:x86_64' grains.item num_cpus      #匹配所有minion的cpu是64位的,并且将核心数返回

其他参考官方文档。

 

四.远程执行的执行模块 

官方文档:https://www.unixhot.com/docs/saltstack/ref/modules/all/salt.modules.network.html#module-salt.modules.network

1.测试所有minion主机访问某个主机的某个端口通不通(connect)

salt '*' network.connect archlinux.org 80

2. 查看所有minion活动的tcp链接(active_tcp)

salt '*' network.active_tcp

3.查看minion定义的状态(show_top)

salt 'linux-node1*' state.show_top    #查看主机名为linux-node1的minion主机都定义了哪些状态
salt '*' state.show_top               #查看所有minion主机定义的状态

4.在执行模块中调用状态模块(single)

salt '*' state.single pkg.installed name=vim    #调用状态模块pkj的installed方法,安装vim

 

 

 

 

 

 

 

未完待续。。。。

posted @ 2019-04-29 11:49  *年少轻狂*  阅读(170)  评论(0编辑  收藏  举报