尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

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

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-master和salt-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 idSalt Master 默认配置可以直接使用不需要大改。需要关注的是 Salt Minion 如何找到 Master。修改 web-node-01 上的/etc/salt/minionmaster: salt-master id: web-node-01如果salt-master这个主机名不能解析就换成 IP 地址例如master: 192.168.56.10。id是这台 Minion 在 Master 眼中的唯一标识建议使用有业务含义的主机名避免默认生成的随机主机名难以辨认。修改后重启 Minionsudo systemctl restart salt-minion sudo systemctl enable salt-minion这时 Minion 会生成自己的密钥对并主动向 Master 发起第一次握手。
返回列表