指定目标,用来匹配minion,默认是以minion ID作为目标来匹配minion的。
匹配目标,非常重要,因为匹配错了,执行命令错了,后面会很严重的。
[root@saltstack-node1 ~]# salt '*' test.ping saltstack-node2.example.com: True saltstack-node1.example.com: True
详解命令【salt '*' test.ping】如下:
r salt是固定的命令
r *是远程执行时的目标(代表匹配所有),是本节学习的重点
r test.ping代表要远程执行的模块
r test是模块的名称
r .(点)代表引用这个模块
r ping是test模块里的一个方法
这个minion ID是不能随便改动的,因为master端认证minion端时,默认是以minion ID的内容命名minion端的公钥。所以,如果修改minion ID后,该minion就不能被管理了,解决方法是,必须把这个minion删掉,再重新添加,认证,才可以管理。
注意:主机的FQDN名和minionID不要随便改!
~查看minionID
[root@saltstack-node1 ~]# cat /etc/salt/minion_id #默认是主机的FQDN名 saltstack-node1.example.com
~查看minion的公钥(即证书)
[root@saltstack-node1 ~]# ll/etc/salt/pki/master/minions 总用量 8 -rw-r--r-- 1 root root 451 8月 4 14:35saltstack-node1.example.com -rw-r--r-- 1 root root 451 8月 4 13:26saltstack-node2.example.com
r globbing(通配符)
r regex(正则)
r list (列表)
范例:redis-node1-redis03-idc04-soa.example.com
r redis-node1:运行的服务是redis,这个是第一个节点
r redis03:说明这个redis是redis集群编号03里面的节点
r idc04:这台服务器运行在编号04的IDC机房中
r soa:这台服务器是给soa服务使用的
r example.com是域名
r 子网/IP地址
r grains
r pillar
r compound matchers(复合匹配)
r node groups(节点组)
r batching execution(批处理执行)
r 任意字符
r ? 单个字符
r ! 取反
salt 'saltstack-node*' test.ping salt '*.example.com' test.ping salt 'saltstack-node?.example.com' test.ping salt 'saltstack-node[1-2].example.com' test.ping salt 'saltstack-node[!2].example.com' test.ping
salt -L 'saltstack-node1.example.com,saltstack-node2.example.com' test.ping
salt -E 'saltstack-(node1|node2).example.com'test.ping
~正则表达式在top file里的写法
[root@saltstack-node1 ~]# cat/srv/salt/top.sls base: 'saltstack-(node1|node2).example.com': - match:pcre #一定要加上这一行,声明使用正则匹配。 - apache
salt -S 10.0.0.0/24 test.ping salt -S 10.0.0.22 test.ping
salt -G 'os:CentOS' test.ping salt -G cloud:openstack cmd.run 'df -h' # key(os、cloud) # value(CentOS、openstack)
~grains在top file里的写法
[root@saltstack-node1 ~]# cat /srv/salt/top.sls base: 'saltstack-(node1|node2).example.com': - match:pcre - apache 'os:CentOS': - match:grain #一定要加上这一行,声明使用grain匹配,不加s - apache
salt -I 'Zabbix_Server:10.0.0.22' test.ping
salt -C 'saltstack-node1* orI@Zabbix_Server:10.0.0.22' test.ping salt -C '* and not I@Zabbix_Server:10.0.0.22'test.ping #注意not参数的写法,前面一定要有target,才能用。
可以在master的主配置文件里修改,指定好,大约在712行。很少用。
salt '*' -b 1 test.ping #同一时刻只允许一台机器执行命令,很少用。
[root@saltstack-node1 ~]# salt -h -b --batch #允许一批机器,同一时刻执行命令,用来控制同时执行命令的机器数量 -C, --compound #混合 -E, --pcre #正则 -L, --list #列表 -G, --grain #grain -I, --pillar #pillar -S, --ipcidr(IP无类域间路由)Subnet #子网或IP地址 -R, --range #范围
模块是远程执行中的重要组成部分。
在远程执行中的模块叫做执行模块(executionmodules),配置管理的模块称之为状态模块(executionmodules)。
我们学习执行模块时,必须要学会看官方文档,它的优点是全,缺点也是全,太丰富了。
官网(执行模块): https://docs.saltstack.com/en/latest/
模块的数量,至少有300加,而且数量还在不停的递增中……
接下来,我们一起来简单学习几个常用的模块。
注意:cmd.run这个模块,生产环境中,不建议使用,因为比较危险。
模块由名称和方法组成。
注意,有些地方需要指定参数。
~返回minion端所有的TCP链接
salt 'saltstack-node1.example.com'network.active_tcp
~Return the arp table from theminion
salt 'saltstack-node1.example.com' network.arp
~Return default route(s) fromrouting table
salt 'saltstack-node1.example.com'network.default_route
~Get hostname
salt '*' network.get_hostname
~Return the hardware address(a.k.a. MAC address) for a given interface
salt '*' network.hw_addr eth0
~Return the inet address for agiven interface
salt '*' network.interface eth0
~Performs a traceroute to a 3rdparty host
salt '*' network.traceroute baidu.com
~Returns True if the specifiedservice is available, otherwise returns False.
salt '*' service.available sshd
~Return a list of all availableservices
salt 'saltstack-node1*' service.get_all
~Start the specified service
salt 'saltstack-node1*' service.start postfix
~Stop the specified service
salt 'saltstack-node1*' service.stop postfix
~Return the status for aservice, returns the PID or an empty string if the service is running or not,pass a signature to use to find the service via ps
salt 'saltstack-node1*' service.status postfix
作用:Control the state system on the minion.
~Return the top data that theminion will use for a highstate
salt 'saltstack-node1*' state.show_top
~Retrieve the highstate datafrom the salt master and display it
salt 'saltstack-node1*' state.show_highstate
~Retrieve the state data fromthe salt master for this minion and execute it
salt '*' state.highstate
~Execute the states in one ormore SLS files
salt '*' state.sls apache env=base
我们可以编辑master的主配置文件:/etc/salt/master
~ACL
client_acl: #访问控制列表 larry: #用户larry -test.ping #只能执行test模块的ping方法 -network.* #只能执行network模块的所有方法
~黑名单
client_acl_blacklist: #配置黑名单 users: #所有的用户 - root #用户root -'^(?!sudo_).*$' #所有非sudo用户 modules: #模块关键字 - cmd #cmd模块,里面的方法全部都不能用
~所有用户不能执行cmd模块的设置方法如下:
client_acl_blacklist: modules: - cmd
如果salt minion太多的时候,每次查看执行结果都要看很久,而且屏幕都占满了。也不方便查看是否执行成功。这个时候saltsack的returner功能上场了。我们可以把执行的命令结果存入数据库,通过数据库查看就很方便了。
最大的作用,可以把所有的返回结果,统一存放在同个地方,做统计、分析时会比较好用。
默认情况下,返回程序是minion端将结果返回给master端。
我们可以自定义返回程序,将结果写入到redis或是MySQL。需要注意,返回结果是minion发送的,和master没有关系。也就是说,minion直接把结果写入到redis或MySQL中。
参考网址:
https://docs.saltstack.com/en/latest/ref/returners/index.html#full-list-of-returners
https://docs.saltstack.com/en/latest/ref/returners/all/salt.returners.mysql.html
返回数据到mysql服务器上,注意:minion端依赖一个python包:python-mysqldb。
官网介绍:可以在master端或者minion端配置文件里面写上mysql相关的配置,如果是minion端,需要在每个minion的配置文件里面写,如果写到master端的配置文件,minion端则无需配置。因此,我们可以把这些配置写到master端的配置文件。
但是,我在做实验的时候,把相关配置写入到master的配置文件,minion端没写,结果发现mysql的表里是空的,没有记录。注:系统环境的版本是CentOSrelease 6.7 (Final)。
所以,为了防止出错,我们就把mysql的相关配置写入到所有minion的配置文件里。
mysql返回程序操作流程如下:
~master端
yum install -y mysql-server MySQL-python /etc/init.d/mysqld start
~所有minion端要安装:MySQL-python
如果不装,这个minion端的执行返回结果是不会写到mysql数据库表的。
yum install -y MySQL-python
因为要把客户端执行命令的结果直接返回给mysql服务器,所以客户端也要配置mysql信息的,在minion的配置文件中加入如下信息,你也可以把它单独写在一个文件中。为了方便管理推荐写在单独文件中:
~所有minion端都要配置
cat >/etc/salt/minion.d/mysql.conf<<EOF ###### Returner settings ###### ############################################ # Whichreturner(s) will be used for minion's result: #return: mysql mysql.host:'10.0.0.21' mysql.user:'salt' mysql.pass:'salt' mysql.db:'salt' mysql.port:3306 EOF cat/etc/salt/minion.d/mysql.conf
~所有结点的minion服务都要重启
/etc/init.d/salt-minion restart
mysql --------------------------------- CREATE DATABASE `salt` DEFAULTCHARACTER SET utf8 DEFAULTCOLLATE utf8_general_ci;
use salt; # 在salt库里创建三张表 --------------------------------- 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; --------------------------------- 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;
--------------------------------- 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; --------------------------------- show tables; # 查看所有的表
grant all on salt.* tosalt@'10.0.0.0/255.255.255.0' identified by 'salt'; exit;
我们可以在master端打开两个窗口,一个看shell执行返回结果,一个看mysql中返回的结果。
返回程序把执行结果写入到mysql中,但是,返回程序无论写到哪里,master端都会显示执行结果。
我们输入下面两条命令,将远程执行的结果,返回给mysql。
salt '*' test.ping --return mysql salt '*' cmd.run 'uptime' --return mysql
执行结果(命令行):
我们可以登录数据库,查看远程执行的结果是否已被保存在数据库的salt_returns表里。
mysql use salt; show tables; select * from salt_returns; select * from salt_returns\G; # 倒数第二条命令,显示的结果,看的很混乱。 # 最后一条命令,显示的结果,更加人性化。推荐!
执行命令:select *from salt_returns\G;
结果如下所示:
salt '*' cmd.run 'uptime' --returnmysql命令相对应的图:
salt '*' test.ping --return mysql命令相对应的图:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。