news 2026/8/31 1:53:07

SaltStack实战:Master-Minion搭建与Nginx批量部署

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SaltStack实战:Master-Minion搭建与Nginx批量部署

一条“Salt 公会招人,50 级以上就行,等级接近的我会带”的招募启事,初看像游戏公会的门槛设计:目标明确,不要求零基础,也不要求顶尖,只要求彼此等级接近,方便互相带。放到技术圈里,这句话几乎可以直接描述一个 SaltStack 学习社群的成员标准。SaltStack 是一套事件驱动的自动化运维和配置管理工具,核心思路是把服务器应有的状态写成声明式文件,由主控端批量下发并持续校验。“50 级”在 Salt 学习里不是官方认证,而是说一个人已经能独立完成常见运维任务、能看懂状态执行结果、能在报错信息里定位问题阶段。下面会从这条启事出发,先搭一套最小可运行的 Master-Minion 环境,再完成一个批量部署 Nginx 的状态文件,把“50级”拆成可验证的技能清单,最后给出排错和带教方法。适合刚接触 SaltStack、想系统学习自动化配置,或者想在团队内组织技术成长小组的人。

1. 把“Salt 公会招人”翻译成技术成长路线

1.1 一句招募公告背后的三个关键词

“Salt”“等级”“带教”三个词就是这条路线的主线。Salt 对应 SaltStack,是继 Puppet、Chef、Ansible 之后常见的配置管理工具。它和 Ansible 的一个直观区别是,Salt 默认采用 Master/Minion 架构,Minion 启动后会主动连接 Master,后续命令由 Master 通过消息队列发布,Minion 执行后把结果返回。这种方式的特点是规模大了之后命令下发效率较高,但也引入了密钥管理、端口连通、事件队列等需要理解的部分。

“等级”可以理解为一个工程师对这套机制的熟悉程度:能不能装好环境、能不能管理密钥、能不能写状态文件、能不能排错。“带教”则对应技术社群和结对学习:不是单方面输出,而是让水平接近的人通过任务互评共同提高。如果你已经熟悉 Ansible,可以把 Salt 的 State 看成类似 Playbook 的描述文件;但 Salt 的 Master/Minion 架构意味着要先注册身份、交换密钥,对应的学习曲线并不完全一样。

1.2 “50级”并不是官方等级,而是能力画像

在 SaltStack 官方文档、认证体系里没有“50级”这个说法。它更像一种社群内部的通俗表达。可以把“50级”定义为:已经能独立管理一小批服务器,能够完成“安装软件、配置文件、启动服务、验证结果”这条完整链路。

一个低于 50 级的人可能还停留在执行单个命令,不知道 State 文件和执行模块的区别;一个超过 50 级的人可能已经掌握了 Pillar、Grains、Reactor、Salt API 中的若干项。为什么招募条件写“50级以上就行”?因为如果一个人完全零基础,直接进入一个以互相带教为主的社群,会消耗大量答疑精力;如果已经有足够经验,又不需要这种形式的带教。所以“50级”其实是在筛选参与者的基础能力下限。

在自测时,不要问“我学了多少天”,而要问“我能完成哪些任务”。比如“我能不能在 30 分钟内从一台空机器开始,搭出 Master 和 Minion 并执行test.ping”,这就是一个 50 级附近的典型任务。

1.3 学习这条路线会得到什么

接下来的路径不是把 SaltStack 所有模块讲一遍,而是先保证一条最小可运行链路:环境、密钥、连通、状态文件、部署、验证、排错。这条链路跑通后,你对 Salt 运作方式的理解会比零散看文档更完整。

然后会用一张技能清单,帮你判断自己是否达到“能带别人”的阶段。文中涉及的命令、配置和常见问题都是实际运维里高频出现的,可以直接在虚拟机或临时服务器上复现。

2. 先跑通 SaltStack 环境:最小 Master-Minion 集群

2.1 环境规划与版本确认

在学习阶段,准备两台互相能访问的服务器即可:一台作为 Salt Master,一台作为 Salt Minion。为了节省资源,也可以在一台机器上同时安装 Master 和 Minion,用不同的 id 模拟客户端。下面以两台 Ubuntu 22.04 为例,实际操作中 CentOS、Rocky Linux 也类似。

角色主机名示例建议配置主要职责
Salt Mastersalt-master2 核 4 G保存状态文件、管理 Minion 密钥、下发任务
Salt Minionweb-node-011 核 2 G执行状态任务、返回结果

生产环境还要考虑 Master 高可用、多个环境、Minion 数量规模等。学习环境只需要保证两张网卡互通,并且 4505、4506 端口可以到达。4505 是发布端口,Master 用它向 Minion 推送任务;4506 是返回端口,Minion 用它回传执行结果。如果中间有防火墙或安全组,需要放行这两个端口。

另外,不同版本 Salt 的安装仓库和默认行为会有变化,开始前先到官方安装文档确认当前稳定版本和对应发行版源的地址,避免照搬旧命令装出半新不旧的组合。

2.2 安装 Salt Master 和 Salt Minion

安装方式有很多种,这里推荐用官方 Bootstrap 脚本,适合学习环境快速安装。在 salt-master 上执行:

curl -L https://bootstrap.saltproject.io -o bootstrap_salt.sh sudo sh bootstrap_salt.sh -P -M

参数-M表示同时安装 Master,-P表示使用 pip 安装所需 Python 模块。如果网络或内网环境受限,可以先下载脚本和安装包到内网,再统一分发。不要直接在生产网络里随意执行未知脚本。

如果你想分开安装,也可以使用发行版仓库里的salt-mastersalt-minion包。比如 Debian/Ubuntu 在配置好 SaltStack 官方 apt 源后可以执行:

sudo apt update sudo apt install -y salt-master

在 web-node-01 上执行:

curl -L https://bootstrap.saltproject.io -o bootstrap_salt.sh sudo sh bootstrap_salt.sh -P

不加-M,表示只安装 Minion。安装完成后,检查版本:

salt-master --version salt-minion --version

如果两条命令都能输出版本,说明安装阶段已经完成。常见问题是 curl 没有安装,可以先执行sudo apt install -y curl。版本不一致时不要慌,确认两端处于兼容版本范围内;如果启动后出现连不上,更常见的原因是配置和网络,而不是细微版本差异。

2.3 配置 master 地址和 minion id

Salt Master 默认配置可以直接使用,不需要大改。需要关注的是 Salt Minion 如何找到 Master。修改 web-node-01 上的/etc/salt/minion

master: salt-master id: web-node-01

如果salt-master这个主机名不能解析,就换成 IP 地址,例如master: 192.168.56.10id是这台 Minion 在 Master 眼中的唯一标识,建议使用有业务含义的主机名,避免默认生成的随机主机名难以辨认。

修改后重启 Minion:

sudo systemctl restart salt-minion sudo systemctl enable salt-minion

这时 Minion 会生成自己的密钥对,并主动向 Master 发起第一次握手。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/31 1:52:58

Salt自动化运维实战:从零搭建配置管理环境

把“开箱”这件事搬到技术学习里,往往意味着拿到一套还不熟悉的工具链,从安装、配置到跑通第一个例子,把封装在文档背后的细节一层层拆开。本文要拆的,是一个以 salt.niili 为演示代号的环境初始化项目。它本身不是某个商业产品&a…

作者头像 李华
网站建设 2026/8/31 1:52:49

磁悬浮列车落地难在哪?第一代项目的系统工程挑战

海特洛市第一代磁悬浮列车从车辆段驶出的那一刻,站台上有不少人举着手机在拍。我站在控制中心的屏幕前,看到的却是另一组数据:悬浮间隙、轨道状态、牵引电流、停车精度。它们在每一个运行周期里跳动,像这列车的脉搏。很多人以为磁…

作者头像 李华
网站建设 2026/8/31 1:51:41

用FFmpeg制作ニコカラ:从人声分离到MKV双音轨封装完整指南

在 Niconico 等弹幕视频平台上,ニコカラ一直是为翻唱、练歌、填词翻配而制作的视频类型。标题 【ニコカラ】Salt, Pepper, Birds, and the Thought Police(on/off vocal) 里有几个关键信息: Salt, Pepper, Birds, and the Thou…

作者头像 李华
网站建设 2026/8/31 1:51:32

nRF52实战:为BLE心率示例添加LED指示

如果你用 nRF52 跑过 SDK 里的 BLE_HeartRate(心率)示例,应该能感觉到它的"完整"其实带着一点空:手机连上、心率数字跳起来,但板子上的 LED 基本只在广播和连接时按固定逻辑亮一下,和心率数据本身…

作者头像 李华
网站建设 2026/8/31 1:50:20

技术教程写作:明确主题与技术栈的必备要素

如果您正在寻找的是关于宠物养护、三只小动物的日常记录,很遗憾,这类内容不适合作为技术教程输出。当前输入的项目标题“可爱的三小只~”没有提供任何技术栈、项目背景或可操作的内容,我无法在没有可靠材料的情况下虚构技术细节来撰写教程。为…

作者头像 李华
网站建设 2026/8/31 1:50:06

STM32H7双核调试卡死HAL_Delay?从SysTick到RCC的根因排查

“又卡住了,而且卡在 HAL_Delay() 里。”这句话对用 STM32H7 的朋友来说应该不陌生。尤其是调试 H745XI 这种双核芯片时,明明代码逻辑看起来没问题,全速运行却怎么也跑不过 HAL_Init(),走到 HAL_Delay(1) 就再也出不来。排除电源和…

作者头像 李华