我有一台 CentOS 5.7 服务器,每晚都会备份其文件。我担心在通过网络传输备份时,服务器托管的各个站点的访问者会遇到性能下降的情况。
是否可以限制进程到网络接口的最大允许吞吐量?我想将基于 SSH 的文件传输限制为可用带宽的一半。这可以在服务器端或客户端;也就是说,我很乐意在发起连接的客户端或接收连接的服务器上执行此操作。
(不幸的是,我无法添加专用于备份的接口。我可以增加可用吞吐量,但这仅仅意味着网络传输会更快完成,但在执行此操作时仍然会最大化连接的总容量。)
一些背景
也许有一些背景是合理的。退一步来说,我遇到的问题是没有足够的本地空间来创建备份本身。输入 SSHFS!备份被保存到表面上是本地驱动器的地方,这样网络服务器本身就不会存在任何备份位。
为什么这很重要?因为这似乎会使尊者的使用无效rsync --bwlimit
。rsync
实际上并没有进行转移,也没有能因为我什至无法腾出空间来保存备份文件。
我可以听到您问:“等等,为什么您甚至需要制作备份文件?为什么不只是rsync
源文件和文件夹?”因为其中混杂着一个名为“Plesk”的烦人的东西!这是我面向客户的 Web 主机,为了方便起见,它使用 Plesk。因此,我使用 Plesk 来启动备份,因为 Plesk 为备份添加了各种额外的魔力,使得在恢复过程中使用它非常安全。
悲伤的脸
答案1
我刚刚发现的一个选择是使用trickle
。
trickle
是一个便携式轻量级用户空间带宽整形器。它可以以协作模式(与 一起trickled
)或独立模式运行。
trickle
通过利用 Unix 加载器预加载来工作。本质上,它为应用程序提供了通过套接字发送和接收数据所需的新版本功能。然后,它通过延迟通过套接字发送和接收数据来限制流量。trickle
完全在用户空间中运行,不需要 root 权限。
对于 Ubuntu 用户,通过运行安装它
sudo apt install trickle
举个例子,运行maven build
时将下载速率限制为 20kB/s,上传速率限制为 111kB/s:
trickle -sd 20 -u 111 mvn build
答案2
您可以用于iptables
标记数据包(--pid-owner ...),然后用于tc
调整流量。此外,“--sid-owner”可用于包含该进程的线程和子进程。
http://www.frozenux.net/iptables-tutorial/iptables-tutorial.html#OWNERMATCH
匹配 --pid-所有者
核心2.3、2.4、2.5 和 2.6
例子 iptables -A 输出 -m 所有者 --pid-所有者 78
解释 此匹配用于根据负责数据包的进程 ID (PID) 来匹配数据包。此匹配有点难以使用,但一个示例是仅允许 PID 94 从 HTTP 端口发送数据包(当然,如果 HTTP 进程不是线程化的)。或者,我们可以编写一个小脚本,从特定守护进程的 ps 输出中获取 PID,然后为其添加规则。例如,您可以拥有 Pid-owner.txt 示例中所示的规则
答案3
如果您可以写入管道(或标准输出),则可以安装pv
(管道查看器)命令。它最初是为了显示通过管道传输的数据的进度而编写的。
tar cvf - /files/to/backup | pv -L 512k > /your/file/on/sshfs
-L RATE, --rate-limit RATE
Limit the transfer to a maximum of RATE bytes per second. A
suffix of "k", "m", "g", or "t" can be added to denote kilobytes
(*1024), megabytes, and so on.
答案4
您如何传输数据? (通过 ssh 进行 rsync?scp?sftp?还有其他吗?)
rsync 将允许您限制带宽(请参阅选项 --bwlimit=KBPS)。 rsync -e ssh --bwlimit ..
或者,您可以设置一个 qdisc 或等效的东西来进行奇特的速率限制,但我怀疑在您的情况下这将是严重的矫枉过正。有关此内容的文档可在以下位置找到:Linux 高级路由和流量控制 HOWTO