SaltStack自动化运维工具详解及部署

56次阅读
没有评论

SaltStack详解及部署

文档适用场景:适用于Linux服务器集群自动化运维、批量配置管理、远程命令执行、服务自动化部署,聚焦Master-Minions主从架构完整部署流程,适配CentOS 7/8/9、Ubuntu 20.04/22.04系统,全网段统一采用10.0.0.0/24

一、SaltStack核心基础认知

1.1 工具定义与核心定位

SaltStack(简称Salt)是基于Python开发、采用ZeroMQ高性能异步通信协议的开源企业级自动化运维平台,核心解决大规模服务器集群的批量管控、配置一致性维护、自动化部署与事件驱动运维问题。相较于同类工具,它兼顾高性能并发易用性,既支持Master-Minions主从架构(适合大规模固定集群),也支持Salt SSH无代理模式(适合临时管控、无法安装客户端的场景),完美对标Ansible,且在大规模节点并发执行场景下性能优势显著,是中大型企业集群运维的核心工具之一。

1.2 核心架构(Master-Minions主从)

  • Salt Master(主控节点):集群管控核心,负责指令下发、Minion密钥认证管理、配置文件存储、执行结果收集与汇总,默认监听4505/tcp(消息发布端口)和4506/tcp(数据请求回复端口),是整个集群的控制中枢。
  • Salt Minion(被控节点):部署在所有需要被管理的服务器上,主动发起对Master的连接请求,无需额外开放入站端口,接收Master下发的指令并本地执行,执行完成后同步返回结果,全程被动响应、主动上报。
  • 密钥认证机制:Salt集群的安全核心,Minion首次启动会自动生成密钥并向Master发送认证请求,Master手动授权通过后,双方才可建立加密通信链路,未授权节点无法接入集群,杜绝非法访问。

1.3 核心优势

  • 高性能并发:基于ZeroMQ长连接通信,批量执行命令速度远超传统SSH工具,支持数千台节点同时管控,无明显性能瓶颈。
  • 双模式灵活适配:主从架构保障大规模集群性能,Salt SSH无代理模式适配特殊场景,无需安装客户端即可临时管控。
  • 语法低门槛:配置文件采用YAML+Jinja2语法,书写格式贴近Ansible Playbook,运维人员无需深厚编程基础即可快速上手。
  • 功能全覆盖:涵盖远程命令执行、软件批量安装、配置文件推送、服务状态管理、系统信息采集、API二次开发等全场景运维需求。
  • 跨平台兼容:完美支持Linux全发行版、Windows Server、主流网络设备,适配多云、混合云集群统一管控。

1.4 核心组件与常用命令速览

  • salt-master:主控端服务程序,负责集群管控与任务调度
  • salt-minion:被控端客户端程序,负责本地指令执行
  • salt:Master端核心命令,用于下发远程执行指令
  • salt-key:Minion密钥认证专用命令,管理节点接入权限
  • salt-call:Minion端本地调试命令,用于本地测试模块执行
  • salt-run:Master端全局任务执行命令,处理集群级调度任务

二、部署前环境准备(10.0.0.0/24网段)

2.1 服务器规划(最小化生产/测试集群)

角色 主机名 IP地址 操作系统 核心服务 配置建议
Salt Master(主控) salt-master 10.0.0.10 CentOS 7/8/9、Ubuntu 20.04+ salt-master 2核4G及以上,稳定运行
Salt Minion-01(被控) salt-minion-01 10.0.0.11 CentOS 7/8/9、Ubuntu 20.04+ salt-minion 1核2G及以上
Salt Minion-02(被控) salt-minion-02 10.0.0.12 CentOS 7/8/9、Ubuntu 20.04+ salt-minion 1核2G及以上

2.2 基础环境配置(所有节点必须执行)

部署前统一优化基础环境,避免因防火墙、SELinux、时间不同步等问题导致集群通信失败,所有操作在root用户下执行:

2.2.1 防火墙配置(生产优先放行端口,测试可直接关闭)

  • CentOS/RHEL系统操作: 测试环境:临时关闭并禁用防火墙 systemctl stop firewalld systemctl disable firewalld

生产环境:仅放行Salt Master核心端口,禁止直接关闭防火墙

firewall-cmd –permanent –add-port=4505/tcp firewall-cmd –permanent –add-port=4506/tcp firewall-cmd –reload

验证端口放行状态

firewall-cmd –list-ports

  • Ubuntu/Debian系统操作: 测试环境:关闭UFW防火墙 ufw disable

生产环境:放行核心端口

ufw allow 4505/tcp ufw allow 4506/tcp ufw reload

2.2.2 关闭SELinux(CentOS/RHEL专属)

# 临时关闭SELinux
setenforce 0

# 永久关闭SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 验证SELinux状态,输出Disabled即为正常
getenforce

2.2.3 主机名与Hosts解析配置

# Master节点执行,设置专属主机名
hostnamectl set-hostname salt-master
​
# Minion-01节点执行
hostnamectl set-hostname salt-minion-01
​
# Minion-02节点执行
hostnamectl set-hostname salt-minion-02
​
# 所有节点执行,添加Hosts解析,避免DNS解析故障或等待超时
cat >> /etc/hosts <<EOF
127.0.0.1    localhost localhost.localdomain
10.0.0.10    salt-master
10.0.0.11    salt-minion-01
#10.0.0.12   salt-minion-02
EOF

2.2.4 同步系统时间

时间不同步会直接导致Minion密钥认证失败,必须同步集群时间:

# CentOS/RHEL系统
yum install chrony -y
systemctl enable --now chronyd
​
# Ubuntu/Debian系统
apt install chrony -y
systemctl enable --now chronyd
​
# 验证时间同步状态
timedatectl status

三、部署流程

3.1 Master节点部署(主控端,10.0.0.10)

3.1.1 安装SaltStack

# 安装依赖
yum install -y python36 python36-setuptools python36-pip libsodium zeromq

[root@salt-master saltstack]#tree .
.
├── salt-3006.3-0.x86_64.rpm
├── salt-master-3006.3-0.x86_64.rpm
└── salt-minion-3006.3-0.x86_64.rpm
​
0 directories, 3 files

# 下载离线包
​
Master 节点(10.0.0.10)
# 一次性安装三个包,yum 自动处理依赖
yum localinstall -y *.rpm
​
Minion 节点(10.0.0.11/12)
# 只需要安装核心包 + minion 包
yum localinstall -y salt-3006.3-0.x86_64.rpm salt-minion-3006.3-0.x86_64.rpm
​
#本地安装(不依赖任何 YUM 源)
#rpm -ivh salt-*.rpm --force --nodeps

3.1.2 优化Master核心配置

备份默认配置文件,替换为生产稳定版配置,屏蔽冗余参数,聚焦核心通信与目录配置,适配10.0.0.0/24网段:

# 备份默认配置,防止配置失误无法回滚
cp /etc/salt/master /etc/salt/master.bak
# 写入核心配置,所有参数适配生产环境
cat > /etc/salt/master << EOF
# 监听所有网卡,适配10.0.0.0/24网段内网通信
interface: 0.0.0.0
# 消息发布端口,固定4505
publish_port: 4505
# 数据回复端口,固定4506
ret_port: 4506
# 以root用户运行服务,保障权限充足
user: root
# 工作线程数,根据服务器配置调整,默认10满足中小集群需求
worker_threads: 10
# SLS配置文件根目录,存放自动化部署、配置管理脚本
file_roots:
  base:
    - /srv/salt
# 敏感数据存储目录,存放密码、密钥等隐私配置
pillar_roots:
  base:
    - /srv/pillar
# 生产环境禁用自动授权,必须手动认证Minion密钥,保障安全
auto_accept: False
EOF

3.1.3 创建工作目录

# 创建配置文件与敏感数据目录
mkdir -p /srv/salt /srv/pillar
# 配置目录权限,仅root可读写,保障安全
chown -R root:root /srv/salt /srv/pillar
chmod 755 /srv/salt /srv/pillar

3.1.4 启动服务并设置开机自启

# 启动salt-master服务
systemctl start salt-master
# 设置开机自启,服务器重启后自动恢复集群
systemctl enable salt-master
# 查看服务状态,确保显示active (running)
systemctl status salt-master
# 验证端口监听状态,确认4505、4506端口正常监听
netstat -lntp | grep salt
[root@salt-master saltstack]#ss -tnulp|grep salt
tcp   LISTEN   0    128     *:4505     *:*      users:(("/opt/saltstack/",pid=17231,fd=44))
tcp   LISTEN   0    128     *:4506     *:*      users:(("/opt/saltstack/",pid=17237,fd=73))

3.2 Minion节点部署(被控端,10.0.0.11/12)

所有Minion节点部署流程完全一致,仅需修改本机唯一ID,依次在10.0.0.11、10.0.0.12节点执行以下操作:

3.2.1 安装salt-minion服务

3.2.2 配置Minion指向Master(核心步骤)

配置Minion连接的Master地址为10.0.0.10,设置本机唯一ID(不可重复,建议和主机名一致):

# 备份默认配置
cp /etc/salt/minion /etc/salt/minion.bak
# 写入核心配置,以Minion-01为例,Minion-02需修改id为salt-minion-02
cat > /etc/salt/minion << EOF
# 指定Master节点IP,固定为10.0.0.10
master: 10.0.0.10
# 本机唯一ID,不可重复,Minion-01设为salt-minion-01,Minion-02设为salt-minion-02
id: salt-minion-01
# 开启密钥自动生成
autosign_grains_dir: /etc/salt/minion.d
EOF

3.2.3 启动Minion服务

# 启动salt-minion服务
systemctl start salt-minion
# 设置开机自启
systemctl enable salt-minion
# 查看服务状态,确认正常运行
systemctl status salt-minion

Minion启动后,会自动向Master节点(10.0.0.10)发送密钥认证请求,等待Master授权。

3.3 Minion密钥认证(Master节点执行,核心安全步骤)

Minion接入集群必须完成密钥授权,未授权节点无法接收指令,全程在Master节点操作:

3.3.1 查看待授权密钥

# 列出所有密钥状态,分为已授权、待授权、拒绝、过期四类
[root@salt-master saltstack]#salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
salt-minion-01
Rejected Keys:

3.3.2 授权Minion密钥

授权单个指定节点(生产推荐,精准管控):

授权salt-minion-01

[root@salt-master saltstack]#salt-key -a salt-minion-01 -y
The following keys are going to be accepted:
Unaccepted Keys:
salt-minion-01
Key for minion salt-minion-01 accepted.

[root@salt-master saltstack]#salt-key -L
Accepted Keys:
salt-minion-01
Denied Keys:
Unaccepted Keys:
Rejected Keys:

授权salt-minion-02

salt-key -a salt-minion-02 -y

批量授权所有待授权节点(测试环境快速部署):

salt-key -A -y

3.3.3 验证授权结果

salt-key -L

确认Minion ID已移动至Accepted Keys列表,即为授权成功。

3.4 集群连通性测试

授权完成后,在Master节点执行连通性测试,验证集群通信是否正常:

# 测试所有已授权节点连通性,返回True即为正常
salt '*' test.ping

# 测试单个指定节点
salt 'salt-minion-01' test.ping

# 批量测试通配符匹配的节点
salt 'salt-minion-*' test.ping

所有节点返回True,代表SaltStack集群部署完成,可正常执行运维任务。

[root@salt-master saltstack]#salt '*' test.ping
salt-minion-01:
    True

四、基础运维实战与常用命令

4.1 远程批量执行命令

# 查看所有节点系统版本
salt '*' cmd.run 'cat /etc/redhat-release'

[root@salt-master saltstack]#salt '*' cmd.run 'cat /etc/redhat-release'
salt-minion-01:
    CentOS Linux release 7.9.2009 (Core)

# 查看所有节点内存使用情况
salt '*' cmd.run 'free -h'

# 查看所有节点磁盘使用情况
salt '*' cmd.run 'df -h'

# 批量安装Nginx
salt '*' pkg.install nginx

# 批量启动并设置Nginx开机自启
salt '*' service.running nginx enable=True

4.2 配置管理(SLS文件实战)

SaltStack通过SLS文件实现配置管理,类似Ansible Playbook,实现自动化部署与配置一致性维护,以批量部署Nginx为例:

# 在Master节点创建Nginx部署SLS文件
vim /srv/salt/nginx_install.sls

写入以下内容:

# 安装Nginx软件包
nginx-install:
  pkg.installed:
    - name: nginx

# 启动Nginx服务并设置开机自启
nginx-service:
  service.running:
    - name: nginx
    - enable: True
    - reload: True

执行SLS文件,批量部署Nginx:

salt '*' state.sls nginx_install

4.3 密钥管理常用命令

  • salt-key -d 节点ID:删除指定已授权节点
  • salt-key -D:删除所有已授权节点
  • salt-key -r 节点ID:拒绝指定待授权节点

五、生产环境部署注意事项

核心注意事项

  1. 生产环境严禁开启auto_accept: True,必须手动授权Minion密钥,杜绝非法节点接入。
  2. Master节点建议部署高可用架构,避免单点故障,核心数据定期备份。
  3. 防火墙仅放行4505、4506端口,禁止直接关闭防火墙,保障服务器安全。
  4. Minion ID必须唯一,严禁重复,否则会导致集群通信混乱。
  5. 集群所有节点必须同步系统时间,防止密钥认证失败。
  6. Master与Minion版本必须保持一致,避免因版本差异导致功能异常。

六、常见故障排查

  • Minion无法认证:检查Master IP配置是否为10.0.0.10、防火墙是否放行端口、时间是否同步。
  • 执行命令无响应:确认Minion服务正常运行、密钥已授权、网络互通。
  • 端口无法监听:检查SELinux是否关闭、配置文件参数是否有误、服务是否正常启动。
正文完
 0
评论(没有评论)