运维自动化之Saltstack(二)管理minion端——远程执行(命令行方式)
2016-08-20 17:15
946 查看
我们需要先了解一些基本的概念和salt管理方面的信息 SaltStack常见架构方式 * Local 需要安装minion(就是自己管理自己) * Master/Minion 需要安装minion,消息传递基于ZeroMQ 并行执行,性能好 * Salt SSH 不需要安装minion,这种方式是串行执行相关操作的,性能不会太好 下面分享的都是基于 Master/Minion 的架构 一、 SaltStack管理minion的方式 * 远程执行命令管理minion (常用,成熟) * 基于状态的配置文件管理minion (常用,成熟) * 云管理minion (不常用,不成熟) 这次,我想先和大家分享“远程执行”的管理方式;也就是通过一些命令和模块的方法以及参数, 去对minion进行自动化的管理操作 二、SaltStack 远程执行 远程执行的 三大功能 或者叫三大组成部分:目标 功能 返回 使用方法: 命令 ‘目标’ 功能模块.方法 <参数> 返回 我们用实例说明一下: 51CTO自动配上了水印(还那么大!!!),我只好再说明一下了: 命令 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就派上用场了。 [root@master ~]# salt 'minion2.saltstack.com' saltutil.kill_job 20160820154455398365 # 通过saltutil模块的kill_job 方法加上jid,可以将这个正在执行中的状态(job)杀死终止 有时候你会有看不到jid的情况,没关系,可以利用下面法方法找出来所有正在执行的job [root@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端的连接状态 实例: [root@master stats]# salt-run manage.status down: up: - minion1.saltstack.com - minion2.saltstack.com [root@master ~]# salt-run manage.up # 只显示目前在线的minion - minion1.saltstack.com - minion2.saltstack.com [root@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文件等操作 实例: [root@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. 在参数之间的逗号之间加入空格 [root@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 去指定参数之间的分隔符 [root@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端直接正常执行 [root@master stats]# salt '*' cmd.run 'df -h' 3. 再在 Mysql Server 中查看表内容 MariaDB [(none)]> select * from salt.salt_returns\G 下一篇,我会和大家分享 运维自动化之Saltstack 的 grains 和 pillar
相关文章推荐
- 2、自动化运维之SaltStack远程执行详解
- SaltStack入门篇之远程执行和配置管理
- ceph存储 配置管理以及远程执行工具saltstack基础入门文档
- 运维自动化之:Saltstack配置管理工具安装配置使用攻略
- 自动化运维神器之saltstack (四)用户管理
- 集中化管理平台Saltstack远程执行命令
- 运维自动化之Saltstack(五)配置管理
- saltstack:运维自动化工具
- 运维自动化之SaltStack简单入门
- saltstack 自动化运维神器(三)节点组及复合匹配器
- Fabric自动化运维工具实现远程SSH部署及系统管理
- 自动化运维工具Saltstack详细介绍
- 系统自动化配置和管理工具:SaltStack
- 运维自动化Saltstack之批量替换字符串
- saltstack管理八之常用执行模块
- saltstack 自动化运维神器(四)salt-ssh
- 自动化运维,远程交互从服务器A上ssh到服务器B上,然后执行服务器B上的命令。
- Linux Shell远程执行命令(命令行与脚本方式)
- 自动化运维神器之saltstack (三)节点组及复合匹配器
- 使用Gearman提高自动化运维的远程执行速度