真正有效的做法是将 retries 与 timeout、缓存、镜像源、并发控制组合使用:设 retries=3、timeout=60、max_parallel_downloads=3、metadata_expire=6h,并优先换用阿里云等国内镜像源或部署本地缓存代理。

直接调大 retries 值并不能真正解决弱网抖动下的批量部署中断问题,它只是让单次失败任务多试几次——而每次重试都是从头下载整个 RPM 包,既耗时又加重网络负担。真正有效的做法是把 retries 放在合理位置,并配合超时、缓存、镜像源和并发控制形成组合策略。
Retries 参数的真实作用与常见误区
retries 是 yum.conf 中控制“单个 HTTP/FTP 请求失败后重试次数”的参数,默认值通常是 10。但它只影响单次连接或响应失败(如 503、超时、DNS 解析失败),不解决以下问题:
- 大包下载中途断连(此时已传部分被丢弃,重试=全量重传)
- 镜像源响应慢但未超时,导致整体卡顿甚至超时退出
- 并发请求过多引发远端限流或本地端口耗尽
正确设置 retries 的三个关键点
不是越大越好,而是要匹配实际网络抖动特征和部署节奏:
- 设为 3~6 即可:弱网环境下,超过 3 次重试往往意味着链路已不稳定,继续硬扛不如快速失败并交由上层机制处理(如 ansible retry 文件或脚本重入)
-
必须同步调大 timeout:若
timeout=30而retries=6,总等待时间可能达 3 分钟以上,拖慢整批部署;建议设为timeout=60+retries=3,单请求最长等待约 3 分钟,可控可预期 -
避免全局滥用:某些私有仓库响应慢但可靠,可在对应 .repo 文件中用
retries=1局部覆盖,防止因个别源拉低整体效率
比调 retries 更有效的四层加固手段
单纯改 retries 是治标,下面这些才是应对弱网抖动的实操重点:
-
换国内高速镜像源:阿里云、清华源等 CDN 加速节点大幅降低首字节延迟和丢包率,比调参数见效更快。执行:
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo -
启用本地缓存代理:部署 squid 或 nexus 作为 yum 缓存代理,首次下载后所有后续请求走内网,彻底规避外网抖动。配置
baseurl指向http://your-proxy:3142/centos/7/os/x86_64 -
关闭 metadata 远程校验:在 yum.conf 中添加
metadata_expire=6h和cache=1,避免每次 yum 操作都去远程检查 repomd.xml 是否更新 -
限制并发数防雪崩:在 yum.conf 中设
max_parallel_downloads=3(默认为 10),避免多个大包同时抢带宽导致全部卡死
批量部署场景下的推荐配置组合
适用于 Ansible 批量安装或 Jenkins 自动化构建等弱网环境:
[main] cachedir=/var/cache/yum keepcache=1 debuglevel=2 logfile=/var/log/yum.log exactarch=1 obsoletes=1 gpgcheck=1 plugins=1 installonly_limit=5 bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bugs.centos.org/bug_report_page.php?category=yum distroverpkg=centos-release tolerant=1 strict=0 diskspacecheck=1 # —— 关键弱网适配项 —— retries=3 timeout=60 max_parallel_downloads=3 metadata_expire=6h cache=1











