站点在两个不同的服务器上

时间:2016-01-15 08:38:00

标签: server synchronization

我考虑从中国购买网络服务器,以减少来自中国/中国用户的网站加载时间。问题是,如何在两个站点之间同步/保存相同的数据?在网站中编辑内容时,应将这些更改更新到中国服务器中的网站。

服务器正在运行Linux,Apache和MySQL。网站正在使用WordPress。

仅供参考我已经使用CDN,而且中国的网站加载速度仍然太长。

1 个答案:

答案 0 :(得分:0)

基本上你的解决方案需要......

  • 将http目录的全部内容从主服务器复制到中文服务器。
  • 将MySQL数据库的全部内容从主服务器复制到中文服务器。
  • 定期执行这些任务,无需人工干预。

我可以引导您参考有助于完成每项任务的参考资料,有时可以向您展示一个快速示例。但是,如果你想让它发挥作用,特别是如果你想优化这个过程,你将不得不自己查看参考文献。

如果我没有这样做,这个答案将会变得更加可怕,已经存在了。

在我们开始之前你应该记住......

事情0 - 请尽量不要被这个答案的长度吓倒

我知道我已经写了很多,也许比我应该写的更多,但我保证你能够在不超过一天的时间内实现这一点。我试图彻底,但这并不意味着我所描述的内容特别复杂。

事情1 - 转移期间关闭中文服务器

这种数据传输将使您的中文服务器在进行中时无法使用,您可能已经猜到了。您需要确保您的中文服务器在传输过程中无法运行。否则,服务器可能只有部分可用数据,这可能会导致客户端和服务器出现问题,尤其是与MySQL相关的问题。

事情2 - 尽可能多地使用压缩

由于压缩和解压缩对于大量数据而言非常耗时,相信我与浪费将未压缩数据发送到中国的时间相比毫无意义。网络使用,而不是处理器时间,实际上将成为快速完成传输的限制因素。尝试尽可能发送压缩文件。

第3项 - 尝试使用校验和

发送所有数据(尤其是压缩格式的数据)会使其在传输过程中容易受到损坏。每当您发送文件时,我都鼓励您对数据使用某种校验和来验证它是否已损坏。为简洁起见,我不会告诉你如何做到这一点,但我确信你足够聪明,可以弄清楚如何在某些验证中加油。

如果您不熟悉校验和,the Wikipedia article关于校验和非常简单。最常用的是MD5SHA-1,但这两者都有些容易发生冲突。我建议SHA-2(也称为SHA-256/512)或新SHA-3

将您的Http"目录复制到中文服务器

据我所知(我可能错了)没有内置的方法将文件从一个Apache服务器传输到另一个Apache服务器......所以你必须为此编写自己的脚本。

您还需要有两个单独的脚本:一个用于主服务器,另一个用于中文服务器。这是每个脚本需要做的细分。

在您的主服务器上......

  1. 以您自己的Apache服务器用户身份登录。 (Reference for switching users。)
  2. zip / gzip / tar.gz您的http目录的内容。 (Reference for zipReference for gzipReference for tar。)
  3. scp(安全复制)压缩文件到您的中文服务器。 确保将其复制到Apache运行的用户名。Reference for scp。)
  4. 删除压缩文件。
  5. 启动中文服务器的脚本(稍后将对此进行讨论)。
  6. 您可能会使用shell脚本来完成所有这些,所以我希望您熟悉终端。一个简单的例子看起来像这样。

    #!/bin/sh
    
    ## First I'll define some variables to explain this better.
    
    APACHE_USER="whatever your Apache server's username is (usually it's www-data)";
    WWW_DIR="your http'd directory relative to ~ (usually it's /var/www)";
    CHINA_HOST="the host name/IP address of your Chinese server"
    CHINA_USER="Apache's username on the Chinese server";
    CHINA_PWD="Apache's user password on the Chinese server";
    CHINA_HOME="the home directory of the Apache user on your Chinese server";
    
    ## Now to the real scripting. I will be using zip for compression.
    
    su - "$APACHE_USER";
    zip -r copy.zip "$WWW_DIR";
    scp copy.zip "$CHINA_USER@$CHINA_HOST:$CHINA_HOME" < echo $CHINA_PWD;
    rm copy.zip;
    
    ## Then you initiate the next step of the process.
    ## Like I said this will be covered later.
    

    在您的中文服务器上

    1. 以Apache用户身份登录。
    2. 删除http目录的内容(可能是/ var / www相对于〜)。
    3. 解压缩scp文件(这会根据您压缩的方式而改变)。
    4. 将解压缩的目录复制到http目录(如果您选择使用zip压缩,则不需要执行此步骤。)
    5. 删除了压缩的scp文件。
    6. 通知主服务器继续下一步(再次,稍后将讨论)。
    7. 这很简单,我认为你不需要另一个例子。

      复制MySQL数据库内容

      您可以在MySQL网站的this article中找到有关如何执行此操作的良好参考。基本上复制数据库内容是内置功能。 尝试使用压缩选项!

      以常规间隔执行这些任务,无需人工干预

      好的,这就是事情变得复杂的地方。

      您需要知道的第一件事是如何在Linux上定期安排任务。这是通过名为crontab的命令行工具完成的。您可以在this articlefull crontab documentation here中看到设置cron作业的好例子。

      然而,除了定期安排作业之外,还需要同步数据传输。如果您只是将一台服务器设置为在特定时间发送数据而另一台服务器在特定时间接收它,则会出现许多错误。确保这一点。

      我的建议是在中文服务器中创建一个监听来自主服务器的指令的套接字。

      这可以用各种语言完成。因为您正在使用Linux,我建议您在C中使用它,但几乎可以用任何语言完成,包括Bash。

      一个完整的例子太多了,但基本上这将是你必须要做的事情。

      1. 中国的插座听取了联系。
      2. 主服务器中的Cron作业连接到中国套接字。
      3. 主服务器验证自身。
      4. 中文服务器停止Apache,停止接受请求。
      5. 中文服务器确认已批准身份验证。
      6. 主服务器scp的网站内容到中文服务器。
      7. 主服务器告诉中文服务器scp已完成。
      8. 中文服务器用已scp的数据替换Apache的目录内容。
      9. 中文服务器宣布主服务器成功。
      10. 主服务器复制MySQL数据。
      11. 主服务器告诉中文服务器进程完成。
      12. 中文服务器恢复Apache服务。
      13. 中文服务器通知主服务器恢复服务。
      14. 插座已关闭。
      15. 中文服务器回去监听主服务器的连接。
      16. 我希望这有帮助!