010-集中化管理平台 SaltStack 详解

集中化管理平台 SaltStack 详解

随着IT基础设施的规模不断扩大,传统的手动配置管理方式已经难以满足高效、一致的系统管理需求。SaltStack作为一款功能强大的配置管理和远程执行工具,提供了高效的大规模系统管理解决方案。本章将详细介绍SaltStack的架构、安装配置和核心功能,帮助读者掌握这一强大的集中化管理平台。

10.1 SaltStack 的安装

SaltStack是一个基于Python开发的开源项目,它支持多种操作系统和部署方式。在安装SaltStack之前,我们首先需要了解其基本架构和组件。

10.1.1 业务环境说明

SaltStack采用主从架构(Master-Minion),其中包含以下主要组件:

  • Salt Master:中央控制服务器,负责发送命令、管理配置数据和接收minion的状态报告
  • Salt Minion:运行在被管理服务器上的客户端程序,负责执行master下发的命令和应用配置
  • Salt SSH:无客户端模式,通过SSH协议与目标服务器通信
  • Salt API:提供RESTful API接口,便于第三方系统集成
  • Salt Cloud:用于云资源的配置和管理
  • Salt Syndic:用于构建分层架构,在大规模环境中提高管理效率

SaltStack支持多种通信机制:

  • ZeroMQ(默认):基于发布-订阅模式的高性能消息队列
  • TCP:直接通过TCP套接字通信
  • SSH:无需安装Minion,通过SSH协议执行命令

SaltStack的优势在于其高效的并行执行能力和灵活的配置管理系统,非常适合大规模的服务器环境管理。

10.1.2 安装 EPEL

对于RHEL/CentOS系统,SaltStack软件包位于EPEL(Extra Packages for Enterprise Linux)仓库中,因此需要先安装EPEL仓库。

CentOS/RHEL 7

bash

sudo yum install epel-release
sudo yum update

CentOS/RHEL 8

bash

sudo dnf install epel-release
sudo dnf update

10.1.3 安装 SaltStack

SaltStack可以通过多种方式安装,包括系统包管理器、SaltStack官方仓库、pip或从源码安装。以下是针对不同操作系统的安装方法。

使用SaltStack官方仓库(推荐)

RHEL/CentOS 7

bash

# 添加SaltStack仓库
sudo yum install https://repo.saltproject.io/py3/redhat/7/x86_64/latest/salt-py3-repo-latest.el7.noarch.rpm

# 清除缓存并安装salt-master和salt-minion
sudo yum clean expire-cache
sudo yum install salt-master salt-minion

RHEL/CentOS 8

bash

# 添加SaltStack仓库
sudo dnf install https://repo.saltproject.io/py3/redhat/8/x86_64/latest/salt-py3-repo-latest.el8.noarch.rpm

# 安装salt-master和salt-minion
sudo dnf install salt-master salt-minion

Ubuntu

bash

# 添加SaltStack PPA仓库
sudo curl -fsSL -o /usr/share/keyrings/salt-archive-keyring.gpg https://repo.saltproject.io/py3/ubuntu/20.04/amd64/latest/salt-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/salt-archive-keyring.gpg] https://repo.saltproject.io/py3/ubuntu/20.04/amd64/latest focal main" | sudo tee /etc/apt/sources.list.d/salt.list

# 更新并安装salt-master和salt-minion
sudo apt-get update
sudo apt-get install salt-master salt-minion
使用系统包管理器

RHEL/CentOS(使用EPEL)

bash

# 安装salt-master
sudo yum install salt-master

# 安装salt-minion
sudo yum install salt-minion

Ubuntu/Debian

bash

# 安装salt-master
sudo apt-get install salt-master

# 安装salt-minion
sudo apt-get install salt-minion
使用pip安装

如果需要最新版本或者系统包管理器中没有SaltStack,可以使用pip安装:

bash

# 安装salt-master
pip install salt

# 或指定版本
pip install salt==3004.1

10.1.4 SaltStack 防火墙配置

SaltStack需要开放特定端口以便于Master和Minion之间的通信。

Master端需要开放的端口

  • 4505/tcp - 用于发布命令
  • 4506/tcp - 用于minion返回执行结果

CentOS/RHEL 7/8(使用firewalld)

bash

# 开放SaltStack所需端口
sudo firewall-cmd --permanent --add-port=4505-4506/tcp
sudo firewall-cmd --reload

Ubuntu/Debian(使用ufw)

bash

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

10.1.5 更新 SaltStack 配置及安装校验

安装完成后,我们需要配置Master和Minion,并启动服务进行校验。

Master配置

Master的主要配置文件是/etc/salt/master,以下是一些常用配置:

yaml

# Master接口配置
interface: 0.0.0.0

# Master文件服务器配置
file_roots:
  base:
    - /srv/salt

# Pillar配置
pillar_roots:
  base:
    - /srv/pillar

# 日志级别
log_level: info
log_file: /var/log/salt/master

# 启用Salt API(可选)
rest_cherrypy:
  port: 8000
  ssl_crt: /etc/pki/tls/certs/localhost.crt
  ssl_key: /etc/pki/tls/certs/localhost.key
Minion配置

Minion的主要配置文件是/etc/salt/minion

yaml

# Master的地址
master: salt.example.com  # 替换为你的Salt Master地址

# Minion ID,默认使用主机名
id: minion1.example.com

# 日志配置
log_level: info
log_file: /var/log/salt/minion
启动服务

配置完成后,启动Master和Minion服务:

RHEL/CentOS 7(使用systemd)

bash

# 启动并设置Master服务开机自启
sudo systemctl enable salt-master
sudo systemctl start salt-master

# 启动并设置Minion服务开机自启
sudo systemctl enable salt-minion
sudo systemctl start salt-minion

Ubuntu/Debian

bash

# 启动并设置Master服务开机自启
sudo systemctl enable salt-master
sudo systemctl start salt-master

# 启动并设置Minion服务开机自启
sudo systemctl enable salt-minion
sudo systemctl start salt-minion
验证安装

在Master上接受Minion的密钥:

bash

# 列出所有待接受的密钥
sudo salt-key -L

# 接受特定的Minion密钥
sudo salt-key -a minion1.example.com

# 接受所有待处理的密钥
sudo salt-key -A

测试Minion连接:

bash

# 测试特定Minion
sudo salt 'minion1.example.com' test.ping

# 测试所有Minion
sudo salt '*' test.ping

如果Minion响应"True",则表明安装和配置成功。

10.2 利用 SaltStack 远程执行命令

SaltStack的一个重要功能是能够在多个服务器上并行执行命令。通过Salt的执行模块(Execution Modules),可以在目标Minion上运行各种系统操作。

基本命令执行

Salt命令的基本结构为:

salt [options] '<target>' <function> [arguments]

其中:

  • target:目标Minion的匹配模式
  • function:要执行的函数(模块.函数)
  • arguments:函数的参数
目标选择(Targeting)

SaltStack提供多种方式来选择目标Minion:

1. 使用Minion ID

bash

# 匹配单个Minion
salt 'minion1.example.com' test.ping

# 使用通配符匹配多个Minion
salt 'web*' test.ping

# 匹配多个Minion(列表)
salt -L 'minion1,minion2,minion3' test.ping

2. 使用Grains(系统信息)

bash

# 匹配所有CentOS系统
salt -G 'os:CentOS' test.ping

# 匹配特定内核版本
salt -G 'kernel:4.18*' test.ping

3. 使用Pillar数据

bash

# 匹配具有特定Pillar值的Minion
salt -I 'role:webserver' test.ping

4. 使用复合匹配

bash

# 组合多种匹配条件
salt -C 'G@os:CentOS and web* or E@db.*' test.ping

5. 正则表达式匹配

bash

# 使用正则表达式匹配
salt -E 'minion[0-9]' test.ping

执行模块示例

SaltStack包含大量内置模块,覆盖了系统管理的各个方面:

1. 系统命令执行

bash

# 执行shell命令
salt '*' cmd.run 'ls -la /tmp'

# 带环境变量的命令
salt '*' cmd.run 'echo $PATH' env='{"PATH": "/usr/local/bin:/usr/bin"}'

# 执行脚本
salt '*' cmd.script salt://scripts/setup.sh

2. 包管理

bash

# 安装软件包
salt '*' pkg.install nginx

# 更新所有软件包
salt '*' pkg.upgrade

# 检查软件包是否已安装
salt '*' pkg.installed nginx

3. 服务管理

bash

# 启动服务
salt '*' service.start nginx

# 停止服务
salt '*' service.stop mysql

# 重启服务
salt '*' service.restart httpd

# 检查服务状态
salt '*' service.status firewalld

4. 文件管理

bash

# 创建目录
salt '*' file.mkdir /opt/application

# 写入文件内容
salt '*' file.write /etc/motd 'Welcome to the server'

# 获取文件内容
salt '*' file.read /etc/hostname

# 管理文件权限
salt '*' file.chown /opt/data www-data www-data

5. 用户管理

bash

# 创建用户
salt '*' user.add username

# 更改密码
salt '*' shadow.set_password username 'password'

# 检查用户是否存在
salt '*' user.info username

6. 网络管理

bash

# 获取IP地址
salt '*' network.ip_addrs

# 获取接口信息
salt '*' network.interfaces

# Ping测试
salt '*' network.ping google.com

高级执行选项

SaltStack提供多种高级选项来控制命令执行:

1. 异步执行

bash

# 异步执行命令
salt --async '*' cmd.run 'long_running_command'

# 查看作业状态
salt-run jobs.active

# 获取作业结果
salt-run jobs.lookup_jid 20210203153045437194

2. 批处理执行

bash

# 限制并发执行的Minion数量
salt --batch-size 10 '*' pkg.upgrade

# 以百分比形式指定批处理大小
salt --batch-size 20% '*' service.restart httpd

3. 超时控制

bash

# 设置命令超时时间
salt --timeout=60 '*' cmd.run 'long_running_command'

4. 输出格式控制

bash

# 使用不同的输出格式
salt --output=json '*' test.ping
salt --output=yaml '*' test.ping
salt --output=pprint '*' grains.items

5. 命令返回详细程度

bash

# 增加详细级别
salt -v '*' test.ping

# 调试级别
salt -vvv '*' test.ping

6. 返回数据过滤

bash

# 使用特定字段进行过滤
salt '*' pkg.list_pkgs --out=json --static | jq '.["minion1.example.com"]["nginx"]'

实用执行示例

以下是一些实际场景中的使用示例:

1. 系统信息收集

bash

# 收集所有Minion的系统信息
salt '*' grains.items

# 获取特定Grain信息
salt '*' grains.get os

# 获取内存使用情况
salt '*' status.meminfo

# 获取磁盘使用情况
salt '*' disk.usage

2. 安全更新和补丁管理

bash

# 检查可用更新
salt '*' pkg.list_upgrades

# 安装安全更新
salt '*' pkg.upgrade security=True

# 更新后重启服务器(如需要)
salt '*' system.reboot

3. 配置文件管理

bash

# 部署配置文件
salt '*' cp.get_file salt://configs/nginx.conf /etc/nginx/nginx.conf

# 修改配置文件中的特定行
salt '*' file.replace /etc/ssh/sshd_config 'PermitRootLogin yes' 'PermitRootLogin no'

# 在配置文件中添加行
salt '*' file.append /etc/hosts '192.168.1.100 newserver'

4. 大规模服务管理

bash

# 在所有Web服务器上重新加载Nginx
salt -G 'role:webserver' service.reload nginx

# 重启特定环境中的所有服务
salt -C 'G@environment:production
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小宝哥Code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值