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

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进程等。

 
详细分析

 
函数调用流程图

 
核心类功能介绍

 类关系图

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启动过程

 
核心类功能介绍
 
类关系图

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发送认证请求函数调用图

 
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函数调用图


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


 
Minion处理Master Pub消息函数调用图


 
Master Req Server处理Minion数据返回函数调用图

时间: 2024-10-03 02:04:14

SaltStack的salt-master salt-minion启动 Master与Minion认证 salt ‘*’ test.ping执行过程的相关文章

spark源码分析Master与Worker启动流程篇

spark通信流程 概述 spark作为一套高效的分布式运算框架,但是想要更深入的学习它,就要通过分析spark的源码,不但可以更好的帮助理解spark的工作过程,还可以提高对集群的排错能力,本文主要关注的是Spark的Master的启动流程与Worker启动流程. Master启动 我们启动一个Master是通过Shell命令启动了一个脚本start-master.sh开始的,这个脚本的启动流程如下 start-master.sh -> spark-daemon.sh start org.ap

IFAA开放能力,正式启动中小企业互联网身份认证加速器计划

互联网诞生之后,我们很多事情都在一个虚拟的环境中进行.随之人的认证和识别,也变成了一个刚性的需求.于是,我们选择通过智能设备交互操作.数据分析.口令密码等方式来完成的身份识别.然而,随着移动互联网和智能终端的飞速发展,现有的身份认证方式已难以满足行业发展的要求,我们迫切需要更加安全.可靠.便利的身份认证解决方案. 7月12日,在IFAA(互联网金融身份认证联盟)2017大会上,与会嘉宾就如何通过技术的力量,共同助力网络身份认证的标准建设等身份认证相关的话题进行了深入的交流.此外,为了更好服务中小

江苏启动网站实名安全认证

本报讯 近日,江苏省互联网协会正式启动网站实名认证和网站安全认证工作,并对会员单位的申请进行了现场受理,35家省内互联网企事业单位成为首批签约实施单位. 网站实名认证和网站安全认证是江苏省互联网协会面向会员单位新推出的认证服务,这两项服务基于认证技术平台,通过对网站主办者身份.网站备案信息.企业注册信息等资料的审核,认证网站主办者的真实信息,并监督和发现网站挂马.网页篡改.网页仿冒等网络安全隐患.取得江苏省增值电信业务经营许可证或非经营性网站备案的企业可以申请获得认证.认证服务的正式启动,将帮助

百度启动“互联网营销专家”认证

中介交易 SEO诊断 淘宝客 云主机 技术大厅 腾讯科技讯1月26日消息,"百度认证营销专家 公开答辩会"在北京举办,7位候选者脱颖而出,通过由百度.产业界.学术界所组成联合评审团的严格评定,获得"百度认证营销专家"称号."百度认证营销专家"是"百度认证"体系中的最高等级认证.未来将获得来自百度等多方资源的大力支持. "百度认证"是百度公司发起的中国互联网营销职业资格认证,由百度营销研究院创立并运营.&qu

百度启动“互联网营销专家”认证 七位选手脱颖而出

[http://www.aliyun.com/zixun/aggregation/6149.html">TechWeb报道]1月25日消息,昨天"百度认证营销专家 公开答辩会"在北京举办,7位候选者脱颖而出,通过了由百度.产业界.学术界所组成联合评审团的严格评定,获得"百度认证营销专家"称号. "百度认证营销专家"是"百度认证"体系中的最高等级认证,用来肯定对中国互联网营销领域做出突出贡献.且具备先进营销理念及

MongoDB 主从复制实例讲解_MongoDB

主从复制可以用来做数据库的备份,故障恢复,读写分离. 本实验使用Mongodb 3.2版本,我们先查看一下mongod的帮助 [root@localhost mongodb]# mongod --help .....省略 Master/slave options (old; use replica sets instead): --master master mode --slave slave mode --source arg when slave: specify master as <s

salt的安装

简介 Salt is: a configuration management system, capable of maintaining remote nodes in defined states (for example, ensuring that specific packages are installed and specific services are running) a distributed remote execution system used to execute

优云实践:巧用Salt,实现CMDB配置自动发现

随着互联网+新形势的发展,越来越多的企业步入双态(稳敏双态)IT时代,信息化环境越来越复杂,既有IOE三层架构,也有VCE.Openstack等云虚拟化架构和互联网化的分布式大数据架构.所以,企业急需建立一套合适的配置管理库(CMDB),像人类"大脑"一样统一存储从基础架构到业务应用各层面的配置信息,以便协调"身体"(运维系统)各部分完成复杂的运维工作. CMDB如此重要,但又是运维中最难建设好的部分,就连很多IT运维界大佬都感叹CMDB是运维人的最痛点,他们总结C

linux中使用salt 批量安装apache服务

top.sls 是配置管理的入口文件,一切都是从这里开始,在master 主机上,默认存放在/srv/salt/目录. top.sls 默认从 base 标签开始解析执行,下一级是操作的目标,可以通过正则,grain模块,或分组名,来进行匹配,再下一级是要执行的state文件,不包换扩展名. 一.创建 /srv/salt/top.sls [root@localhost salt]# cat top.sls base:   '*':     - apache 二.定义pillar文件 [root@