SaltStack自动化运维(1)——基础原理
1.什么是SaltStack?
Saltstack是基于Python开发的一套C/S架构,具备Puppet、Ansible功能于一身的配置管理工具,功能十分强大,
各模块融合度及复用性极高;使用号称世界上最快的消息队列ZeroMQ使得Saltstack能够秒级在数万台服务器上进行各种操作,
而且使用RAS Key方式确认身份,传输采用AES加密,安全性能更高;
Saltstack不仅仅是一款配置管理工具,还是一款做云计算和数据中心架构编排利器。
目前Salt-cloud项目也已经合并到Saltstack主项目里,Saltstack已经支持Docker相关模块,
在友好地支持各大云平台之后,配合Saltstack的Mine实现各云平台业务自动扩展。
-
SaltStack是一种新型的基础设施管理软件,简单易部署,可伸缩的足以管理成千上万的服务器 和足够快的速度控制,与他们交流,以毫秒为单位
-
SaltStack提供了一个动态基础设施通信总线用于编排,远程执行、配置管理等等
-
SaltStack项目于2011年启动,年增长速度较快,五年期固定基础设施编制和配置管理的开源项目
-
SaltStack社区致力于保持slat项目集中、友好、健康、开放 简单来说它的两大基础功能就是:配置管理、远程命令执行
-
剩下就是根据你的需求*组合,实现更复杂的功能和系统管理
(1)什么是salt
一个配置管理系统,能够维护预定义状态的远程节点(比如,确保指定的报被安装,指定的服务在运行)
一个分布式远程执行系统,用来在远程节点(可以是单个节点,也可以是任意规则挑选出来的节点)上执行命令和查询数据
(2)Salt的核心功能
1.使命令发送到远程系统是并行的而不是串行的 2.使用安全加密的协议 3.使用最小最快的网络载荷 4.提供简单的编程接口
Salt同样引入了更加细致化的领域控制系统来远程执行,使得系统成为目标不止可以通过主机名,还可以通过系统属性
(3)salt使用Python客户端接口
为了允许简单的扩展,Salt执行程序可以写为纯Python模块。
数据从Salt执行过程中收集到可以发送回master服务端,或者发送到任何任意程序。
Salt可以从一个简单的Python API调用,或者从命令行被调用,所以Salt可以用来执行一次性命令,
也可以作为一个更大的应用程序的一个组成部分。
SaltStack作用于仆从和主拓扑。SaltStack与特定的命令结合使用可以在一个或多个下属执行。 实现这一点,此时Salt
Master可以发出命令,如salt ‘*’ cmd.run ‘ls -l /’。
除了运行远程命令,SaltStack允许管理员使用“grain”。
grain可以在SaltStack仆从运行远程查询,因此收集仆从的状态信息并允许管理员在一个*位置存储信息。
SaltStack也可以帮助管理员定义目标系统上的期望状态。
这些状态在应用时会用到.sls文件,其中包含了如何在系统上获得所需的状态非常具体的要求。
由于它提供了在管理远程系统的灵活性,SaltStack-based产品迅速获得利益。
该功能可以对比由状态管理系统提供的功能,如Puppet和Ansible。
SaltStack很大程度上得益于快速的采用率,它包括一个在管理系统上运行远程命令的有效方式。
2.saltstack的通信端口
master端:4505 minion端:4506
saltstack的master端监听4505与4506端口。4505为salt的消息发布系统,4506为salt客户端与服务端通信的端口;
salt客户端程序不监听端口,客户端启动后,会主动连接master端注册,然后一直保持该TCP连接,
master通过这条TCP连接对客户端控制,如果连接断开,master对客户端就无能为力了。
当然,客户端若检查到断开后会定期的一直连接master端的。
3.saltstack三大功能
(1)远程执行
(2)配置管理
(3)云管理
4.ZeroMQ简介
ZeroMQ的详细信息可参考:https://www.cnblogs.com/rainbowzc/p/3357594.html或https://www.jianshu.com/p/36a7775b04ec
ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象, 提供跨越多种传输协议的套接字。
ZeroMQ是网络通信中新的一层,介于应用层和传输层之间(按照TCP/IP划分),其是一个可伸缩层,可并行运行,分散在分布式系统间。
5.自动化运维介绍
传统运维:传统运维效率低,大多工作需要人工完成,工作繁琐,容易出错
每日重复做相同的事情,没有标准化流程,脚本过多,不方便管理
自动化运维:解决上面所有问题常见自动化运维工具
Puppet:基于rubby开发,c/s架构,支持多平台,可管理配置文件、用户、cron任务、软件包、系统服务等。分为社区版和企业版,企业版支持图形化配置。
Saltstack:基于Python开发,c/s架构,支持多平台,比Puppet轻量,在远程执行命令时非常快捷,配置和使用比puppet容易,能实现puppet几乎所有的功能。
Ansible:更加简洁的自动化运维工具,不需要在客户端上安装客户端软件,基于Python开发的。可以实现批量操作系统配置、批量程序的部署、批量执行命令。
目前主流的自动化运维工具有3种:Puppet、Saltstack和Ansible,用的最多的还是Ansible
Puppet:官网:www.puppetlabs.com ,基于rubby开发,C/S架构,支持多平台,可管理配置文件、用户、cron任务、软件包、系统服务等。
分为社区版(免费)和企业版(收费),企业版支持图形化配置。
Saltstack:官网:https://saltstack.com ,基于python开发,C/S架构,支持多平台,比puppet轻量,在远程执行命令是非常快捷,配置和使用比puppet容易,能实现puppet几乎所有的功能。
Ansible:官网:www.ansible.com ,更加简洁的自动化运维工具,不需要在客户端上安装agent,基于python开发,可以实现批量操作系统配置、批量程序的部署、批量运行命令。
6.SaltStack的学习过程
- (1)安装和配置SaltStack
- (2)远程执行命令所有管理系统
- (3)设计、开发和部署系统配置
- (4)用SaltStack反应器来自动化基础设施
- (5)协调使用SaltStack编排复杂的管理操作
7.SaltStack的组件
(1)SaltStack Master
*管理系统\服务端,这个系统是用来发送命令和配置到SaltStack Minion上运行。(2)SaltStack Minion
接受受管理系统\客户端,该系统接收来自SaltStack Master命令和配置。(3)执行模块过程
特别对一个或多个命令从命令行执行受管理系统。
适用于:实时监控、状态和库存;一次性命令和脚本;部署关键更新(4)规则(States)
声明或命令式表示一个系统的配置
(5)Grains
系统变量, Grains是静态信息基础管理系统,包括操作系统、内存和许多其他的系统属性,您还可以定义定制的Grains为任何系统(6)Pillar
**用户定义的变量,这些安全变量定义和存储在Salt Master,**然后“分配”到一个或多个下属,Pillar数据存储值,文件路径,配置参数,和密码。(8)Top File
数据匹配公式(8)Runners
模块执行SaltStack Master执行支持任务,Runners报告的工作状态、连接状态读取数据从外部api,查询连接Salt Minions,和更多。
例如,安排Runners在许多系统之间协调配置部署。(9)Returners
SaltStack Minion返回的数据发送到另一个系统,如数据库,Returners可以运行在Salt Minion或Salt Minion。
(10)Reactor
SaltStack环境中触发事件发生时的反应。(11)Salt Cloud / Salt Virt
云提供商提供系统/管理程序并立即把他们管理下。
(12)SaltStack SSH
SaltStack使用ssh运行命令,在没有Salt Minion的情况下。