自动化运维平台设计之【文件分发】

简介: 本文介绍自动化运维平台设计中的四种文件分发的工具:Ansible、SaltStack、蓝鲸作业平台、P2P。

前言

文件分发是自动化运维平台设计中不可或缺的原子操作,如何快速的分发文件到目标主机上?如何解决大文件传输的性能和带宽问题?

0.什么是运维原子操作?

在开始之前有必要澄清下什么是运维的原子操作,所有的自动化运维平台,底层通道通过类型区分只有三种原子操作:命令执行、数据采集、文件分发。例如不管你是安装、启动一个软件都是属于命令执行、监控采集和日志采集都属于数据采集。然后就是文件分发。然后通过将这些原子操作组合起来就可以完成非常复杂的作业编排和流程编排。

1.使用Ansible进行文件分发

如果你是Ansible的用户,我们可以快速的执行一个ad-hoc进行文件分发。

# ansible [pattern] -m [module] -a "[module options]"

案例测试:

# ansible all -m copy -a "src=/etc/resolv.conf dest=/etc/resolv.conf"
linux-node1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "checksum": "cf9cdfda6eb561a6ec4575ca458c80c9058bb8f1", 
    "dest": "/etc/resolv.conf", 
    "gid": 0, 
    "group": "root", 
    "mode": "0644", 
    "owner": "root", 
    "path": "/etc/resolv.conf", 
    "size": 24, 
    "state": "file", 
    "uid": 0
}

更多用法请参考官方文档:
https://docs.ansible.com/ansible/latest/modules/copy_module.html#copy-module

2.使用SaltStack进行文件分发

如果你是SaltStack的用户,你可以有两种选择。

2.1 salt-cp

首先是可以直接使用salt-cp这个命令进行快速的文件分发:

salt-cp '*' [ options ] SOURCE [SOURCE2 SOURCE3 ...] DEST

案例测试:

# salt-cp '*' /etc/hosts /etc/hosts
linux-node1.example.com:
    ----------
    /etc/hosts:
        True

中文支持测试:

# salt-cp '*' 呵呵.txt /tmp/
linux-node1.example.com:
    ----------
    /tmp/呵呵.txt:
        True

而且你也可以使用-C, --chunked 采用分块模式进行文件分发,此模式支持大文件、递归目录复制和压缩的功能。

2.2 cp.get_file

对于大文件的分发,SaltStack官方建议使用远程执行模块cp.get_file进行大文件的分发管理,这个需要使用Salt内置的一个轻量级的file server。而且也支持环境的区分。

# vim /etc/salt/master
...
file_roots:
  base:
    - /srv/salt/base
  test:
    - /srv/salt/dev
  prod:
    - /srv/salt/prod
 ...

更多的使用方式请参考官方文档:

https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.cp.html#salt.modules.cp.get_file

3. 使用蓝鲸作业平台进行文件分发

如果你是蓝鲸的用户,蓝鲸的作业平台提供了分发文件的功能,主要是靠蓝鲸的管控平台来实现的.

蓝鲸管控平台主要提供了三种类型的服务能力:文件传输能力、实时任务执行能力、数据采集与传输的能力。架构图如下:

4.使用P2P工具进行文件分发

不管是使用Ansible还是SaltStack的两种文件分发模式,都无法解决大文件分发的效率和带宽的问题,蓝鲸的管控平台是支持P2P进行文件分发,所以BitTorrent成为了海量大文件分发的首选,这里介绍一下Twitter开源的murder。

不过请注意,该项目在Github上已经不维护了,但不影响使用

https://github.com/lg/murder 
Large scale server deploys using BitTorrent and the BitTornado library (NOTE: project no longer maintained) http://twitter.com

Murder是Twitter开源的的一个P2P文件传输工具,主要是解决Twitter内部做应用部署发软件包的问题。

4.1 Murder组件介绍:

  • torrent tracker:这是Murder的追踪器,需要独立运行的一个服务,通过运行murder_tracker.py就可以启动,tracker实际上只是一个迷你的httpd,对外提供/announce路径,Bittorrent客户端会将他们的状态更新到这个路径上。
  • seeder:这是一个播种机,将文件存放在seeder的节点的一个目录下,通过murder_make_torrent.py会生成一个.torrent的文件,保存着要分发的文件的一些信息,在开始进行P2P传输之前,其它的节点会先从seeder节点来下载文件分片。
  • Peers:指的是所有需要接收文件的节点,它们将接收文件并在彼此之间分发文件分片。一旦有节点同伴完成分发文件的下载,它将继续播种一段时间,以防止热点效应的播种机。

4.2 快速实验:

下面快速的做一个小实验,为了方便使用murder,这里简单的编写了一个安装脚本https://github.com/unixhot/filebt.git,使用supervisor来启动tracker服务。

1.下载代码

# cd /usr/local/src
# wget https://github.com/unixhot/filebt/archive/master.zip

2.使用Ansible/SaltStack分发到所有机器上

# ansible all -m copy -a "src=/usr/local/src/master.zip dest=/usr/local/src/master.zip"

3.执行安装

# ansible all -m raw -a 'cd /usr/local/src && unzip master.zip && cd filebt-master/install/ && ./install.sh install'

4.启动tracker服务
本案例就在Ansible/SaltStack的控制节点启动。

# cd /usr/local/src/filebt-master/install/
# ./install.sh tracker

可以查看tracker服务的状态,确保已经启动。

# supervisorctl status
filebt-tracker                   RUNNING   pid 29435, uptime 0:00:02
​```
查看监听端口,如果你想修改tracker的端口,可以在/etc/supervisord.d/tracker.ini中修改,修改完毕之后注意重启服务。

netstat -ntlp | grep 8998

tcp 0 0 0.0.0.0:8998 0.0.0.0:* LISTEN 29435/python


5.准备一个测试文件

cd /usr/local/src

dd if=/dev/zero of=bigfile.tar.gz count=1 bs=100M


6.生成种子文件

python /opt/filebt/murder_make_torrent.py bigfile.tar.gz 192.168.56.234:8998 bigfile.tar.gz.torrent

注意:这里需要指定tracker的地址,案例是192.168.56.234:8998。



7.启动seeder

python /opt/filebt/murder_client.py seed bigfile.tar.gz.torrent bigfile.tar.gz 192.168.56.234

done and done

注意:最后一个IP地址,是seed所在服务器的地址,当前是和tracker在同一台主机上。而且执行完命令执行,会一直等待。



8.将文件种子分发到所有要下载的节点上。

ansible all -m copy -a "src=/usr/local/src/bigfile.tar.gz.torrent dest=/usr/local/src/bigfile.tar.gz.torrent"


9.所有节点进行P2P下载

ansible all -m raw -a 'LOCAL_IP=$(hostname -i) && cd /usr/local/src && python /opt/filebt/murder_client.py peer bigfile.tar.gz.torrent bigfile.tar.gz $LOCAL_IP'

注意:最后一个IP为各个节点本地IP地址。



> 警告⚠️如果需要分发的节点比较少,文件也特别小,不要使用P2P的方式进行文件分发,因为速度还没有直接使用Ansible或者SaltStack快。



> 建议:在实际的应用过程中,你可以通过自定义脚本来简化这些操作,通过自定义Web界面也可以很好的隐藏掉复杂的细节,同时也可以根据文件大小和分发节点的数量,自动判断是否开启P2P传输。


相关文章
|
21天前
|
运维 监控 自动驾驶
低代码运维平台:是“运维福音”,还是“甩手掌柜”?
低代码运维平台:是“运维福音”,还是“甩手掌柜”?
87 29
|
14天前
|
运维 Linux 网络安全
自动化真能省钱?聊聊运维自动化如何帮企业优化IT成本
自动化真能省钱?聊聊运维自动化如何帮企业优化IT成本
46 4
|
14天前
|
Java 测试技术 数据安全/隐私保护
通过yaml文件配置自动化测试程序
通过yaml文件可以将自动化测试环境,测试数据和测试行为分开,请看一下案例
35 4
|
6月前
|
安全 Linux 虚拟化
Palo Alto Cortex XSOAR 8.8 for ESXi - 安全编排、自动化和响应 (SOAR) 平台
Palo Alto Cortex XSOAR 8.8 for ESXi - 安全编排、自动化和响应 (SOAR) 平台
113 0
Palo Alto Cortex XSOAR 8.8 for ESXi - 安全编排、自动化和响应 (SOAR) 平台
|
3月前
|
运维 监控 安全
从实践到自动化:现代运维管理的转型与挑战
本文探讨了现代运维管理从传统人工模式向自动化转型的必要性与路径,分析了传统运维的痛点,如效率低、响应慢、依赖经验等问题,并介绍了自动化运维在提升效率、降低成本、增强系统稳定性与安全性方面的优势。结合技术工具与实践案例,文章展示了企业如何通过自动化实现运维升级,推动数字化转型,提升业务竞争力。
|
5月前
|
JavaScript 搜索推荐 前端开发
通义灵码2.5智能体模式联合MCP:打造自动化菜品推荐平台,实现从需求到部署的全流程创新
本项目利用通义灵码2.5的智能体模式与MCP服务,构建在线点餐推荐网站。基于Qwen3模型,实现从需求到代码生成的全流程自动化,集成“今天吃什么”和EdgeOne MCP服务,提供个性化推荐、偏好管理等功能。技术架构采用React/Vue.js前端与Node.js后端,结合MCP工具链简化开发。项目涵盖功能测试、部署及未来扩展方向,如餐厅推荐、语音交互等,展示高效开发与灵活扩展能力。
|
4月前
|
运维 监控 Linux
WGCLOUD运维平台的分布式计划任务功能介绍
WGCLOUD是一款免费开源的运维监控平台,支持主机与服务器性能监控,具备实时告警和自愈功能。本文重点介绍其计划任务功能模块,可统一管理Linux和Windows主机的定时任务。相比手动配置crontab或Windows任务计划,WGCLOUD提供直观界面,通过添加cron表达式、执行指令或脚本并选择主机,即可轻松完成任务设置,大幅提升多主机任务管理效率。
|
7月前
|
运维 安全 网络安全
自动化与统一管理:Websoft9 平台为教师提供的一站式解决方案
教育场景常面临资源分散、技术门槛高、资源利用低效及安全风险等问题。Websoft9 提供自动化部署与统一管理方案,通过预集成应用模板库、容器化资源隔离和智能运维监控等技术,大幅缩短环境搭建时间,提升资源利用率并保障数据安全。其典型应用场景包括混合教学环境搭建、科研项目管理和实验课程弹性扩展,助力高校降低成本、提高效率。Websoft9 的图形化界面降低技术门槛,支持自定义开发,推动教育数字化转型,未来有望成为教学生产力提升的底层基座。
124 6
|
7月前
|
机器学习/深度学习 人工智能 运维
机器学习+自动化运维:让服务器自己修Bug,运维变轻松!
机器学习+自动化运维:让服务器自己修Bug,运维变轻松!
284 14
|
7月前
|
存储 人工智能 运维
阿里云操作系统控制台评测:国产AI+运维 一站式运维管理平台
本文详细评测了阿里云操作系统控制台,作为一款集运维管理、智能助手和系统诊断于一体的工具,它为企业提供了高效管理云资源的解决方案。文章涵盖登录与服务开通、系统管理与实例纳管、组件管理与扩展功能、系统诊断与问题排查以及实时热点分析与性能优化等内容。通过实际操作展示,该平台显著提升了运维效率,并借助AI智能助手简化了复杂操作。建议进一步完善组件库并增强第三方兼容性,以满足更多高级运维需求。
423 2

热门文章

最新文章