Salt Delta Proxy Minion 安装与配置实战指南用单个 minion 管理海量网络设备【免费下载链接】saltSoftware to automate the management and configuration of infrastructure and applications at scale.项目地址: https://gitcode.com/gh_mirrors/sa/salt本指南是 Salt 项目官方文档doc/ref/configuration/delta_proxy.rst的深度实践版面向系统与网络管理员讲解自 Salt 3004 版本引入的 delta proxy minion 的完整安装、配置与验证流程。读完本文你将理解 delta proxy minion 与标准 proxy minion 的架构差异掌握在主控端通过 master 配置、pillar 文件与控制代理配置文件三步完成部署的实操方法并能用test.version快速验证受管设备是否正常工作。为什么需要 delta proxy minionSalt 可以通过 proxy minion 管理那些无法运行标准 Salt minion 的网络设备典型场景包括拥有 API 但运行专有操作系统的网络设备交换机、路由器、防火墙等CPU 或内存受限的设备无法承载完整的 minion 进程出于安全原因不允许安装 minion 的设备。proxy minion 运行在 Salt master 上作为 master 与被管设备之间的中间人它接收来自 master 的命令再按需翻译并下发到设备。由于采用按需连接的模型proxy minion 一般只在真正需要下发命令时才建立到实际设备的连接从而省去了 master 与每台设备之间常驻连接的开销也让设备端只需在实际执行命令时才消耗 CPU 与内存。从 proxy minion 到 delta proxy minion标准模式下每一台被管设备都需要一个独立的 proxy minion 实例。当设备规模达到数千台时运行几千个 proxy minion 进程会占用大量内存与 CPU扩展性成为瓶颈。delta proxy minion 正是为解决这一瓶颈而设计只需运行一个 minion就能作为 master 与它所代表的众多网络设备之间的中间人。在这个架构中一台运行在 master 上的 delta proxy minion实际由控制代理承载同时运行多个代理大幅提升性能与整体可扩展性。官方文档建议如果尚未使用过标准 proxy minion应先在环境中测试并部署标准 proxy minion再考虑迁移到 delta proxy minion 环境。核心术语速览术语定义Salt master运行 Salt master 服务的中心节点向 minion 下发命令minion运行 Salt minion 服务的节点监听 master 命令、执行任务并按需返回数据proxy minion运行 proxy-minion 服务的 Salt master作为 master 与所代表设备之间的中间人每台被管设备需要一个独立实例delta proxy minion运行 delta proxy-minion 服务的 Salt master作为 master 与众多网络设备之间的中间人一个 delta proxy 服务实例即可运行多个代理control proxy运行在 Salt master 上维护设备清单并向其所代表的设备下发命令master 至少需要一个 control proxy也可以配置多个各自管理不同设备集合managed device由 proxy minion 或 control proxy 管理的设备如 Netmiko 设备仅在需要下发命令时才建立连接pillar file定义在 master 上的数据结构文件仅在 minion 需要时下发给一个或多个 minion用于向特定 minion 安全投递机密、定向数据。由于 delta proxy minion 的所有配置都在 master 端完成因此用 pillar 文件来配置 delta proxy 服务top file一种 pillar 文件用于将不同状态state映射到不同环境下的 minion术语表中managed device的概念在源码中体现为每个被管设备对应一个sub-proxy在 salt/metaproxy/deltaproxy.py 中通过subproxy_post_master_init为每个 minion ID 初始化独立的ProxyMinion对象并保存在self.deltaproxy_objs字典中。安装前置条件开始安装前请确认以下三点你的网络设备及固件受支持充当 control proxy 的 Salt master 对要管理的设备具有网络访问能力已在你环境中安装、配置并测试过标准 Salt proxy minion再引入 delta proxy minion。同时确保 Salt master 至少运行Salt 3004或更高版本delta proxy minion 自 3004 版本起可用。安装流程总览与 proxy minion 类似delta proxy minion 的所有配置都集中在 Salt master 上完成而非在被管 minion 上。整个安装过程分为四个阶段配置 master 使用 delta proxy—— 在 master 上创建定义代理设置的配置文件为每个受管设备创建 pillar 文件—— 为每台设备创建 pillar 文件并在 top file 中引用创建 control proxy 配置文件—— 创建列出其管理设备的 control proxy 文件并在 top file 中引用启动 delta proxy minion—— 启动 delta proxy-minion 服务并验证配置正确。下面依次展开。第一步配置 master 使用 delta proxy这一步骤创建的是一份通用配置文件告诉 Salt master 如何处理所有 proxy minion。在 Salt master 上进入/etc/salt目录若proxy文件不存在则创建它在源码中/etc/salt/proxy正是 proxy minion 默认的配置文件路径见 salt/config/init.py 中DEFAULT_PROXY_MINION_OPTS的conf_file定义用编辑器打开该文件写入如下配置# 使用 delta proxy metaproxy metaproxy: deltaproxy # 禁用 FQDNS grain enable_fqdns_grains: False # 启用多进程 multiprocessing: True保存文件。此时 master 已配置为使用 delta proxy接下来进入第二步。delta proxy 配置选项详解上述配置文件中的各选项说明如下字段说明metaproxy设置为deltaproxy。若设置为proxy或文件中未包含此行master 将使用标准 proxy 服务而非 delta proxy 服务enable_fqdns_grains如果你的路由器不支持通过反向 DNS 查询获取 IP 对应的完全限定域名FQDN需要将该选项设置为Falsemultiprocessing多进程指同时运行多个任务或进程的能力。delta proxy minion 可以在关闭多进程的情况下运行。若计划开启多进程还应同时将skip_connect_on_init设置为Trueskip_connect_on_init告诉 control proxy 启动时是否要连接受管设备。设为True时delta proxy minion 只在需要向受管设备下发命令时才建立连接从源码看metaproxy选项的解析逻辑位于 salt/minion.py 的_metaproxy_call它会通过salt.loader.metaproxy加载 metaproxy 模块若opts中没有metaproxy键则默认使用标准proxy然后根据opts[metaproxy]的值分派到salt.metaproxy.proxy或salt.metaproxy.deltaproxy中的对应函数post_master_init、tune_in、target_load、handle_payload等从而决定整个 minion 采用哪种代理行为。第二步为每个受管设备创建 pillar 文件每台需要由 delta proxy 管理的设备都需在 master 上拥有独立的 pillar 文件进入/srv/pillar目录为某个 minion 创建新的 pillar 文件例如my_managed_device_pillar_file_01.sls打开该文件写入该 minion 与环境所需的配置信息。以下是一个 Netmiko 设备的 pillar 示例proxy: proxytype: netmiko device_type: arista_eos host: 192.0.2.1 username: myusername password: mypassword always_alive: True可用配置选项随 proxy 类型即设备类型不同而不同。要了解具体配置选项的详细说明请查阅你所需管理设备类型的 proxy 模块文档本地参考见 doc/ref/proxy/ 目录Netmiko 对应实现见 salt/proxy/deltaproxy.py 同目录下的 proxy 模块族。保存文件用编辑器打开 top file/srv/pillar/top.sls在 top file 中增加一段指明将被管理设备的 minion ID并列出上一步创建的 pillar 文件名例如my_managed_device_minion_ID: - my_managed_device_pillar_file_01对每个需要管理的 minion 重复上述步骤。至此你已为 delta proxy minion 管理的 minion 创建了 pillar 文件并在 top file 中引用了它们。在源码层面每个受管子代理的 pillar 都会在subproxy_post_master_init中被单独编译它基于对应 minion ID 调用salt.pillar.get_async_pillar(...).compile_pillar()并将结果写入proxyopts[proxy]随后用它来初始化该设备的ProxyMinion见 salt/metaproxy/deltaproxy.py。第三步创建 control proxy 配置文件每个 control proxy 都需要在 master 上创建或编辑对应的配置文件。control proxy 管理多台设备并向其代表的下发命令master 至少需要一个 control proxy也可以有多个 control proxy 各自管理不同的设备集合。创建 control proxy 配置文件的步骤在 master 上进入/srv/pillar目录新建 proxy 配置文件命名为描述性名称如control_proxy_01_configuration.sls打开文件列出每台需管理设备的 minion ID例如proxy: proxytype: deltaproxy ids: - my_managed_device_01 - my_managed_device_02 - my_managed_device_03保存文件用编辑器打开 top file/srv/pillar/top.sls增加一段引用 delta proxy control proxy 的配置例如base: my_managed_device_minion_01: - my_managed_device_pillar_file_01 my_managed_device_minion_02: - my_managed_device_pillar_file_02 my_managed_device_minion_03: - my_managed_device_pillar_file_03 delta_proxy_control: - control_proxy_01_configuration如有多个 control proxy对每个 control proxy 重复上述步骤打开 proxy 配置文件/etc/salt/proxy添加 metaproxy 段落并将其值设为deltaproxymetaproxy: deltaproxy注意control proxy 通过proxytype: deltaproxy与ids列表将一组设备 minion ID 纳入管理。这与标准 proxy minion 每设备一实例的模式形成鲜明对比——ids列表正是 delta proxy 实现一实例管多设备的配置入口。第四步启动 delta proxy minion配置完成后需要为每个受管设备启动 proxy minion 服务并验证其工作正常。说明以下步骤演示如何启动单个 delta proxy minion 实例。由于逐台启动每个 minion 可能非常耗时多数组织会编写脚本来批量启动 delta proxy minion受管设备通常很多。建议为你的环境实现类似脚本以节省部署时间。启动单个 delta proxy minion 实例并测试配置是否正确在 Salt master 终端中运行以下命令将占位符替换为实际的 control proxy IDsudo salt-proxy --proxyidcontrol_proxy_id测试 delta proxy minion在 master 上运行test.version命令并指定目标 minion例如salt my_managed_device_minion_ID test.version该命令返回类似下面的输出local: 3004成功启动 delta proxy minion 并验证其工作正常后这些 minion 的使用方式与标准 proxy minion 完全相同。源码视角delta proxy 的工作机制为了让文章中的配置真正知其所以然这里补充仓库源码中的关键实现证据metaproxy 分派机制delta proxy 本质上是 Salt 的 metaproxy 体系中的一个实现。salt/minion.py中的_metaproxy_call根据opts[metaproxy]将post_master_init、tune_in、target_load、handle_payload、handle_decoded_payload、target、thread_return等生命周期函数分派到 salt/metaproxy/deltaproxy.py。默认值为proxy标准代理只有显式配置metaproxy: deltaproxy才会走 delta 分支。控制代理与子代理的初始化post_master_init完成主 minioncontrol proxy的模块、pillar、grains 加载后会遍历self.opts[proxy].get(ids, [])为每个设备 ID 调用subproxy_post_master_init为每台设备创建独立的ProxyMinion实例并存入deltaproxy_objs。若在 pillar 中设置parallel_startup: True则通过asyncio.gather并行初始化这些子代理。单连接接收、按目标转发handle_payload首先处理发给 control proxy 自身的载荷然后遍历self.opts[proxy].get(ids, [self.opts[id]])将载荷交给对应deltaproxy_objs中每个子代理实例的_target_load/_handle_decoded_payload处理。也就是说多个逻辑 minion 共享同一条到 master 的通道载荷按目标 ID 被分发到各自的子代理对象。多进程与线程模式在handle_decoded_payload中若opts.get(multiprocessing, True)为真则使用SignalHandlingProcess子进程执行任务否则退化为threading.Thread线程模式。这正是文档中delta proxy minion 可以在关闭多进程的情况下运行这一选项的代码落点。事件按 proxy_target 路由salt/minion.py的handle_event中若事件数据包含proxy_target且metaproxy deltaproxy会将事件路由到deltaproxy_objs[proxy_target]对应的子代理实例处理。control proxy 的 proxy 模块salt/proxy/deltaproxy.py 是proxytype: deltaproxy对应的 proxy 模块实现通过__proxyenabled__ [deltaproxy]声明自身提供init、initialized、grains、ping、shutdown等标准 proxy 模块接口其中shutdown目前是空操作源码注释提示未来可调用所有子代理的 shutdown。配置默认值salt/config/init.py 的DEFAULT_PROXY_MINION_OPTS定义了proxy_merge_pillar_in_opts默认False、proxy_merge_pillar_in_opts_strategy默认smart、proxy_always_alive默认True、proxy_keep_alive默认True、proxy_keep_alive_interval默认 1 分钟等与设备连接生命周期相关的默认值这些选项可与上述配置组合使用精细控制与受管设备的连接行为。验证与测试仓库内置了针对 delta proxy 的完整测试覆盖可作为部署后自检的参照单元测试 tests/pytests/unit/metaproxy/test_deltaproxy.py验证post_master_init与subproxy_post_master_init的初始化流程包括每个子代理按设备加载独立 grains 的打包逻辑集成测试 tests/pytests/integration/proxy/test_deltaproxy.py 与 tests/pytests/functional/metaproxy/test_deltaproxy.py覆盖真实 master/minion 场景下的 delta proxy 行为CLI 测试 tests/pytests/integration/cli/test_salt_deltaproxy.py验证saltCLI 针对 delta proxy 受管 minion 的下发与返回链路。部署完成后除了文档中的salt minion_id test.version你还可以结合salt minion_id test.ping与salt-run系列命令进一步验证设备连通性与执行链路。延伸阅读Salt proxy minions 总体概念本地文档 doc/topics/proxyminion/proxy 模块参考本地文档 doc/ref/proxy/标准 proxy 的 metaproxy 实现salt/metaproxy/proxy.pydelta proxy 核心实现salt/metaproxy/deltaproxy.py。【免费下载链接】saltSoftware to automate the management and configuration of infrastructure and applications at scale.项目地址: https://gitcode.com/gh_mirrors/sa/salt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
泉州漏水检测维修电话|室内墙面发霉返潮排查|欧米到家服务热线 📝 文章简介泉州住宅、商铺和办公场所常见的漏水问题,包括卫生间渗水、阳台积水、屋顶漏水、外墙返潮、厨房墙面发霉、窗边渗水、地下室潮湿等。欧米到家提供泉州多区域防水补漏、漏水点排查、局部修补、卫浴及水电相关维修服务。遇到雨后渗水、墙顶水印… · 2026/9/23 2:42:04
泉州防水堵漏电话|地下室车库渗水上门处理|欧米到家报修热线 📝 文章简介泉州住宅、商铺和办公场所常见的漏水问题,包括卫生间渗水、阳台积水、屋顶漏水、外墙返潮、厨房墙面发霉、窗边渗水、地下室潮湿等。欧米到家提供泉州多区域防水补漏、漏水点排查、局部修补、卫浴及水电相关维修服务。遇到雨后渗水、墙顶水印… · 2026/9/23 2:42:04
泉州屋面防水维修电话|楼顶裂缝漏水勘查|欧米到家服务电话 📝 文章简介泉州住宅、商铺和办公场所常见的漏水问题,包括卫生间渗水、阳台积水、屋顶漏水、外墙返潮、厨房墙面发霉、窗边渗水、地下室潮湿等。欧米到家提供泉州多区域防水补漏、漏水点排查、局部修补、卫浴及水电相关维修服务。遇到雨后渗水、墙顶水印… · 2026/9/23 2:42:04
dnf勇者之路源码剖析:新手避坑指南与核心逻辑拆解 dnf勇者之路源码剖析:新手避坑指南与核心逻辑拆解 报错一堆看不懂?StackTrace 像天书一样刷在屏幕上,新手直接懵圈。别慌,今天咱们不聊那些虚头巴脑的理论,直接拆解【dnf勇者之路】这类复杂状态机的核心源码逻辑。在掘金技术社区翻过不… · 2026/9/23 5:38:24
PD3.1车充SOC选型指南:IP6558升降压方案设计与调试实战 1. 从一颗芯片看车充行业的暗流:为什么PD3.1和升降压成了绕不开的坎车载充电器这个品类,表面上看起来已经非常成熟了,几十块钱就能买到一个能用的。但如果你拆过几十款车充,就会发现一个很有意思的现象:真正决定一款车… · 2026/9/23 5:38:24
数字电源本质:从模拟稳压到智能供电的系统级跃迁 1. 这不是参数表上的“升级”,而是电源控制逻辑的底层重写你拆过一块老式线性电源吗?里面密密麻麻的电阻、电容、运放芯片,还有那根调压电位器——拧一下,电压就变一点,像老式收音机调台一样,靠的是模拟信号… · 2026/9/23 5:38:24
ESP32-P4 USB高速读卡器开发:TinyUSB MSC协议栈实战与性能优化 1. 项目缘起与核心需求拆解1.1 为什么要在 ESP32-P4 上折腾 USB 读卡器第一次拿到 ESP32-P4 这块芯片的时候,我盯着它的 USB 2.0 OTG 高速接口看了很久。之前用 ESP32-S3 做 USB 相关项目,受限于全速 12Mbps 的带宽,传个大文件能等到打瞌睡。… · 2026/9/23 5:38:18
3种Word关闭批注方法对比:告别官方文档迷宫的最佳实践 3种Word关闭批注方法对比:告别官方文档迷宫的最佳实践 微软官方文档里关于“如何关闭批注”的说明,散落在十几个Help页面中,有的讲VBA,有的讲宏,有的讲UI操作,翻半小时还找不到最省事的那条路。真正能落地、能复用、能写进团队规范的最佳… · 2026/9/23 5:38:18
光纤测温原理与实战:拉曼散射分布式测温技术详解 1. 光纤测温技术:不是“把温度计换成光纤”那么简单你可能见过工厂里那些缠着细长透明线缆的高温管道,或者电力变电站里密布在电缆接头上的银灰色小盒子——它们背后往往连着一根不起眼的光纤,而实时跳动的温度数据正从几十米甚至几公里外源源… · 2026/9/23 5:38:18
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29