saltstack系统架构及原理

上传人:小** 文档编号:93141063 上传时间:2019-07-17 格式:DOC 页数:11 大小:366.10KB
返回 下载 相关 举报
saltstack系统架构及原理_第1页
第1页 / 共11页
saltstack系统架构及原理_第2页
第2页 / 共11页
saltstack系统架构及原理_第3页
第3页 / 共11页
saltstack系统架构及原理_第4页
第4页 / 共11页
saltstack系统架构及原理_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《saltstack系统架构及原理》由会员分享,可在线阅读,更多相关《saltstack系统架构及原理(11页珍藏版)》请在金锄头文库上搜索。

1、 公众云saltstack自动化系统操作手册【saltstack系统架构及原理】V1.0Error! Reference source not found.Error! Reference source not found.Error! Reference source not found.目 录1.系统介绍32.系统架构42.1系统架构图42.2基本术语53.基本配置63.1服务与配置63.2分组配置94.基础用法与命令134.1基本使用134.2常用内建模块用法命令介绍135.Saltstack批量化部署与配置管理196.Saltstack管理流程与业务问题管理201. 系统介绍SaltS

2、tack项目始于2011年2月,创始人是Thomas S Hatch,团队成员:Thomas S Hatch、 Jeff Schroeder、 Seth house,是一个相对较新的项目,是用Python写成的开源异构平台基础设置轻量级管理工具,遵守Apache2协议,有一个强大的远程执行命令引擎和大型分布式的配置管理系统,容易搭建,能够快速管理成千上万的服务器,不管是本地网络,还是跨数据中心, 保持秒级响应时间;架构采用C/S模式,在一个后台程序中集成必要功能。默认不需要复杂的配置就可以工作,同时可以定制用于特殊的需求。Salt采用了很多技术和技巧,网络层采用优秀的ZeroMQ库,守护进程里

3、面包含AMQ代理,采用公钥和主控通讯,同时使用更快的AES加密通信,验证和加密都已经集成在Salt里面,使用msgpack通讯,所以更快速和更轻量网络交换。 特点:简单易用,模块编写方便,社区活跃,解决问题速度快可以执行任意命令,或者预定义的模块(复杂)命令。针对单独独立服务器,或者同名一组服务器,或者相同角色,系统硬件信息,操作系统,当前版本等等;通过写简单的命令列表和属性,就可以将你的服务器配置为已知状态,而不需要学习其他的语言(只需要掌握python语言即可);2. 系统架构2.1 系统架构图2.2 基本术语Master - 控制中心,salt命令运行和资源状态管理端Minions -

4、需要管理的客户端机器,会主动去连接Master端,并从Master端得到资源状态信息,同步资源管理信息States - 配置管理的指令集Modules- 包含命令行下运行的指令,和在配置文件里面使用的指令模块可以的函数可以在命令行下运行3. 基本原理3.1 服务端与客户端认证机制服务端master配置(在以下配置中,需要注意的是,每个参数冒号后面都要带一个空格如: interface: 172.16.4.9)默认情况下,salt master在所有接口(0.0.0.0)上监听4505和4506两个端口. 如果想绑定某个具体的IP,需要对/etc/salt/master配置文件中interfac

5、e选项做如下修改:interface: 172.16.4.9注:172.16.4.9是本机服务端的IP地址,现网采用默认参数,interface注释掉;修改auto_accept为True,自动接受客户端的KEY,当然也可以这里不设置,手动接受就行,现网部署模式auto_accept为False状态,接受方式:salt-key -L查看未接受的key,salt A接受所有minion或者salt-key -a keyname (keyname即为客户端刚才设置的id标识) 客户端minion配置需要修改minion的配置文件/etc/salt/minion中的master选项,进行如下操作:m

6、aster: 172.16.4.9;注:172.16.4.9 是服务端的IP地址;id :xxx (现网该参数为注释状态,默认为该节点的主机名)id :客户端的标识,用服务端连接时,就是用此标识来连接客户端,如:salt xxx test.ping 或者 salt hostname test.ping。Master与Minion认证minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private key)和minion.pub(public key),会在/etc/salt生成一个min

7、ion_id值,如下图:Salt Minion 在启动时从配置文件中获取Master的地址, 如果为域名, 则进行解析. 解析完毕后, 会连接Master的Ret接口(客户端与服务端通信的端口4506),通过TCP协议将minion.pub和minion id发送给master,master在接收到minion的public key后,通过salt-key命令accept minion public key,认证完毕后,master会将minion 端发送来的,以ID值命名的公钥存放在 /etc/salt/pki/master/minions 目录中(无扩展名), master认证完毕后,会将

8、自身的公钥发送给 minion,并存储为 /etc/salt/pki/minion/minion_master.pub.然后master就能对minion发送指令了。Master与Minion的连接Saltstack master启动后默认监听4505和4506两个端口。4505(publish_port)为salt的消息发布系统,4506(ret_port)为salt客户端与服务端通信的端口。如果使用lsof查看4505端口,会发现所有的Minion在4505端口持续保持在ESTABLISHED,如下图:salt有很多可执行模块,比如说cmd模块,在安装minion的时候已经自带了,它们通常

9、位于你的python库中,locate salt | grep /usr/ 可以看到salt自带的所有东西,如下图:这些模块是python写成的文件,里面会有好多函数,如test.ping,当我们执行salt * test.ping的时候,master下发任务匹配到的minion上去,minion执行模块函数,并返回结果。master监听4505和4506端口,4505对应的是ZMQ的PUB system,用来发送消息,4506对应的是REP system是来接受消息的。Master与Minion建立了对应的连接, 那么当一个远程执行指令下发下去, 其数据流向是怎么一个流程呢? 以执行test

10、.ping为例:1、用户执行test.ping命令后,首先调用salt.cli.Saltcmd模块发布命令到master,salt.cli.Saltcmd模块run_job 将操作指令封装成命令详细信息后,将发送到本地master的Ret接口, Master Ret接口接收到发送的数据后, 会通过chminions.check_minions获取本次需要哪些minions执行, 并产生jid, 然后在master event接口上进行fire_event操作, 之后对数据使用master私钥(master.pem)进行签名salt.cli.Saltcmd模块进行如下操作发布命令master:1

11、)确认执行的命令是有效的命令;2)确认发送命令的详细信息,(包括类型、任务ID、时间点、执行账户、命令模块、minion);3) test.ping命令这个jobid任务准备使用指定的账户发布到master,4)再次确认发布命令的详细信息;5)确认认证要求minion ID为执行命令是写的ID;6)核实minion ID认证已经认可;7)准备调用master pub公钥与minion端公钥进行核对;8)salt.cli.Saltcmd模块run_job 将操作指令封装成命令详细信息后,将发送到本地master的Ret接口, 以下为发布命令到master的具体日志:2、Master Pull接口

12、接收到数据命令后, 会迅速的在Master Pub(消息发布系统)接口上发布命令到minion,同时监听Master端的Event bus(通信库), 过滤出本次任务jid所对应的event, 用来获取执行结果master做如下操作发送执行命令到minion:1)汇总发送命令的详细信息,(包括类型、任务ID、时间点、执行账户);2)阅读配置文件,再次确认minion id在/etc/salt/minino是否存在;3)通过ZeroMQ协议,将发送命令的详细信息发往minion;以下为发送命令到minion的具体日志:3、此时Minion通过PUB/SUB(ZeroMQ采用的是PUB/SUB模型

13、,Pub/Sub 模型定义了如何向一个内容节点发布和订阅消息), 即可接收到来自于Master Pub接口的消息. Minion接收到消息后, 会首先通过本地的master pub_key(minion_master.pub)进行解密, 已确保消息来自于Master. 解密完成后, 本地进行target匹配, 如果匹配上, 表示需要执行,表示需要执行, 发起一个本地线程调用test.py模块执行命令。反之则直接忽略。4、Minion执行完毕后, 会通过 minion_return_pub 方法将封装后的结果通过AES(密钥对)加密发送到Master的Ret(4506)接口。5、Master Ret接收到minion发送的数据后, 会进行AES(密钥对)解密, 然后将解密后的结果存储在master本地。6、salt.cli.Saltcmd模块通过轮询获取Job执行结果,将结果输出到终端。本文档的程序或内容受版权法的保护,未经中国移动通信研究院的书面许可,不得擅自泄漏、拷贝或复制本文档资料的全部或部分。第11页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号