我想复制我的虚拟机,并把它放在负载平衡器后面。
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服务器中。
只有VCS的解决scheme最容易设置,并且可以跨操作系统使用。 软件包存储库解决scheme有点难以设置,但它将为您打包和分发各种configuration,代码和脚本铺平了道路,并且与OS供应商的方法更加紧密地一致。
包存储库解决scheme的另一个好处是可以定义依赖关系和包组。 这意味着你可以使我的Apacheconfiguration依赖于httpd和mod_ssl 。 然后,您可以创build一个空包,您可以调用像company_com-web_server这样的依赖于my-apache-configs和my-ssl-certificates以及任何其他特定于您的公司的包。 要设置新的Web服务器实例,请在负载平衡器后面放置一个新安装的服务器(将yum repo添加到kickstart),发出yum -y install company_com-web_server ,走开一杯咖啡,然后准备好对卷web服务器实例。
=====编辑=====
这个机制的价值在于它创build了一个松散耦合的系统。 如果configurationpipe理服务器或yum repo离线,您将失去重新configuration的能力,但Web服务器保持不变。 即使在htat实例中,您也可以手动将更改复制到所有机器,并在repo恢复时手动检查更改。 使用共享存储(NFS,集群文件系统等)会导致单点故障。