作为虚拟化架构师,我在生产环境中高频使用scp与rsync进行跨节点操作。以下实践经验值得分享:
-
核心差异
- scp基于SSH隧道全量传输,适合小文件即时传输。曾因误用scp同步10TB日志导致网络拥塞
- rsync通过差异校验实现增量同步,传输完成仍会校验文件一致性。某次断电后通过
--partial --progress
成功续传虚拟机镜像
-
安全加固实践
- 禁用密码验证:统一采用
ssh-keygen -t ed25519
生成密钥,配置~/.ssh/config
限制Cipher算法 - 遭遇过中间人攻击后,强制添加
-o StrictHostKeyChecking=yes
避免主机密钥变更风险
- 禁用密码验证:统一采用
-
性能调优案例
- 千节点集群同步时,rsync并发数需通过
-f+=4
限制,避免触发SSH连接数限制 - 使用
-z
压缩时发现Xeon Gold处理器瓶颈,改用--compress-choice=zstd
提升35%速度
- 千节点集群同步时,rsync并发数需通过
-
灾难恢复陷阱
- rsync的
--delete
曾误删客户数据库,现强制组合--dry-run
预演+日志审计 - 硬链接处理需配合
-H
参数,某次备份因缺失该参数导致inode耗尽
- rsync的
-
调试技巧
rsync -vvv
可暴露checksum不匹配的二进制段- 网络抖动时通过
-e 'ssh -o ConnectTimeout=30'
防止僵尸进程
当前更倾向于使用rsync的-aW
保留完整属性进行系统级备份,配合inotify-tools实现实时同步。但需警惕:在ZFS+Ceph的混合存储架构中,扩展属性同步仍需定制ACL策略。