【saltstack ansible】SaltStack的salt-master salt-minion启动 Master与Minion认证 salt ‘*’ test.ping执行过程

更新时间:2019-12-28    来源:python    手机版     字体:

【www.bbyears.com--python】

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数据返回过程

本文来源:http://www.bbyears.com/jiaocheng/84013.html

热门标签

更多>>

本类排行