干货篇 | 自动化运维工具-saltstack pt.1

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 干货篇 | 自动化运维工具-saltstack pt.1

早在去年,我就在《干货篇 | 一文带你了解Ansible(上)》和《干货篇 | 一文带你了解Ansible(下)》文章中介绍过一款自动化运维工具——ansible

那么我将为大家介绍另一款自动化运维工具——saltstack

saltstack采用C/S结构的方式来进行配置管理,运行速度快、部署轻松,几分钟内便可运行起来,而且服务器之间能够做到秒级通讯,容易批量管理上万台服务器,显著降低人力与运维成本

话不多说,开始进入正题!

初识saltstack

  • 是一种基于C/S架构的服务器基础架构集中化管理平台,管理端称为master,客户端称为minion
  • 具备配置管理、远程执行、监控等功能
  • 基于 python 语言开发
  • 通过 Python 第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack 和 PyYAML 等)构建
  • 底层使用 ZeroMQ 消息队列 pub/sub 方式通信

saltstack特征

  1. 部署简单、方便
  2. 主从集中化管理
  3. 配置简单、功能强大、扩展性强;
  4. master 和 minion 基于证书认证,安全可靠
  5. 支持API自定义模块,可通过 Python 扩展

saltstack运行模式

  • local:本地单台机器,不建议
  • Master/Minion:通过server/agent的方式进行管理,效率很高(批量管理1000 台机器,25秒搞定)
  • Salt SSH:通过SSH方式进行管理(类似于ansible),效率相对来说比较低(批量管理1000台机器,83秒搞定)

架构图

image-20220711183010356.png

在Master和Minion端都是以守护进程的模式运行,一直监听配置文件里面定义的 ret_port(接受minion 请求)和 publish_port (发布消息)的端口

master与minion之间通过Zero进行消息传递,使用了ZeroMQ进行消息传递,使用了Zero-MQ的发布-订阅模式,连接方式包括tcp、ipc

master 将要执行的命令(例如ls)发送给 minion,minion 从消息总线上接受到要处理的命令,交给 minion_handle_aes 处理

minion.handle_aes发起一个本地线程调用 cmdmod 执行 ls 命令。线程执行完 ls 后,调用 minion.return_pub 方法,将执行结果通过消息总线返回给 master

master 接收到客户端返回的结果,调用 master_handle_aes 方法,将结果写进文件中

salt.client.LocalClient.cmd_cli 通过轮询获取执行结果,将结果输出到终端

1.与ansible区别

image-20220711184217937.png

master和minion

1.认证(非对称加密)

  • minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在 /etc/salt/minion里面设置)下自动生成minion.pem(私钥)和minion.pub(公钥),然后将公钥发送给master
  • master在接收到minion的公钥后,将 minion 公钥放到 /etc/salt/pki/master/minions.pre/下面,并且以 minion的 id 命名,通过认证后 master 将 /etc/salt/pki/master/minions.pre目录下的公钥转移到/etc/salt /pki/master/minions/ 目录下表示已经认证
  • master 将自己的公钥(master.pub)发送到 minion 的 /etc/salt/pki/minion/ 目录并下生成minion_master.pub文件

2.连接

  • master启动后默认监听4505和4506两个端口
  • 4505 (publish_port)为消息发布系统(PUB),4506(ret_port)为 minion 与 master 通信的端口(REP)
  • minion 不监听端口,启动后,会主动连接 master 注册,然后一直保持 TCP 连接(master 4505 端口),master 通过该 TCP 连接对 minion 进行控制,若断开,master 也便无法控制 minion,但是当 minion 检测到断开后会定期连接 master

3.saltstack-syndic

saltstack传统的架构都是C/S,一个master管理多个minion的形式

syndic架构多了一层类似代理的东西(zabbix proxy)
image-20220713091819999.png

安装并部署

master:192.168.149.128

minion:192.168.149.129

minion:192.168.149.130

  • 首先需要下载依赖
#安装saltstack存储库和密钥
[root@master ~]# rpm --import https://repo.saltproject.io/py3/redhat/7/x86_64/3002/SALTSTACK-GPG-KEY.pub
[root@master ~]# curl -fsSL https://repo.saltproject.io/py3/redhat/7/x86_64/3002.repo | tee /etc/yum.repos.d/salt.repo
[root@master ~]# yum clean expire-cache
  • 根据实现功能不同来安装不同组件

    • master:yum install salt-master -y
    • minion:yum install salt-minion -y
    • syndic:yum install salt-master salt-minion salt-syndic -y
  • 启动
[root@master ~]#systemctl enable salt-master && systemctl start salt-master
[root@minion ~]#systemctl enable salt-minion && systemctl start salt-minion

1.修改配置文件

  • master

master配置文件路径:vim /etc/salt/master

[root@master ~]# vim /etc/salt/master
[root@master ~]# grep -Ev "^$|#" /etc/salt/master
auto_accept: True
file_roots:
  base:
    - /home/salt
pillar_roots:
  base:
    - /home/salt/pillar
log_level: warning
file_roots:主目录
pillar_roots:pillar 组件主目录
auto_accept:自动认证

配置完后启动服务

[root@master ~]#systemctl restart salt-master 
  • minion

minion配置文件路径:vim /etc/salt/minion

[root@minion ~]# vim /etc/salt/minion
[root@minion ~]# grep -Ev "^$|#" /etc/salt/minion
master: 192.168.149.128
id: 192.168.149.129
user: root

#重启服务
[root@minion ~]# systemctl restart salt-minion
# minion的识别ID,可以是IP,域名,或是可以通过DNS解析的字符串
id: 192.168.0.100

# salt运行的用户权限
user: root

# master的识别ID,可以是IP,域名,或是可以通过DNS解析的字符串

master : 192.168.149.128

# master通讯端口
master_port: 4506

# 备份模式,minion是本地备份,当进行文件管理时的文件备份模式
backup_mode: minion

# 执行salt-call时候的输出方式
output: nested 

# minion等待master接受认证的时间
acceptance_wait_time: 10

# 失败重连次数,0表示无限次,非零会不断尝试到设置值后停止尝试
acceptance_wait_time_max: 0

# 重新认证延迟时间,可以避免因为master的key改变导致minion需要重新认证的syn风暴
random_reauth_delay: 60

# 日志文件位置
log_file: /var/logs/salt_minion.log

# 文件路径基本位置
file_roots:
  base:
    - /etc/salt/minion/file
    
# pillar基本位置
pillar_roots:
  base:
    - /data/salt/minion/pillar

2.认证

minion 在第一次启动时,会在 /etc/salt/pki/minion/ 下自动生成 minion.pem(private key) 和 minion.pub(public key),然后将 minion.pub 发送给 master (非对称加密)

  • salt-key 查看目前已认证与未认证的 minion

我们在master来进行key认证

[root@master ~]# salt-key
Accepted Keys: #可以看到master已经检测到minion,且已认证key
192.168.149.129
Denied Keys:
Unaccepted Keys: 
Rejected Keys:

#如果没有认证,手动输入认证一下
[root@master ~]# salt-key -a id
  • 认证完我们测试一下
[root@master ~]# salt '192.168.149.129' test.ping
192.168.149.129:
    True #返回结果表示成功
  • PS!!
#如果发先测试时间特别长,建议在master下/etc/hosts文件里加上dns解析
vim /etc/hosts
192.168.149.128 master

#因为debug发现master会创建一个tcp连接去连自己回环地址,可能是这步导致延迟
相关文章
|
3天前
|
运维 监控 数据处理
常用的运维工具:基本的命令行工具详解(grep, awk, sed)
常用的运维工具:基本的命令行工具详解(grep, awk, sed)
29 14
常用的运维工具:基本的命令行工具详解(grep, awk, sed)
|
1天前
|
机器学习/深度学习 人工智能 运维
自动化运维:从脚本到工具的演进之路
【9月更文挑战第19天】在数字化时代的浪潮中,自动化运维如同一剂强心针,赋予IT系统以生命力。本文将带领读者穿梭于自动化运维的历史长河,探索它的起源、成长与变革。我们将一同见证如何从简单的shell脚本起步,逐步演化为复杂的自动化工具和平台。通过深入浅出的语言,我们不仅分享实用的代码示例,还将探讨自动化运维的最佳实践、面临的挑战以及未来的发展趋势。让我们开始这段旅程,解锁自动化运维的秘密,提升你的技术洞察力。
|
1天前
|
测试技术
基于LangChain手工测试用例转App自动化测试生成工具
在传统App自动化测试中,测试工程师需手动将功能测试用例转化为自动化用例。市面上多数产品通过录制操作生成测试用例,但可维护性差。本文探讨了利用大模型直接生成自动化测试用例的可能性,介绍了如何使用LangChain将功能测试用例转换为App自动化测试用例,大幅节省人力与资源。通过封装App底层工具并与大模型结合,记录执行步骤并生成自动化测试代码,最终实现高效自动化的测试流程。
11 4
|
5天前
|
机器学习/深度学习 运维 安全
构建高效运维体系:从自动化到智能化的演进之路
在数字化转型的浪潮中,运维管理作为信息技术基础设施的重要支柱,正经历着从传统手工操作向自动化、智能化的深刻变革。本文将探讨如何通过引入自动化工具和平台,实现运维流程的标准化与效率提升;进而利用大数据分析和人工智能技术,迈向预测性维护和智能决策支持的高级阶段。通过案例分析,揭示成功转型的关键因素,为运维专业人士提供一套可借鉴的升级路径。
|
3天前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进之旅
在当今数字化时代,运维作为信息技术领域的核心组成部分,其重要性日益凸显。随着企业业务的不断扩展和技术的日新月异,传统手工运维方式已难以满足现代IT架构的需求。因此,构建一个高效、智能的运维体系成为业界共识。本文将探讨如何通过自动化和智能化手段,实现运维效率的质的飞跃,并分享一些成功案例与实践经验。
|
3天前
|
存储 运维 网络安全
自动化运维工具:Ansible入门与实践
【9月更文挑战第17天】本文将介绍Ansible的基本概念、安装和简单使用,以及如何编写一个简单的Ansible playbook。通过本文,您可以了解到Ansible的基本原理和使用方法,以及如何在实际工作中应用Ansible进行自动化运维。
|
6天前
|
运维 安全 网络安全
常用的运维工具:SSH和远程连接工具详解
常用的运维工具:SSH和远程连接工具详解
26 3
|
8天前
|
机器学习/深度学习 运维 监控
构建高效运维体系:从自动化到智能化的演进
在当今信息技术飞速发展的时代,运维领域正经历着从传统手动操作向高度自动化和智能化转变。本文旨在探讨如何通过集成自动化工具、实施持续集成与持续部署(CI/CD)、采用容器化技术和探索AIOps实践,构建一个高效、可靠的运维体系。我们将分析这些技术如何相互配合,提升运维效率,降低系统故障率,并实现快速响应市场变化的能力。通过案例分析和最佳实践的分享,本文将为IT专业人员提供一套实用的指南,帮助他们在数字化转型的浪潮中,保持运维工作的前瞻性和竞争力。
|
9天前
|
机器学习/深度学习 数据采集 人工智能
智能化运维的探索之旅:从自动化到人工智能
在数字化浪潮中,运维领域正经历一场革命。本文将带你领略从传统手动操作到自动化脚本,再到集成人工智能的智能运维平台的演变之路。我们将探讨如何通过技术创新提升效率、降低成本并增强系统的可靠性和安全性。文章不仅分享技术演进的故事,还提供了实现智能化运维的实践策略和未来趋势的展望。
|
7天前
|
运维 监控 数据可视化
高效运维的秘密武器:自动化工具链的构建与实践在当今数字化时代,IT系统的复杂性和规模不断增加,使得传统的手动运维方式难以应对日益增长的业务需求。因此,构建一套高效的自动化工具链成为现代运维的重要任务。本文将深入探讨如何通过自动化工具链提升IT运维效率,确保系统稳定运行,并实现快速响应和故障恢复。
随着企业IT架构的不断扩展和复杂化,传统的手动运维已无法满足业务需求。自动化工具链的构建成为解决这一问题的关键。本文介绍了自动化工具链的核心概念、常用工具及其选择依据,并通过实际案例展示了自动化工具链在提升运维效率、减少人为错误、优化资源配置等方面的显著效果。从监控系统到自动化运维平台,再到持续集成/持续部署(CI/CD)的流程,我们将一步步揭示如何成功实施自动化工具链,助力企业实现高效、稳定、可靠的IT运维管理。