Apache在多个服务器上configuration一个configuration

我想复制我的虚拟机,并把它放在负载平衡器后面。

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

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

或者与文件的打开和写作有些冲突?

有没有更好的方式来维护具有相同configuration的所有机器?

我唯一能想到的其他事情就是复制主configuration并重新启动所有Apache实例的脚本。 还有一些脚本来合并所有的日志…

任何build议表示欢迎。

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

 [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 

你可以在许多相同的机器上共享apacheconfiguration和文档根目录 – 为这些目的使用例如NFS共享没有问题。

明智的做法是不要共享apache日志目录,因为在繁重的工作中你会得到许多并发的写入。 在一个设置中,我使用远程syslogging来获得常见的apache日志。 这将是一个单独的问题,如何实现这一点。 请参阅http://httpd.apache.org/docs/2.2/mod/core.html作为发件人端的起点。

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

有没有更好的方式来维护具有相同configuration的所有机器?

是的,configurationpipe理系统(Puppet,Chef,…)是处理这个问题的正确方法。
他们可以自动部署更新的configuration文件,然后重新启动服务。
日志应通过(r)系统日志发送到中央日志logging服务器。

至于DocumentRoot的内容:依赖于那里的内容。
如果是静态代码,那么打包并通过标准的操作系统工具(yum,apt-get,…)进行部署就更好了。
这也使得缓慢推出新版本变得更容易。

当然可以有一个文件共享,但这可能会成为单一故障点。
在添加更多的服务器之后,在新的configuration被放置在那里之后,检查哪个机器已经重新启动服务将是很痛苦的。

我build议使用configurationpipe理系统(如puppet或CFEngine),或者至less将configuration集中存储在单个存储库中,并将其提供给所有Web服务器。

对于configurationpipe理解决scheme,您可以指定必须存在的整个文件,以及在configurationpipe理服务器上获取哪些文件,或者您可以使用configurationpipe理语言指定这些文件的参数,该configurationpipe理语言提供了一个抽象层简化了正确引入新configuration的过程。

为了简单地集中维护和分发文件,您可能需要将configuration文件检查为版本控制软件,例如CVS或SVN。 从这里,有两个非常简单的方法可以将这些configuration导入到所有的Web服务器中。

  • 然后,您可以指示您的Web服务器直接从版本pipe理工具( cvs cosvn checkout
  • 或者,您可以做更多的工作来制作更强大,可扩展和可重用的解决scheme
    • 脚本构build所有的Apacheconfiguration文件(或您的操作系统的等价物)的RPM
    • 在版本控制服务器(或您的操作系统的等价物)内运行yum repo
    • 那么只需指示您的Web服务器执行yum更新my-apache-configs (或与您的操作系统等效)。

只有VCS的解决scheme最容易设置,并且可以跨操作系统使用。 软件包存储库解决scheme有点难以设置,但它将为您打包和分发各种configuration,代码和脚本铺平了道路,并且与OS供应商的方法更加紧密地一致。

包存储库解决scheme的另一个好处是可以定义依赖关系和包组。 这意味着你可以使我的Apacheconfiguration依赖于httpdmod_ssl 。 然后,您可以创build一个空包,您可以调用像company_com-web_server这样的依赖于my-apache-configsmy-ssl-certificates以及任何其他特定于您的公司的包。 要设置新的Web服务器实例,请在负载平衡器后面放置一个新安装的服务器(将yum repo添加到kickstart),发出yum -y install company_com-web_server ,走开一杯咖啡,然后准备好对卷web服务器实例。

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

这个机制的价值在于它创build了一个松散耦合的系统。 如果configurationpipe理服务器或yum repo离线,您将失去重新configuration的能力,但Web服务器保持不变。 即使在htat实例中,您也可以手动将更改复制到所有机器,并在repo恢复时手动检查更改。 使用共享存储(NFS,集群文件系统等)会导致单点故障。