【问题标题】:Whats the best way to transport a file to a different server?将文件传输到不同服务器的最佳方式是什么?
【发布时间】:2009-06-17 06:31:42
【问题描述】:

我正在运行一个超出单台服务器容量的文件主机,我需要实现多台服务器的文件存储。我想尽可能便宜地做到这一点,所以那些花哨的大容量存储方法是不可能的。我只是想将用户上传到托管所有 http 和 mysql 的“网关”服务器的文件移动到其中一个媒体服务器。它可以在用户请求结束时完成,也可以每隔几分钟通过 cron 完成。

此时我真正熟悉的唯一方法是使用 ftp_put php 函数,并将文件通过 ftp 传输到不同的服务器,但我过去曾遇到过这种方法的问题,尤其是对于较大的文件,以及许多将要传输的文件将超过 100mb。

谁能为此提出一个好的解决方案?最好我正在寻找一个纯粹的软件解决方案......希望只不过是一个 php/bash 脚本。

【问题讨论】:

    标签: php scaling


    【解决方案1】:

    一种不需要编程设置且非常安全的方法是从另一台服务器挂载一个文件夹,然后像往常一样使用 php 保存到该目录。

    您不必使用 sshfs,还有很多其他方法可以提供相同的解决方案。我会在这种情况下使用 sshfs,因为它可以跨 ssh 工作,因此安全且相对容易设置。

    要实现这一点(使用 sshfs):

    1. 安装sshfs
    2. 将 ssfs 文件挂载到 php 可访问的文件夹中
    3. 使用 php 脚本将文件存储在 sshfs 挂载中,因此存储在其他服务器上。

    另一种方法是使用 crontab 在两者之间设置rsync 命令。

    【讨论】:

    • 文件保存到挂载目录后是否会立即发送到另一台服务器?如果同时“同步”多个文件,性能方面会怎样?
    • 我已经使用这种方法从远程服务器(通过隧道互联网连接)挂载文件系统,并且只遇到了轻微的延迟。我使用这种方法来访问和操作本地开发服务器上的大量文件,并且没有经历太多明显的延迟。使用 sshfs,文件几乎可以立即同步,因此感觉就像是本地文件系统,性能应该相当不错,但如果您有大型服务器,则可能需要研究 SAN。
    【解决方案2】:

    你可以编写一个在 cron 中运行的 bash 脚本

    并使用命令行,如 scp 或 sftp 或 rsync

    示例:

    [bash]# scp filename alice@galaxy.example.com:/home/alice
    

    将“文件名”复制到远程galaxy.example.com服务器上alice的主目录

    【讨论】:

      【解决方案3】:

      使用 cron、bash 脚本和 rsync。

      cron:“Cron 是类 Unix 计算机操作系统中基于时间的作业调度程序。'cron' 是 'chronograph' 的缩写。”

      bash:“Bash 是为 GNU 项目编写的免费软件 Unix shell。”

      rsync:“rsync 是一种适用于 Unix 系统的软件应用程序,可将文件和目录从一个位置同步到另一个位置,同时在适当的时候使用 delta 编码最小化数据传输。”

      总而言之,将 rsync 命令放在 bash 脚本中,并让 cron 定期运行它。

      有关示例,请参阅here:

      【讨论】:

        猜你喜欢
        • 2021-01-05
        • 1970-01-01
        • 2018-11-23
        • 2013-04-19
        • 2010-09-23
        • 2011-05-27
        • 1970-01-01
        • 1970-01-01
        • 2023-01-27
        相关资源
        最近更新 更多