使用一个配置在多台服务器上运行 Apache

使用一个配置在多台服务器上运行 Apache

我想复制我的虚拟机并将其放在负载均衡器后面。

Apache1  Apache2 ....ApacheN
   |        |           |
-------------------------
        LoadBalancer

我想为虚拟主机仅使用一个配置文件(实际上是每个 httpd.conf 中都包含的 conf 文件目录)、一个日志文件和一个用于所有实例的公共 DocumentRoot 目录。这可能吗,只需在虚拟机之间共享某个目录并相应地配置每个 Apache?

或者文件打开和写入会发生冲突?

是否有更好的方法来维护所有具有相同配置的机器?

我能想到的唯一其他东西是,它是一个复制主配置并重新启动所有 Apache 实例的脚本。还有一些用于合并所有日志的脚本...

欢迎任何建议。

更新:我认为在我的例子中性能不是问题,但是当我开始注意到日志损坏时,我停止从两个实例写入同一个日志文件。

[04/Oct/2014:17:10:34 +0200] "GET /index.html HTTP/1.0" 200 15082 22633
[04/Oct/2014:17:10:36 +0200] "GET /index.html HTTP/1.0" 200 15082 13[04/Oct/2014:17:10:38 +0200] "GET /index.html HTTP/1.0"[04/Oct/[04/Oct/2014:17:10:40 +0200] "GET /index.[04/Oct/2014:17:09:42[04/Oct/2014:17:10:42 +0200][04/Oct/2014:17:09:44 +0200] "GET /index.html HTTP/1.0" 200 15082  

答案1

您可以在许多相同的机器之间共享 apache 配置和文档根目录 - 例如,使用 NFS 共享来实现这些目的没有问题。

最好不要共享 Apache 日志目录,因为在负载过大时,您会收到许多并发写入。在一个设置中,我使用远程系统日志来获取常见的 Apache 日志。这将是一个关于如何实现这一点的单独问题。请参阅http://httpd.apache.org/docs/2.2/mod/core.html作为发送方的起点。

您必须相应地配置您的(服务器的本地)系统日志。

答案2

是否有更好的方法来维护所有具有相同配置的机器?

是的,配置管理系统(Puppet、Chef 等)是处理此问题的正确方法。
它们可以自动部署更新的配置文件,然后重新启动服务。
日志应通过 (r)syslog 发送到中央日志服务器。

至于 DocumentRoot 的内容:这取决于其中的内容。
如果是静态代码,则最好通过标准 OS 工具(yum、apt-get 等)进行打包和部署。
这样还可以更轻松地缓慢推出新版本。

当然可以有文件共享,但这可能会成为单点故障。
而且,当您添加更多服务器时,检查哪台机器在新配置放置到那里后已经重新启动服务会很麻烦。

答案3

我建议使用配置管理系统,例如 puppet 或 CFEngine,或者至少将配置集中存储在单个存储库中并将其拉到所有 Web 服务器。

对于配置管理解决方案,您可以指定必须存在的整个文件,以及在配置管理服务器上获取规范副本的位置,或者您可以在配置管理语言中指定这些文件的参数,这提供了一个抽象层并简化了以正确的方式引入新配置的过程。

如果只是集中维护和分发文件,您可能希望将配置文件签入版本控制软件,例如 CVS 或 SVN。从这里开始,有两种非常简单的方法可以将这些配置放入所有 Web 服务器中。

  • 然后,您可以指示您的 Web 服务器直接从版本管理工具 (cvs 公司或者svn 签出
  • 或者,你可以做更多的工作来制作更强大、可扩展和可重用的解决方案
    • 为所有 Apache 配置文件(或操作系统的等效文件)构建 RPM 脚本
    • 在版本控制服务器(或与你的操作系统相当的服务器)中运行 yum repo
    • 然后只需指示你的网络服务器执行yum 更新我的 apache 配置(或与您的操作系统相当的版本)。

仅 VCS 解决方案最容易设置,并且可以跨操作系统运行。软件包存储库解决方案设置起来稍微困难一些,但它将为您打包和分发各种配置、代码和脚本铺平道路,并且更符合操作系统供应商的方法。

包存储库解决方案的另一个好处是,你可以定义依赖项和包组。这意味着你可以我的 Apache 配置依赖于httpdmod_ssl。然后你可以创建一个空包,命名为company_com-web_服务器这取决于我的 Apache 配置我的 SSL 证书以及任何其他特定于贵公司的软件包。要设置新的 Web 服务器实例,请将新安装的服务器(将您的 yum 存储库添加到 kickstart)放在负载平衡器后面,发出yum -y 安装 company_com-web_server,走开喝杯咖啡,然后带着一个随时可用的 Web 服务器实例回来。

===== 编辑 =====

这种机制的价值在于它创建了一个松散耦合的系统。如果配置管理服务器或 yum 存储库离线,您将无法重新配置,但 Web 服务器仍可正常运行。即使在 htat 实例中,您也可以手动将更改复制到所有计算机,并在存储库恢复时手动检查更改。使用共享存储(NFS、集群文件系统等)将导致单点故障。

相关内容