一、SaltStack远程服务器管理基础准备 SaltStack是基于Python开发的C/S架构自动化运维工具,通过Master(主控端)统一管理多个Minion(受控端),支持远程命令执行、配置管理、服务部署等功能。其核心优势在于ZeroMQ消息队列实现的毫秒级通信、AES加密保障的数据安全,以及YAML+Jinja2模板的高效配置管理。
二、环境搭建:安装与配置Master与Minion
安装SaltStack组件
在Master节点(如10.0.1.111)和Minion节点(如10.0.2.167)上均需安装对应组件。以CentOS 7为例,可通过yum仓库快速安装:
# 安装EPEL仓库(若未安装)
yum install epel-release -y
# 安装Master组件
yum install salt-master -y
# 安装Minion组件
yum install salt-minion -y
配置Master节点
编辑Master配置文件/etc/salt/master,关键参数说明:
interface: 绑定Master监听的IP地址(如interface: 10.0.1.111);auto_accept: True(可选):自动接受Minion的认证请求(生产环境建议手动管理)。systemctl start salt-master
systemctl enable salt-master # 设置开机自启
配置Minion节点
编辑Minion配置文件/etc/salt/minion,指定Master节点的IP地址:
master: 10.0.1.111 # Master节点的IP或主机名
id: minion1 # Minion的唯一标识(可选,默认使用主机名)
启动Minion服务并设置开机自启:
systemctl start salt-minion
systemctl enable salt-minion
认证Minion节点
Master节点通过salt-key命令管理Minion认证:
# 查看待接受的Minion密钥
salt-key -L
# 接受指定Minion(如minion1)的密钥
salt-key -a minion1
# 接受所有待处理的Minion密钥(生产环境慎用)
salt-key -A
认证成功后,Minion会出现在Accepted Keys列表中。
三、核心操作:远程服务器管理常用命令
测试连接
验证Master与Minion之间的通信是否正常:
salt '*' test.ping
若所有Minion返回True,则表示连接成功。
远程命令执行
通过cmd.run模块在Minion上执行Shell命令,支持目标筛选(如*表示所有Minion、web*表示主机名以web开头的Minion):
# 获取所有Minion的内存使用情况
salt '*' cmd.run "free -m"
# 在web开头的Minion上查看磁盘空间
salt 'web*' cmd.run "df -h"
批量安装软件
使用pkg.installed模块批量安装软件包(如Nginx):
salt '*' pkg.installed name=nginx
管理服务状态
通过service.running模块启动/停止服务,并设置开机自启(如Nginx):
# 启动Nginx服务并设置开机自启
salt '*' service.running name=nginx enable=True
# 停止Nginx服务
salt '*' service.stop name=nginx
传输文件
使用cp.get_file模块将Master上的文件复制到Minion指定路径(如将Master的/srv/salt/index.html复制到Minion的/var/www/html/):
salt '*' cp.get_file salt://index.html /var/www/html/
执行远程脚本
通过cmd.script模块运行Master上的Shell脚本(如/srv/salt/scripts/deploy.sh):
salt '*' cmd.script salt://scripts/deploy.sh
四、进阶管理:配置管理与自动化部署
使用State模块实现配置管理
State模块通过YAML文件(.sls格式)定义服务器的期望状态,确保配置的一致性和可重复性。例如,部署Nginx的配置文件/srv/salt/nginx.sls:
# 安装Nginx
nginx-package:
pkg.installed:
- name: nginx
# 管理Nginx配置文件(从Master的salt://nginx/nginx.conf复制到Minion的/etc/nginx/nginx.conf)
nginx-config:
file.managed:
- name: /etc/nginx/nginx.conf
- source: salt://nginx/nginx.conf
- user: root
- group: root
- mode: 644
# 启动Nginx服务并设置开机自启
nginx-service:
service.running:
- name: nginx
- enable: True
- require:
- pkg: nginx-package
- file: nginx-config
执行配置管理命令,将状态应用到目标Minion:
salt '*' state.apply nginx
利用Grains和Pillar增强灵活性
salt -G 'os:CentOS' pkg.installed name=nginx
/srv/pillar/top.sls中定义:base:
webserver1:
- nginx-config
在/srv/pillar/nginx-config.sls中定义配置参数:nginx_port: 8080
在状态文件中引用Pillar数据:nginx-config:
file.managed:
- name: /etc/nginx/nginx.conf
- source: salt://nginx/nginx.conf
- template: jinja
- context:
port: {{ pillar['nginx_port'] }}
自动化部署流程
结合State模块和版本控制工具(如Git),实现代码自动拉取与部署。例如,部署Node.js应用的/srv/salt/nodejs.sls:
# 安装Node.js
nodejs-package:
pkg.installed:
- name: nodejs
# 从Git仓库拉取应用代码
app-code:
git.latest:
- name: https://github.com/example/app.git
- target: /opt/app
- require:
- pkg: nodejs-package
# 安装应用依赖
npm-install:
cmd.run:
- name: npm install
- cwd: /opt/app
- require:
- git: app-code
# 启动应用
app-service:
cmd.run:
- name: node app.js &
- cwd: /opt/app
- require:
- cmd: npm-install
执行部署命令:
salt '*' state.apply nodejs
五、故障排查与注意事项
连接问题
ping <Minion_IP>);interface配置正确(如是否绑定了正确的IP);/var/log/salt/minion)定位错误信息。认证失败
master配置指向正确的Master IP;/etc/salt/pki/master/minions目录下是否有Minion的公钥文件(如minion1.pub);/etc/salt/pki/minion/minion.pem和/etc/salt/pki/minion/minion.pub,然后重启Minion服务)。配置文件语法错误
yamllint工具检查.sls文件的语法(如缩进是否为两个空格、冒号后是否有空格);/var/log/salt/master)获取详细的错误提示。通过以上步骤,可实现SaltStack对远程服务器的高效管理,覆盖从基础命令执行到复杂配置部署的全流程需求。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。