引言
SaltStack 自 0.16.0 版本起,引入了 Minion 同时连接多个 Master 的特性,即多 Master(multi-master)配置。该模式为基础设施提供了冗余能力,确保在单个 Master 故障时,Minion 仍可接受其他 Master 的管理。本文将逐步说明如何搭建多 Master 环境,并确保各 Master 之间的配置与数据保持一致。
Master 密钥同步
在多 Master 架构中,所有 Master 必须使用相同的私钥(private key)。这些密钥在 Master 首次启动时自动生成。因此,在添加第二个 Master 时,需要从原始 Master 复制其私钥到新 Master,并覆盖新 Master 自动生成的密钥。
Master 的私钥存储于其本地的 pki_dir 目录,默认路径为 /etc/salt/pki/master/master.pem。复制该文件到新 Master 的对应位置。注意,在复制过程中,应确保新 Master 上尚无 Minion 连接,以免产生密钥不匹配的问题。
配置 Minion 连接多个 Master
Minion 需要知道所有 Master 的网络地址。编辑 Minion 配置文件(默认位于 /etc/salt/minion),找到 master 配置项,并列出所有 Master 的地址。示例配置如下:
master:
- master1.example.tld
- master2.example.tld
修改完成后,重启 Minion 服务使配置生效。此后,所有 Master 均可对 Minion 进行管理。
Master 间文件共享
SaltStack 不会自动在 Master 间同步文件。为确保一致性,需要手动同步以下关键数据。
Minion 密钥
每个 Master 都需要接受 Minion 的密钥。可以使用 salt-key 命令手动接受,或保持密钥目录同步。需要同步的目录包括:
/etc/salt/pki/master/minions/etc/salt/pki/master/minions_pre/etc/salt/pki/master/minions_rejected
注意:强烈不建议直接共享
/etc/salt/master目录。允许外部访问master.pem密钥会带来严重的安全风险。
file_roots 同步
file_roots 中存放着 Salt State 配置管理文件,需要在 Master 间保持一致。推荐使用 gitfs 后端进行同步,或将 file_roots 目录放置在共享存储上。
pillar_roots 同步
同理,pillar_roots 中的 Pillar 数据也需要保持同步,以确保所有 Master 提供一致的配置数据。
Master 配置一致性
最后,需要确保 Master 的配置选项在所有 Master 间保持一致。特别是以下设置:
external_authclient_aclpeerpeer_run
除非明确知道不需要,否则应保证这些配置在所有 Master 上完全相同。
结论
多 Master 配置为 SaltStack 环境提供了冗余性,且配置过程相对简单。只需确保 Master 密钥、Minion 密钥、State 文件及 Pillar 数据在 Master 间同步,即可实现透明的多 Master 管理,提升自动化运维的可靠性与可用性。
