【问题标题】:Move File in Server Cluster From ServerA to ServerB将服务器集群中的文件从服务器 A 移动到服务器 B
【发布时间】:2011-07-13 19:09:48
【问题描述】:

** 前言:我对网络了解不多。如果我描述的设置错误,我会再试一次。 **

我有一个 serverA、serverB 和 serverC 的服务器集群,它们都位于防火墙后面和交换机上。我想以编程方式将文件从 serverA 移动到 serverB。过去,当我不得不将 serverA 上的文件移动到 serverA 上的另一个位置时,我只需调用 exec("sudo mv file1 /home/user/file1");当涉及多个服务器时,我仍然可以这样做吗?

编辑:所有的反应都很好。我研究了服务器是如何集群的,并找出它是挂载还是发生了什么。谢谢大家!你们是我的英雄!

【问题讨论】:

  • 这取决于您的集群的工作方式。服务器是否共享一个公共文件系统,或者是否有一个进程(例如 rsync)在它们之间同步文件?请提供有关您的配置的更多描述,并考虑将此问题移至serverfault.com

标签: php file-upload file-io cluster-computing


【解决方案1】:

如果您使用挂载到所有服务器的通用共享(如 nfs),则可以在文件上使用 mv。

如果您没有该选项,您可以使用 scp 或 rsync 将文件传输到另一台服务器。

【讨论】:

    【解决方案2】:

    首先,您应该使用本机函数来移动文件。见renamehttp://us2.php.net/rename。这只是意味着您需要确保两个位置的权限都正确(可能它们需要由apache 用户拥有)

    但在回答您的实际问题时,它确实取决于设置。通常,您可以将文件移动到的另一台服务器会有一个挂载点,它看起来像任何其他目录,因此您根本不需要对代码进行任何更改。这可能是最好的方法。

    如果您必须使用 FTP 或类似的东西,您需要使用适当的库来满足所需的任何协议。

    【讨论】:

      【解决方案3】:

      虽然这个选项设置起来可能有点过于复杂,但让我指向UDP hole Punching

      如果所有服务器的地址都知道且固定,则它能够穿越防火墙和 NAT 网络。

      原则上,端口打孔是这样工作的:

      A 和B 成为两台主机,各自在自己的专用网络中; N1 和 N2 是两个 NAT 设备

      • A 和 B 尝试创建彼此的 UDP 连接
      • 很可能两次尝试都失败了,因为尚未准备好孔
      • 但是:NAT 设备 N1 和 N2 创建 UDP 转换状态并分配 临时 外部端口号
      • A 和 B 直接在转换后的端口上联系对方的 NAT 设备; NAT 设备使用之前创建的转换状态并将数据包发送到 A 和 B

      这甚至可行,A 和 B 的地址彼此不知道。在这种情况下,需要一个公知的中间系统S。请参阅Wikipedia article 了解更多信息。

      【讨论】:

        【解决方案4】:

        您可以使用 linux 命令行工具 SCP 通过 SSH 通过网络复制文件

        确保在服务器上配置了 SSH 证书。

        例子:

        exec("sudo cp [-Cr] [[user@]ServerA:]/path/to/file [more...] [[user@]SERVERB:]/path/to/file
        

        【讨论】:

        • 请参阅stackoverflow.com/editing-help 了解编辑提示。我已经更正了您的一些帖子中的格式。用 4 个空格缩进你的代码来创建一个带有语法高亮的代码块。
        猜你喜欢
        • 2021-10-11
        • 1970-01-01
        • 2020-07-08
        • 1970-01-01
        • 2022-01-08
        • 1970-01-01
        • 1970-01-01
        • 2016-04-27
        • 1970-01-01
        相关资源
        最近更新 更多