SaltStack源码解析 — salt-master启动过程

环境介绍

 

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

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

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

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

 

场景描述

 

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

  1. /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函数,也就是执行相应的模块.