运维工具saltstack学习(1)

一、Saltstack简介
 
概念:salt是一种全新的基础设施管理方式,是一个基于C/S(client/server)架构的服务器基础架构集中化管理平台,能够维护预定义状态的远程节点;一个分布式远程执行系统,用来在远程节点上执行命令和查询数据。部署轻松,运行快,扩展性好,速度快,服务器之间秒级通讯。底层采用的是动态的连接总线,使其可以用于远程执行、配置管理(服务、文件、用户、组等的管理)、云管理等。
 
特点:相对于puppet(运维工具);并行执行,并发能力强;基于ZeroMQ等成熟的技术做服务器端和客户端的通讯,采用的是AES的加密方式;具有python API,通过API自定义扩展saltstack的功能等;是灵活且开放;通过轻量级消息队列(ZeroMQ)与python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)的结合而构建。
 
SaltStack 保持了输入、输出、配置文件的一致性,所有文件均使用YAML格式。主要负责配置管理和远程执行(在远程主机运行预定义或任意的命令,也叫远程执行)。通过部署saltstack环境,可以在多台服务器上批量执行命令,根据不同业务特性进行配置集中化管理、文件分发、采集服务器数据和软件包管理等工作。
 
缺点:需要单独安装客户端(Ansible不需要客户端);安全隐患大,因为minion中会具有root权限。
 
二、Saltstack原理
 
SaltStack 采用 C/S模式,服务端server端就是salt的master,客户端client端就是minion。minion与master之间通过ZeroMQ消息队列通信。master和minion都以守护进程的方式运行。master可以发送任何指令让minion执行,salt有很多可执行模块,比如cmd模块,通常位于python库中,locate salt | grep /usr/ 可以看到salt自带的所有东西。具体步骤如下:
第一步:salt stack的master与minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅(pub/sub)服务模式,连接方式包括tcp,ipc。
第二步:salt命令,以ls查看为例,将cmd.run ls命令从salt.client.LocalClient.cmd_cli发布到master,获取一个Jobid,根据Jobid获取命令执行结果。
第三步:master接收到命令后,把自己的pub key发过去,master端通过salt-key -L命令就会看到minion的key,将要执行的命令发送给客户端minion。
第四步:minion从消息总线上接收到要处理的命令,交给minion._handle_aes处理。
第五步:minion._handle_aes发起一个本地线程调用cmdmod执行ls命令。线程执行完ls后,调用minion._return_pub方法,将执行结果通过消息总线返回给master。
第六步:master接收到客户端返回的结果,调用master._handle_aes方法,将结果写入文件中。
第七步:salt.client.LocalClient.cmd_cli通过轮询获取Job执行结果,将结果输出到终端。
原理图解释:
  • Minion 是 SaltStack 需要管理的客户端安装组件,会主动去连接 Master 端,并从 Master 端得到资源状态信息,同步资源管理信息。
  • Master 作为控制中心运行在主机服务器上,负责 Salt 命令运行和资源状态的管理。
  • ZeroMQ 是一款开源的消息队列软件,用于在 Minion 端与 Master 端建立系统通信桥梁。
  • Daemon 是运行于每一个成员内的守护进程,承担着发布消息及通信端口监听的功能
 操作执行原理图:
 
端口:
master默认监听4505和4506端口,minion开启4505。
4505对应的是ZMQ的PUB system,master端用来发送系统消息给minion。
4506对应的是REP system用来接受消息,客户端和服务端之间的通信接口,用来接收minion的消息。
查看端口信息:netstat -antlp
 

猜你喜欢

转载自www.cnblogs.com/pqcxmu/p/10212331.html