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

[经验分享] 运维自动化之Saltstack(二)管理minion端——远程执行(命...

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-9-18 10:50:07 | 显示全部楼层 |阅读模式
运维自动化之Saltstack(二)管理minion端——远程执行(命令行方式)
我们需要先了解一些基本的概念和salt管理方面的信息
SaltStack常见架构方式
* Local              需要安装minion(就是自己管理自己)
* Master/Minion         需要安装minion,消息传递基于ZeroMQ 并行执行,性能好
* Salt SSH            不需要安装minion,这种方式是串行执行相关操作的,性能不会太好
下面分享的都是基于 Master/Minion 的架构
一、 SaltStack管理minion的方式
* 远程执行命令管理minion        (常用,成熟)
* 基于状态的配置文件管理minion    (常用,成熟)
* 云管理minion               (不常用,不成熟)
  这次,我想先和大家分享“远程执行”的管理方式;也就是通过一些命令和模块的方法以及参数,
去对minion进行自动化的管理操作

二、SaltStack 远程执行
远程执行的  三大功能 或者叫三大组成部分:目标  功能   返回
使用方法:
命令       ‘目标’      功能模块.方法     <参数>     返回
我们用实例说明一下:
命令  salt
目标  'mininon1.saltstack.com'
模块  salt
方法  ping   # 测试minion主机是否存活
参数  -v   #这里的 -v 参数是可选的。功能是返回信息中会有一给job的jid,基于jid可以对此job
         进行管理,下面会介绍如何使用
返回  True(为真)和jid
用于测试主机的存活状态还有一种方法:
salt-run  manage.status  查看目前所有的minion主机到master端的连接状态
   还记得刚才那个job的jid吗?salt管理minion端的时候,是基于ZeroMQ(轻量级消息队列),传输数据的;而一旦master发送出去的任务,就会在minion端执行;这时master端就没法控制他了,比如某一个任务派发错了,想停止怎么办?特别是在以后我们所要分享的用配置文件管理时。这时jid就派上用场了。
[iyunv@master ~]# salt 'minion2.saltstack.com' saltutil.kill_job 20160820154455398365
# 通过saltutil模块的kill_job 方法加上jid,可以将这个正在执行中的状态(job)杀死终止
有时候你会有看不到jid的情况,没关系,可以利用下面法方法找出来所有正在执行的job
[iyunv@master ~]# salt 'minion2.saltstack.com' saltutil.running  
# 这个命令可以查看minion端正在执行中的job基本状态,其中含有job的jid
下面咱一个一个的来分析一下远程执行的三个组成部分
1.目标:
可以用以下方式来对目标进行匹配:
-L  'ID列表' -L 是默认的值;在此模式支持通配符;     
   如:‘minion1.saltstack.com,minion2.salt.saltstack.com’
-E  ‘minion(1|2).saltstack.com’  -E 用正则表达式匹配
-G  ‘os.CentOS’            -G 用saltstack的grans数据系统匹配
-I   用用户自定义的变量(pallar)来匹配
-S   192.168.124.0/24              IPv4地址匹配
-C  ‘G@os:Ubuntu and  webser*  or  E@database.*'  
      -C 意思是用混合模式匹配,操作符有:and  or  not。
     G@表示后面用grains模式匹配,E@表示后面用正则表达式匹配;
      需要注意的是 not 不可以用在最开始的位置
实例展示:
salt-cp 命令常用于临时测试,或者是向minion端传送一个脚本文件,之后利用远程执行此脚本
2.模块方法:

列出当前版本支持的所有模块列表
salt '*' sys.list_modules
列出minions上所有有效的模块的帮助文档,用以下命令:
salt  -d | less
查看某个模块的所有方法的使用实例,使用如下方法:
salt  -d |grep  archive |less
一些常用的模块的常用方法:
模块: test
功能:测试minion端的相关事项  
使用方法: test.ping            # test是模块,ping 是此模块提供的其中一个方法,下同
实例:
salt  '*'  test.ping
模块: manage
功能: 对master和minion的状态信息等进行管理
使用方法:manage.status          # 查看目前所有的minion主机到master端的连接状态
实例:
[iyunv@master stats]# salt-run manage.status
down:
up:
    - minion1.saltstack.com
    - minion2.saltstack.com
[iyunv@master ~]# salt-run manage.up  # 只显示目前在线的minion
- minion1.saltstack.com
- minion2.saltstack.com
[iyunv@master ~]# salt-run manage.versions  # 查看master和minion端的版本
Master:
    2015.5.10
Up to date:
    ----------
    minion1.saltstack.com:
        2015.5.10
    minion2.saltstack.com:
        2015.5.10
模块:file
功能:检查minion端文件的相关管理
实例:
salt  '*'  file.file_exists  /etc/passwd
salt  '*'  file.stats   /etc/passwd
salt  '*'  file.chown   /etc/passwd   root  root
salt  '*'  file.get_mode  /etc/passwd
salt  '*'  file.set_mode  /etc/passwd  0644
salt  '*'  file.append  /tmp/test/test.conf  "想这个文件的追加此内容"
模块: cmd
功能: 可以运行minion端的所有可以有效执行的shell命令
实例:
salt  '*'  cmd.run  'df  -h'  
模块: archive
功能: 实现系统层面的压缩包调用;支持 gunzip/gzip/rar/unrar/tar/unzip等
实例:
salt  '*'  archive.tar  /tmp/sourcefile.txt   # 压缩
salt '*' archive.tar cjvf /tmp/tarfile.tar.bz2 /tmp/file_1,/tmp/file_2
模块:cp
功能:实现远程文件、目录的复制,以及下载URL文件等操作
实例:
[iyunv@master stats]# salt '*' cp.get_url http://www.baidu.com /tmp/index.html
minion2.saltstack.com:
    /tmp/index.html
minion1.saltstack.com:
    /tmp/index.html
模块:network
功能:返回被控主机的网络信息
实例:
salt  'minion1.saltstack.com'  network.dig   www.baidu.com
salt  'minion1.saltstack.com'  network.ping   www.baidu.com
salt  'minion1.saltstack.com'  network.traceroute   www.baidu.com
salt  '*'   network.hwaddr  eth0       # 网卡 MAC
salt  '*'   network.interfaces         # 网络接口设备信息
salt  '*'   network.ip_addrs          # IP地址
salt  '*'   network.subnets           # 子网掩码,会返回CIDR形式的IP地址,如:192.168.124.0/24
模块:service
功能:实现对minion端的服务管理
实例:
salt  '*'  service.enble    sshd
salt  '*'  service.disable  sshd
salt  '*'  service.reload   sshd    # 注意某些服务不一定支持 reload
salt  '*'  service.restart  sshd
salt  '*'  service.stop    sshd
salt  '*'  service.status   sshd
  有时候你会遇到下面的情况。也许是你想装逼一下
  一次一起执行多个功能,并且对每个功能赋予相应需要的参数:
salt   '*'  cmd.run,test.ping,test.echo    'cat /proc/cpuinfo',,foo
从上面的命令中可以看出:
1. 默认情况下,多个模块方法之间使用逗号“,”来分隔的
2. 默认情况下,多个参数也是用逗号 “,”来分隔的,并且顺序是要和前面的模块方法一一对应的;
   就像是 test.ping  是不需要参数的,所以就是逗号之间是空的: ,,
假如你要执行如下命令:
salt '*' cmd.run,test.ping,test.echo     'echo "1,2,3"',,foo
可能就执行不成功:
Cannot execute compound command without defining all arguments.
原因是要执行的传送参数中含有了和参数之间分隔符一样的符合:逗号 “,”
解决办法是把他们进行明显的区分才行:
1.  在参数之间的逗号之间加入空格
[iyunv@master ~]# salt '*' cmd.run,test.ping,test.echo    'echo "1,2,3"'  ,   ,   foo
minion1.saltstack.com:
    ----------
    cmd.run:
        1,2,3
    test.echo:
        foo
    test.ping:
        True
2. 用 --args-separator 去指定参数之间的分隔符
[iyunv@master ~]# salt  --args-separator=: 'minion1.*' cmd.run,test.ping,test.echo 'echo '
1,2,3''::foominion1.saltstack.com:
    ----------
    cmd.run:
        1,2,3
    test.echo:
        foo
    test.ping:
        True
总结:
也许你会发现,不论用不用 --args-separator ,只要在参数和参数分隔符之间用空格隔开就行了,就像第一种方法。
3.返回(Returners):
默认是标准输出到屏幕
当然可以输出到其他目标,如:
mysql
redis
这里说一下将Returners写入到Mysql
方法一:
在每个minion端安装软件包MySQL-python ,让每个minion主机自己把其返回的信息写入数据库
在每个minion端的主机主配置文件中添加如下内容:
tail    /etc/salt/minion
mysql.host: '192.168.124.1'   # Myslq Server 的IP地址
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306
重启 salt-minion 服务
在mysql server中创建配置salt相关的数据库和表
MariaDB [(none)]>CREATE DATABASE  `salt`
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;
MariaDB [(none)]>use  salt;
MariaDB [salt]>CREATE TABLE `jids` (
  `jid` varchar(255) NOT NULL,
  `load` mediumtext NOT NULL,
  UNIQUE KEY `jid` (`jid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
MariaDB [salt]>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;
MariaDB [salt]>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;
MariaDB [salt]>grant all on salt.* to salt@'%' identified by 'salt';   # 授权 salt 用户
MariaDB [salt]>exit;
验证:
在master端执行:
salt '*' test.ping --return mysql
之后在 Mysql Server 上查看表 salt_reture
MariaDB [(none)]> select * from salt.salt_returns\G
正常情况下会显示有内容
方法二:
只在master端安装软件包:MySQL-phyon ;在master端的主配置文件配置如下内容:
tail    /etc/salt/master
mysql.host: '192.168.124.1'   # Myslq Server 的IP地址
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306
master_job_cache: mysql
# 以上是设置返回值有matser写入mysql数据库内,
重启 salt-master 服务
测试方法:
1. 先把原来的表内容清空
MariaDB [(none)]> truncate table salt.salt_returns;   # 清空表内容
MariaDB [(none)]> select * from salt.salt_returns\G   # 确认表内无内容
2. 在master端直接正常执行
[iyunv@master stats]# salt '*' cmd.run 'df -h'
3. 再在 Mysql Server 中查看表内容
MariaDB [(none)]> select * from salt.salt_returns\G
下一篇,我会和大家分享 运维自动化之Saltstack 的 grains 和 pillar




运维网声明 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-273886-1-1.html 上篇帖子: Saltstack (一)基本介绍和安装以及基本的配置 下篇帖子: 运维自动化之Saltstack(四)Returners(返回)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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