saltstack介绍:
saltstack是基于python开发的一套C/S自动化运维工具,通信采用了zeromq消息队列的(pub/sub),数据传输采用了AES(高级加密)保证安全性,认证采用了SSL方式。
一. ZeroMQ介绍:
ZeroMQ是由一套组件组成,内封装的有网络通信,消息队列,线程调度等功能并向上层提供了简洁的API接口,应用程序通过加载库文件,调用API函数来实现高性能网络通信。
ZeroMQ将网络通信分成4种模型,分别是一对一结对模型(Exclusive-Pair)、请求回应模型(Request-Reply)、发布订阅模型(Publish-Subscribe)、推拉模型(Push-Pull)。这4种模型总结出了通用的网络通信模型,在实际中可以根据应用需要,组合其中的2种或多种模型来形成自己的解决方案。
saltstack-master与minion通信就采用了zeromq的请求回应模型(request-reply)和发布订阅模型(publish-subscribe):
1. 请求回应模型
由请求端发起请求,然后等待回应端应答。一个请求必须对应一个回应,从请求端的角度来看是发-收配对,从回应端的角度是收-发对。跟一对一结对模型的区别在于请求端可以是1~N个。该模型主要用于远程调用及任务分配等。Echo服务就是这种经典模型的应用。
2. 发布订阅模型
发布端单向分发数据,且不关心是否把全部信息发送给订阅端。如果发布端开始发布信息时,订阅端尚未连接上来,则这些信息会被直接丢弃。订阅端未连接导致信息丢失的问题,可以通过与请求回应模型组合来解决。订阅端只负责接收,而不能反馈,且在订阅端消费速度慢于发布端的情况下,会在订阅端堆积数据。该模型主要用于数据分发。天气预报、微博明星粉丝可以应用这种经典模型。
salt-master启动时会运行两个端口4505和4506:
4505:他是salt的消息发布,系统底层基于zeromq pub(发布订阅),可以在master的配置文件中publish_port修改参数。
作用:负责下发命令,并且所有的minion都会连接到4505这个端口,可通过lsof -i:4505命令查看,注:可在minion的配置文件修改master参数指定主master。
4506:他是salt消息收集,系统底层基于zeromq REQ/REP(请求回应模型),在master配置文件中ret_port修改参数。
作用:负责接收客户端发送过来的结果。
二. master与minion的认证:
minion在第一次启动时会在/etc/salt/下生成/pki/minion目录,并在下面创建minion.pem(私钥)和minion.pub(公钥),然后主动将minion.pub发送到master的/etc/salt/pki/master/minions.pre/下面,并且文件以minion的id文件内的数据命名,等待认证。在master上执行salt-key -L命令可以查看等待签证的minion。执行salt-key -A -y命令同意所有没有签证的minion。这时minion会在/etc/salt/pki/minion/下生成minion_master.pub文件,注这个是master的公钥文件。并且master会将/pki/master/minions.pre目录下的公钥转移到/pki/master/minions/目录下表示已经认证,这时master就可以管理minion了。
三. saltstack数据系统(grains和pillar):
grains是静态数据在minion启动时会收集一些本地的属性信息例如:(CPU,内存,系统,版本,ip,mac,硬盘,设备型号)等等,并向master提交。注:重启便会重新收集。
1.基本数据查看与获取:
salt ‘zcl*’ grains.items:列出ID以zcl开头的minion,并显示所有的grains静态变量与值。
salt ‘zcl*’ grains.ls:列出ID以zcl开头的minion,并显示所有的grains静态变量名。
salt ‘zcl*’ grains.items os:显示某一个变量与值
salt ‘zcl*’ grains.get os:直接获取某一个变量的值
2.根据目标属性条件进行使用命令:
salt -G ‘os:CentOS’ test.ping:所有minion主机为centos系统的进行ping测试。
salt -G ‘os:CentOS’ cmd.run ‘date’:所有minion主机为centos系统的执行date命令
3.自定义静态变量:
第一种:
vi /etc/salt/minion
重启或者使用salt ‘*’ saltutil.sync_grains命令可不重启。
第二种: 一般生产环境都用第二种。
vi /etc/salt/grains
salt ‘*’ saltutil.sync_grains
salt '*' grains.get zcl
salt '*' grains.item zcl roles:列出多个变量
来源:oschina
链接:https://my.oschina.net/u/4344497/blog/3634465