Saltstack远程执行
语法例:salt '*' cmd.run 'w'
- 命令:salt
- 目标:'*'
- 模块:cmd.run,自带150+模块,也可以自己写模块
- 返回:执行后结果返回,Returnners组件
1、指定目标(targeting)
官网文档:https://docs.saltstack.com/en/latest/topics/targeting/index.html
两种定位方法:一种和minion ID有关,一种和monion ID无关
1)minion ID有关的方法
指定具体的minion ID
[root@salt-master ~]# salt 'salt-minion.2018.com' cmd.run 'df -hT' #指定单台机器
[root@salt-master ~]# salt '*' cmd.run 'df -hT' #查看所有机器的信息
通配符()
[root@salt-master ~]# salt '*' test.ping
[root@salt-master ~]# salt 'salt-minion*' test.ping
[root@salt-master ~]# salt 'salt-minion[1|2].2018.com' test.ping
[root@salt-master ~]# salt 'salt-minion[1-2].2018.com' test.ping
[root@salt-master ~]# salt 'salt-minion[!2].2018.com' test.ping
[root@salt-master ~]# salt 'salt-minion[1].2018.com' test.ping
[root@salt-master ~]# salt 'salt-minion?.2018.com' test.ping
列表
[root@salt-master ~]# salt -L 'salt-minion.2018.com,salt-master.2018.com' test.ping
正则表达式
[root@salt-master ~]# salt -E 'salt-(minion|master).2018*' test.ping
备注: 所有匹配目标的方式,都可以用到top file里面来指定目标。
minion ID设置方案:IP地址、根据业务来进行设置
例:
redis-node1-redis04-idc04-h5web.example.com
redis-node1 # redis第一个节点
redis04 # 集群
idc04 # 机房
h5web # 业务线
2)minion ID无关的方法
IP地址、子网
[root@salt-master ~]# salt -S 192.168.91.133 test.ping
[root@salt-master ~]# salt -S 192.168.91.0/24 test.ping
分组,需要配置master文件
[root@salt-master ~]# vi /etc/salt/master ##nodegroups下添加web此组
#nodegroups:
# group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com and bl*.domain.com'
# group2: 'G@os:Debian and foo.domain.com'
nodegroups:
web: 'L@salt-minion.2018.com,salt-master.2018.com'
重启systemctl restart salt-master
[root@salt-master ~]# salt -N 'web' test.ping
混合匹配
官方文档 https://docs.saltstack.com/en/latest/topics/targeting/compound.html
批处理 ,可用于重启所有主机或进程场景,百分比或固定数量的一点一点重启主机或进程
官方文档 https://docs.saltstack.com/en/latest/topics/targeting/batch.html
2、执行模块
官网文档 https://docs.saltstack.com/en/latest/ref/modules/all/index.html#all-salt-modules
列出salt所有模块,以及如何使用的帮助文档
通过yum默认安装salt所有模块存放路径 /usr/lib/python2.7/site-packages/salt/modules(centos 7)
例:
[root@salt-master ~]salt '*' network.active_tcp # 列出所有主机运行的tcp连接
[root@salt-master ~]salt '*' network.arp # 列出所有主机arp
[root@salt-master ~]salt '*' service.available sshd # 列出所有主机sshd
[root@salt-master ~]salt '*' service.get_all # 列出所有主机的所有运行服务
[root@salt-master ~]salt '*' service.status sshd # 列出所有主机sshd运行状态
[root@salt-master ~]salt-cp '*' /etc/hosts /tmp/test # 将master上/etc/hosts文件拷贝到所有主机的/tmp/test
[root@salt-master ~]salt '*' state.show_top # 查看top
[root@salt-master ~]salt '*' state.single pkg.installed name=lsof # 所有主机安装lsof
[root@salt-master ~]# vi /etc/salt/master #让yanyb这个用户只能执行某个模块
client_acl:
yanyb:
- test.ping
- network.*
或者
#client_acl_blacklist: #黑名单,禁止那个用户执行那个模块
# users:
# - root
# - '^(?!sudo_).*$' # all non sudo users
# modules:
# - cmd
[root@salt-master ~]# systemctl restart salt-maste
模块一大推,就不一一介绍。不懂可以查看官网
3、返回程序
官方文档 https://docs.saltstack.com/en/latest/ref/returners/index.html
1)将返回写入mysql库,是由minion直接写入mysql库
注意:返回程序是minion返回的
[root@salt-master ~]# yum install MySQL* -y #(master操作)
所有minion安装python mysql模块
salt '*' state.single pkg.installed name=MySQL-python
或
salt '*' cmd.run 'yum install MySQL-python -y'
创建salt库(master操作)
CREATE DATABASE `salt`
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
USE `salt`;
创建表(master操作)
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;
授权
grant all on salt.* to salt@'%' identified by 'salt';
FLUSH PRIVILEGES;
exit
mysql -h192.168.91.134 -usalt -psalt salt (minion操作)
show tables;
配置minion文件
[root@salt-master ~]# vim /etc/salt/minion
mysql.host: '192.168.91.134' #master的ip
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306
重启 systemctl restart salt-minion
然后进入数据库 测试