我有两台运行 CentOS 6.5 的 Dell R515 服务器,每台服务器都有一个 Broadcom NIC 直接连接到另一台。我每晚使用直接链接通过 ssh 上的 rsync 将备份从主服务器推送到辅助服务器。监控流量时,我看到吞吐量约为 2MBps,这比我预期的千兆端口吞吐量要低得多。我已将两边的 MTU 都设置为 9000,但这似乎没有任何变化。
是否有一组推荐的设置和优化可以让我达到最大可用吞吐量?此外,由于我使用 ssh 上的 rsync(或可能只是 NFS)来复制数百万个文件(约 6Tb 的小文件 - 一个巨大的 Zimbra 邮件存储),我正在寻找的优化可能需要针对我的特定用例更加具体。
我在两边都使用 ext4,如果这很重要的话
谢谢
编辑:我使用了以下rsync
选项,得到了非常相似的结果:
rsync -rtvu --delete source_folder/ destination_folder/
rsync -avHK --delete --backup --backup-dir=$BACKUPDIR source_folder/ destination_folder/
cp
目前,我发现通过同一条直接电缆链路使用 NFS 导出时,性能表现同样糟糕。
编辑2:完成同步后,我可以运行iperf
并发现性能约为 990Mbits/秒,速度缓慢是由于实际使用的数据集造成的。
答案1
文件数量和 SSH 加密开销可能是最大的障碍。您不会看到这样的传输速度达到线速。
改进的选项包括:
- 使用成本较低的加密算法的 rsync+SSH(例如
-e "ssh -c arcfour"
) - 使用类似下面的命令彻底消除 SSH 传输中的加密抗凝血酶。
- 基于块的传输。快照
dd
,,ZFS 快照发送/接收, ETC。 - 如果这是一次性或不频繁的传输,则使用
tar
netcat (nc
),缓冲存储器或者某种组合。 - 检查你的 CentOS
tuned-adm
设置。 - 从文件系统挂载中删除 atime。检查其他文件系统挂载选项。
- NIC 发送/接收缓冲区。
- 调整
rsync
命令。whole-W
-files 选项在这里有意义吗?是否启用了压缩? - 针对传输类型(SSD、主轴数、RAID 控制器缓存)优化存储子系统。
答案2
您可能知道,复制大量小文件(例如使用 MailDir 格式或类似格式的邮箱)绝对不是利用高带宽接口的最佳选择。SSH 可能也不是最好的传输协议。我会尝试使用 tar 在源主机上创建一个 tarball,然后再将其发送到辅助主机。
tar c /var/mail | ssh root@secondary-host 'tar x -C /var/backups'
如果您需要增量备份,您可能需要尝试-g
tar 选项。如果您仍需要最大化吞吐量,请尝试使用 netcat 而不是 ssh。
答案3
尝试分析一下造成这种情况的因素:
- CPU(例如通过环回管道传输的 /dev/zero 的 dd)
- 磁盘 I/O(例如 dd大的文件通过管道传输到 cat > /dev/null [通过管道传输以防止短路])
- 物理网络 I/O(例如 dd 通过管道传输到另一台机器)
- ETC。
并对其进行独立测试。
我在使用 Broadcom 驱动程序时遇到过一些不好的经历,因此我的第一个建议是使用以下方法测试可用的网络带宽:
dd if=/dev/zero bs=1m count=10k | rsh backup_host cat \> /dev/null