百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>服务器> SaltStack的salt-master salt-minion启动 Master与Minion认证 sa
分享文章到:

SaltStack的salt-master salt-minion启动 Master与Minion认证 sa

发布时间:01/15 来源: 浏览: 关键词:
SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,一般可以理解为简化版的puppet和加强版的func。SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。

salt-master启动过程

环境介绍


我们使用如下环境来分析SaltStack源码:

    系统:CentOS-7
    python版本:2.7.5
    saltstack版本:2015.5.2 (Lithium)

我们使用如下方法来安装salt-master:

    rpm -Uvh http://mirrors.opencas.cn/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
    yum install salt-master

 
场景描述

本节分析salt-master启动过程,我们使用如下命令启动salt-master:

    /usr/bin/salt-master -d

总体分析

salt-master的启动过程可简单分为两块,一是解析配置文件和命令行参数,二是启动所需进程。
对于解析命令行参数,主要使用到python标准模块optparse,解析master配置文件使用yaml模块。
主要过程为:
1、导入salt.syspaths作为命令行参数默认值,导入salt.config作为master配置文件默认值;
2、ConfigDirMixIn,LogLevelMixIn,RunUserMixin等几个类使用optparse的add_option注册命令行选项;
3、调用parse_args函数,解析命令行参数,解析master配置文件;
4、调用self.master.start(),注册sigusr1和sigusr2信号,分别用来输出堆栈和profile信息;
5、接着启动所需进程,如maintenance进程,publisher进程,master event进程等。

 
详细分析

 
函数调用流程图

salt-master启动


 
核心类功能介绍


 类关系图


https://www.centos.bz/wp-content/uploads/2015/07/salt%E5%90%AF%E5%8A%A8%E8%BF%87%E7%A8%8B%E7%B1%BB%E5%9B%BE.png

MasterOptionParser类

此类主要用来解析命令行参数和yaml配置文件。继承了python标准optparse.OptionParser类,以前这六个类ConfigDirMixIn,LogLevelMixIn,RunUserMixin,DaemonMixIn,PidfileMixin,SaltfileMixIn分别用来注册配置文件路径,日志等级,守护进程,pid文件路径,saltfile路径等命令行选项。重写了optparse.OptionPaser的parse_args方法,添加对master yaml配置文件的解析。

Maintenance进程

Maintenance进程是用来做master的常规维护工作,如维护定时任务.

Publisher Server

绑定了默认的4505 zmq pub端口和publish_pull.ipc pull类型ipc,只要向publish_pull.ipc push数据,凡是subcribe 4505 publisher的client都将收到数据,具体此server什么作用还没有看.

EventPublisher Server

绑定了master_event_pub.ipc pub和master_event_pull.ipc pull,只要向master_event_pull.ipc push数据,订阅master_event_pub.ipc的client将收到消息.

ReqServer Server

启动了多个Mworker进程,每个进程连接workers.ipc REP,再启用了zmq_device,绑定tcp port 4506 ROUTER和workers.ipc DEALER,这样只要向4506 发送REQ数据,将会负载均衡到Mworker进程,Mworker进程收到请求后执行_handle_payload函数,也就是执行相应的模块.


salt-minion启动过程


功能介绍

salt-minion负责接收salt-master的消息,执行相应的指令。

 
环境介绍
 

    系统:CentOS-7
    python版本:2.7.5
    saltstack版本:2015.5.2 (Lithium)

 
场景描述


本节分析salt-minion启动过程,我们使用如下命令启动salt-minion:

    /usr/bin/salt-minion -d

 
总体分析

 salt-minion启动过程总体分析如下:
1、使用parsers.MinionOptionParser类解析命令行参数及配置文件,此类继承了MasterOptionParser类,与salt-master解析过程差不多;
2、加载必要的模块,如grains,pillar;
3、开始连接salt-master的Req Server,评估与master的验证状态,如果master没有把minion的key加入信任列表,minion则循环验证直到验证通过;
4、发送消息通过master,minion已启动;
5、订阅salt-master pub服务器。
 
详细分析
 
函数调用流程图

salt-minion启动过程 

salt-minion启动过程

 
核心类功能介绍
 
类关系图

salt-minion启动过程类图


MinionOptionParser类

MinionOptionParser类继承了MasterOptionParser,覆盖了MasterOptionParser的setup_config方法,改为由之前的master配置文件为minion配置文件。MasterOptionParser的讲解可以参考SaltStack源码解析 — salt-master启动过程

Minion类

这个应该算是比较重要的类了,包括了与master通信的所有方法。比如_do_socket_recv,负责接收master pub信息;_do_event_poll,负责处理事件;authenticate负责处理与master的验证。



Master与Minion认证过程


前言

在Minion进程启动的时候,先会连接Master的Req Server请求认证,直到认证成功才会继续。下面我们分析其认证过程。

 
总体概述

    1、完成Minion进程启动前,Minon向Master Req Server发送cmd为_auth的payload消息;
    2、Master Req Server收到Minion的消息后,使用_auth方法执行认证处理;
    3、开始对key文件作如下判断,如果key在minions_rejected目录,则拒绝连接;如果key在minions目录,验证pub key是否相等,如果不相等,加入到minions_denied;如果key不在minions_pre目录,则把key写入到minions_pre目录;如果minions_pre不存在,如果pub key验证不通过,加入到minions_denied目录。

 
minion认证请求过程活动图


minion认证请求过程活动图


minion发送认证请求函数调用图

minion发送认证请求过程

 
master处理minion验证请求函数调用图

master处理minion验证请求过程



salt ‘*’ test.ping执行过程


前言

 本文我们来学习salt ‘*’ test.ping命令实现的整个过程,涉及的组件比较多,将有助于更进一步了解SaltStack的运行机制。

 
总体概述

salt ‘*’ test.ping涉及的组件比较多,包括Master Req Server,Master Publisher,Minion,Master EventPubliser等,现在概要地介绍下整个实现流程:

    1、在salt-master机器执行salt ‘*’ test.ping命令;
    2、salt向Master Req Server发送带publish命令的消息;
    3、Master Req Server收到消息后向publish_pull.ipc push消息;
    4、Master Publisher向Minion Publish消息;
    5、Minion收到消息后启动一个新进程来执行消息中fun指定的函数;
    6、函数执行完成后,返回结果给Master Req Server;
    7、Master Req Server把结果push给Master EventPublisher;
    8、这时因为salt客户端订阅了Master EventPublisher,将收到返回结果,之后直接输出到终端。整个流程结束。

 
活动图

为了更清楚了解整个流程,下面是活动图:

salt  test.ping活动图
 
salt ‘*’ test.ping函数调用图

salt test.ping实现过程
 
Master Req Server处理salt test.ping消息函数调用图

Master Req Server接收 salt test.ping的req消息处理过程
 
Minion处理Master Pub消息函数调用图

Minion处理Master Pub消息过程
 
Master Req Server处理Minion数据返回函数调用图

Master Req Server处理 Minion数据返回过程

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有28人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板