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
未完待续。。。。