在没有停机的情况下更新服务器文件的正确方法

时间:2015-11-20 09:16:33

标签: php apache httpd.conf

我想到了这种方法来更新服务器文件而不停机:

  1. 将新文件上传到新文件夹,例如到/ www / v1 /
  2. 在httpd.conf中,更新DocumentRoot以指向新文件夹
  3. 重启apache。
  4. 这有什么缺点吗?还有更好的方法吗?

    在重启的确切时刻访问文件时是否会出现任何竞争条件错误?

2 个答案:

答案 0 :(得分:4)

始终的工作方式没有一种方法 - 即使您准备和部署新服务器,然后将负载均衡器更改为指向新计算机。有人可能刚刚从原始服务器请求了一个页面,然后从新机器上的新站点副本中获取页面的一部分。然而,这在实践中不太可能引起大问题。

在需要复杂需求的大型网站上,事情将变得更加困难 - 并且需要付出代价。大多数网站都有更简单的要求。甚至可以计划数据库迁移具有最小的中断 - 但也会很复杂,并且必须解决计划内的停机时间。

由于在同一台机器(或少量机器)上的站点副本之间切换很容易(有效地移动Apache或Nginx DocumentRoot)一种易于使用的技术(并且不需要多个因此,机器和负载均衡器是如此:

  1. 虽然该网站仍然在磁盘上的当前位置快乐地运行...
  2. 在新目录中查看并准备完全独立的网站副本
  3. 根据需要运行任何必需的composer install或资产提取/准备
  4. 更改旧网站和新网站之间的符号链接。
  5. 在实践中,这是Capistrano(和其他类似工具)的作用。基本目录的布局如下:

    base-directory
       releases
          20151010-0925/
              vendor/  (composer-installed files)
              web/index.php
          20151120-1007/
              vendor/  (composer-installed files)
              web/index.php
       current (symlink to ../releases/20151010-0925/)
       shared/ (files shared between releases)
    

    部署新版本的网站时 - 创建一个新的完整版本,然后在完成后,更改“当前”版本。符号链接。

    此实例中的Apache文档根目录将指向.../base/current/web/ 通过符号链接到网站的基础。

    如果在任何时候部署都没有准备就绪,您可以简单地中止它,并可选择删除您尝试部署的已发布版本,而不是更改符号链接。

    我已经将这项技术用于从简单的单页HTML / CSS网站到运行数千个并发用户的三机群集。

答案 1 :(得分:0)

最佳解决方案是为服务器的高可用性(例如HAProxy)设置负载均衡器。

source: laymance.com

否则,始终会导致停机。请考虑以下情况:重置apache,数据库更新,资产更新,更新期间的意外错误等。