一,Saltstack的简介
SaltStack是一个开源的、新的基础平台管理工具,使用Python语言开发,同时提供Rest API方便二次开发以及和其他运维管理系统进行集成。
相对于出道比较早的Puppet,SaltStack先天的优势就是简单、易用,可以非常快速的在团队中推广和使用,而且运行多平台。
二,SaltStack目前拥有四大主要功能
远程执行:就是在管理节点上实现在上百台、上千台机器上同时执行一个命令。
配置管理:也可以称之为状态管理,你可以描述一个状态。例如,某台机器要安装Nginx软件包、Nginx必须是启动的状态、Nginx有一个配置文件(内容和某个地方的一样)。你用一种描述语法描述出来后交给SaltStack,SaltStack就可以帮你实现,而不用你手动进行Nginx软件包的安装、配置文件的修改、启动等。
云管理:SaltStack有一个组件叫作salt-cloud,它可以帮你自动化的进行云主机的创建和管理,支持很多公有云或私有云,例如AWS、阿里云、HP云、OpenStack、CloudStack等。
事件驱动:事件驱动基础设施是SaltStack最强大也是最神秘的功能,前面的远程执行和配置管理是最基础的的,事件驱动是指SaltStack在日常运行中可以产生和捕捉事件,并根据捕捉到的事件触发对应的操作。
三,SaltStack的四种运行方式
Local:在本地运行或者说单台使用SaltStack
Minion/Master: 传统的客户端/服务器端(C/S)架构
Syndic: 使用代理实现架构扩展,用于管理更多的节点
Salt SSH: 无须安装客户端,直接通过SSH通信
四,基于zmq的saltstack自身网络服务
我们进行自动化运维大多数情况下,是我们的服务器数量已经远远超过人工SSH维护的范围,SaltStack可以支数以千计,甚至更多的服务器。这些性能的提供主要来自于ZeroMQ,因为SaltStack底层是基于ZeroMQ进行高效的网络通信。ZMQ用于node与node间的通信,node可以是主机也可以是进程。
ZeroMQ简介
ZeroMQ(我们通常还会用ØMQ , 0MQ, zmq等来表示)是一个简单好用的传输层,像框架一样的一个套接字库,他使得Socket编程更加简单、简洁和性能更高。它还是一个消息处理队列库,可在多个线程、内核和主机盒之间弹性伸缩。
我是这样理解的:zmq更像一种方式或者语言,当然,它确实不是,用它在node和node间进行通信,saltstack用自己的两种网络服务pub和req让管理变得更加简单,实用
发布与订阅
ZeroMQ支持Publish/Subscribe,即发布与订阅模式,我们经常简称Pub/Sub。
Salt Master运行两个网络服务,其中一个是ZeroMQ PUB系统,默认监听4505端口。可以通过修改/etc/salt/master配置文件的publish_port参数设置。它是salt的消息发布系统,如果查看4505端口,会发现所有的Minion连接到Master的4505端口,TCP状态持续保持为ESTABLISHED。
[root@ master]# lsof -i:4505
这样Salt Master发布一个消息,所有连接到4505这个Pub端口上的Minion都会接收到这个消息。然后每个Minion会再判断自己是否需要执行这个消息。
请求与响应
ZeroMQ支持Request-Reply,即请求与响应模式,我们经常简称REQ/REP。
Salt Master运行的第二个网络服务就是ZeroMQ REP系统,默认监听4506端口,可以通过修改/etc/salt/master配置文件的ret_port参数设置。它是salt客户端与服务端通信的端口。比如说Minion执行某个命令后的返回值就是发送给Master的4506这个REP端口。
如果安装了python-setproctitle软件包,就可以直接看到Salt Master启动的进程的名称。
[root@ops-node1 ~]# ps aux | grep salt
/usr/bin/salt-master -d ProcessManager #中心进程管理器
/usr/bin/salt-master -d _clear_old_jobs #清除旧的Jobs文件及更新fileserver
/usr/bin/salt-master -d Publisher #将任务PUB到Minion端
/usr/bin/salt-master -d EventPublisher #Event Publisher进程
/usr/bin/salt-master -d ReqServer_ProcessManager #ReqServer进程管理器
/usr/bin/salt-master -d MWorker #工作进程
/usr/bin/salt-master -d MWorker #工作进程
/usr/bin/salt-master -d MWorker #工作进程
/usr/bin/salt-master -d MWorker #工作进程
/usr/bin/salt-master -d MWorker #工作进程
/usr/bin/salt-master -d MWorkerQueue #将Ret接口(ROUTER)数据转发到Worker(DEALER)