设为首页 收藏本站
查看: 1326|回复: 0

[经验分享] saltstack第三波《远程执行》

[复制链接]

尚未签到

发表于 2018-7-31 12:15:48 | 显示全部楼层 |阅读模式
第3章 SaltStack远程执行
3.1 目标(Targeting)

  指定目标,用来匹配minion,默认是以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模块里的一个方法
3.1.1minion>
  这个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
3.1.2不同写法概述
3.1.2.1 与minion>  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是域名
3.1.2.2 与minion>  r 子网/IP地址
  r grains
  r pillar
  r compound matchers(复合匹配)
  r node groups(节点组)
  r batching execution(批处理执行)
3.1.3匹配目标的不同写法
3.1.3.1 通配符
  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
3.1.3.2 列表(不推荐)
salt -L 'saltstack-node1.example.com,saltstack-node2.example.com' test.ping3.1.3.3 正则※
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
3.1.3.4 子网/IP地址
salt -S 10.0.0.0/24 test.ping  
salt -S 10.0.0.22 test.ping
3.1.3.5 grains
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
3.1.3.6 pillar
salt -I 'Zabbix_Server:10.0.0.22' test.ping3.1.3.7 compound matchers(复合匹配)
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,才能用。
3.1.3.8 node groups(节点组)
  可以在master的主配置文件里修改,指定好,大约在712行。很少用。
3.1.3.9 batching execution(分批处理执行)
salt '*' -b 1 test.ping  
#同一时刻只允许一台机器执行命令,很少用。
3.1.4salt命令参数列表
[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    #范围
  
3.2 执行模块(Modules)
  模块是远程执行中的重要组成部分。
  在远程执行中的模块叫做执行模块(executionmodules配置管理的模块称之为状态模块(executionmodules
  我们学习执行模块时,必须要学会看官方文档,它的优点是全,缺点也是全,太丰富了。
  官网(执行模块): https://docs.saltstack.com/en/latest/
  模块的数量,至少有300加,而且数量还在不停的递增中……
  接下来,我们一起来简单学习几个常用的模块。
  注意:cmd.run这个模块,生产环境中,不建议使用,因为比较危险
3.2.1network模块
  模块由名称和方法组成。
  注意,有些地方需要指定参数。
3.2.1.1 active_tcp
  ~返回minion端所有的TCP链接
salt 'saltstack-node1.example.com'network.active_tcp3.2.1.2 arp
  ~Return the arp table from theminion
salt 'saltstack-node1.example.com' network.arp3.2.1.3 default_route
  ~Return default route(s) fromrouting table
salt 'saltstack-node1.example.com'network.default_route3.2.1.4 get_hostname
  ~Get hostname
salt '*' network.get_hostname3.2.1.5 hw_addr
  ~Return the hardware address(a.k.a. MAC address) for a given interface
salt '*' network.hw_addr eth03.2.1.6 interface
  ~Return the inet address for agiven interface
salt '*' network.interface eth03.2.1.7 traceroute
  ~Performs a traceroute to a 3rdparty host
salt '*' network.traceroute baidu.com3.2.2service模块
3.2.2.1 available
  ~Returns True if the specifiedservice is available, otherwise returns False.
salt '*' service.available sshd3.2.2.2 get_all
  ~Return a list of all availableservices
salt 'saltstack-node1*' service.get_all3.2.2.3 start
  ~Start the specified service
salt 'saltstack-node1*' service.start postfix3.2.2.4 stop
  ~Stop the specified service
salt 'saltstack-node1*' service.stop postfix3.2.2.5 status
  ~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 postfix3.2.3 state模块
  作用:Control the state system on the minion.
3.2.3.1 show_top
  ~Return the top data that theminion will use for a highstate
salt 'saltstack-node1*' state.show_top3.2.3.2 show_highstate
  ~Retrieve the highstate datafrom the salt master and display it
salt 'saltstack-node1*' state.show_highstate3.2.3.3 highstate
  ~Retrieve the state data fromthe salt master for this minion and execute it
salt '*' state.highstate3.2.3.4 sls
  ~Execute the states in one ormore SLS files
salt '*' state.sls apache env=base3.2.4控制cmd模块的方法
  我们可以编辑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
3.3 返回程序(Returnners)
  如果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
3.3.1salt.returners.mysql(案例)
  返回数据到mysql服务器上,注意:minion端依赖一个python包:python-mysqldb。
  官网介绍:可以在master端或者minion端配置文件里面写上mysql相关的配置,如果是minion端,需要在每个minion的配置文件里面写,如果写到master端的配置文件,minion端则无需配置。因此,我们可以把这些配置写到master端的配置文件。
  但是,我在做实验的时候,把相关配置写入到master的配置文件,minion端没写,结果发现mysql的表里是空的,没有记录。注:系统环境的版本是CentOSrelease 6.7 (Final)。
  所以,为了防止出错,我们就把mysql的相关配置写入到所有minion的配置文件里。
  mysql返回程序操作流程如下:
3.3.2安装mysql和依赖包
  ~master端
yum install -y mysql-server MySQL-python  
/etc/init.d/mysqld start
  ~所有minion端要安装:MySQL-python
  如果不装,这个minion端的执行返回结果是不会写到mysql数据库表的。
  yum install -y MySQL-python
3.3.3mysql的相关配置
  因为要把客户端执行命令的结果直接返回给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 restart3.3.4创建salt的数据库和表结构
3.3.4.1 创建库
mysql  
---------------------------------
  
CREATE DATABASE `salt`
  
  DEFAULTCHARACTER SET utf8
  
  DEFAULTCOLLATE utf8_general_ci;
3.3.4.2 创建三个表
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;
  
# 查看所有的表
3.3.4.3 授权
grant all on salt.* tosalt@'10.0.0.0/255.255.255.0' identified by 'salt';  
exit;
3.3.5验证
  我们可以在master端打开两个窗口,一个看shell执行返回结果,一个看mysql中返回的结果。
  返回程序把执行结果写入到mysql中,但是,返回程序无论写到哪里,master端都会显示执行结果。
3.3.5.1 shell
  我们输入下面两条命令,将远程执行的结果,返回给mysql。
salt '*' test.ping --return mysql  
salt '*' cmd.run 'uptime' --return mysql
  执行结果(命令行):
DSC0000.png

3.1.1.1 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命令相对应的图:
DSC0001.png

  salt '*' test.ping --return mysql命令相对应的图:
DSC0002.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-544144-1-1.html 上篇帖子: saltstack第二波《数据系统》 下篇帖子: 使用SaltStack搭建一套LAMP服务器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表