文件分发策略是什么
批量文件分发指把同一份内容(配置、二进制、证书、安装包)送到多台主机,并确保它落在正确位置、权限正确、内容未被截断或篡改。四个要素决定策略:传输方式(推送、拉取、制品仓库中继、P2P 分片)、增量性(rsync 只传差异块,重复同步时省下大量带宽)、落地原子性(写临时文件再原子改名,避免程序读到写了一半的文件)、以及分发后的校验(哈希或清单比对)。
基本信息
| 传输工具 | rsync(增量)、scp/sftp(整文件)、HTTP 拉取、制品仓库、P2P 分发 |
|---|---|
| 校验方式 | sha256 与文件大小比对、清单文件逐项核对 |
| 关键要求 | 原子替换、保留权限与属主、写入前校验 |
| 权限要求 | 目标目录可写;属主与权限调整通常需要 root |
典型使用场景
- 批量更新配置文件并保持各主机内容一致
- 分发二进制或安装包,并校验未被截断
- 分发 TLS 证书与私钥,需要严格控制文件权限
- 通过制品仓库分发,避免每台直连源站形成单点
- 大批新主机初始化时作为首次投产的一部分
分发与校验示例
分发与校验示例
rsync -avz app/ root@host:/opt/app.new/ # 先分发到新路径
ssh -n host 'sha256sum /opt/app.new/bin/app' # 落地后先校验哈希
ssh -n host 'mv /opt/app /opt/app.old && mv /opt/app.new /opt/app' # 同分区 mv 为原子替换
rsync -av --partial --inplace --bwlimit=20480 app/ root@host:/opt/app/ # 限速 20MB/s 续传
scp app.tar.gz host:/tmp/ && ssh -n host 'tar -C /opt -xzf /tmp/app.tar.gz' # 传输与展开分离分发方式对比
| 方式 | 传输量 | 适用场景 | 校验手段 |
|---|---|---|---|
| scp / sftp | 整文件 | 少量文件、小文件 | 手动比对哈希 |
| rsync | 仅差异块 | 大批量、需要反复同步 | --checksum 或事后哈希 |
| HTTP 拉取 | 整文件,可带缓存 | 目标能访问源站时 | 比对清单文件 |
| 制品仓库 | 按版本拉取 | 需要版本追溯与审计 | 仓库自带校验与元数据 |
| P2P 分发 | 分片并发 | 数百台以上、源站带宽受限 | 逐分片校验 |
同一文件系统内的 mv 是原子操作,因此「先写临时文件再 mv 覆盖」能保证读方只会看到旧版本或新版本,不会看到写了一半的中间态。
直接覆盖正在运行的服务正在读取的程序或配置文件,可能让运行中进程与新文件不匹配。应分发到新路径后切换软链接,或先停止服务再替换。