saltstack系统架构及其基本原理.doc

上传人:一*** 文档编号:2757418 上传时间:2020-05-04 格式:DOC 页数:11 大小:279.51KB
返回 下载 相关 举报
saltstack系统架构及其基本原理.doc_第1页
第1页 / 共11页
saltstack系统架构及其基本原理.doc_第2页
第2页 / 共11页
点击查看更多>>
资源描述

《saltstack系统架构及其基本原理.doc》由会员分享,可在线阅读,更多相关《saltstack系统架构及其基本原理.doc(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、/【saltstack系统架构及原理】V1.0Error! Reference source not found.Error! Reference source not found.Error! 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批

2、量化部署与配置管理196.Saltstack管理流程与业务问题管理201. 系统介绍SaltStack项目始于2011年2月,创始人是Thomas S Hatch,团队成员:Thomas S Hatch、 Jeff Schroeder、 Seth house,是一个相对较新的项目,是用Python写成的开源异构平台基础设置轻量级管理工具,遵守Apache2协议,有一个强大的远程执行命令引擎和大型分布式的配置管理系统,容易搭建,能够快速管理成千上万的服务器,不管是本地网络,还是跨数据中心, 保持秒级响应时间;架构采用C/S模式,在一个后台程序中集成必要功能。默认不需要复杂的配置就可以工作,同时可

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

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

5、. 如果想绑定某个具体的IP,需要对/etc/salt/master配置文件中interface选项做如下修改: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配置需要修

6、改minion的配置文件/etc/salt/minion中的master选项,进行如下操作:master: 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

7、 key)和minion.pub(public key),会在/etc/salt生成一个minion_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/sa

8、lt/pki/master/minions 目录中(无扩展名), master认证完毕后,会将自身的公钥发送给 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,如

9、下图:salt有很多可执行模块,比如说cmd模块,在安装minion的时候已经自带了,它们通常位于你的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建立

10、了对应的连接, 那么当一个远程执行指令下发下去, 其数据流向是怎么一个流程呢? 以执行test.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私钥(mast

11、er.pem)进行签名salt.cli.Saltcmd模块进行如下操作发布命令master:1)确认执行的命令是有效的命令;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 将操作指令封装成命令详细信息后,将发送到本地ma

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

13、on的具体日志:3、此时Minion通过PUB/SUB(ZeroMQ采用的是PUB/SUB模型,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执行结果,将结果输出到终端。

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

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁