我想复制我的虚拟机并将其放在负载均衡器后面。
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
是的,配置管理系统(Puppet、Chef ......)是处理这个问题的正确方法。
他们可以自动部署更新的配置文件并在之后重新启动服务。
日志应该通过 (r)syslog 发送到中央日志服务器。
至于 DocumentRoot 的内容:这取决于那里的内容。
如果它是静态代码,那么最好将其打包并通过标准操作系统工具(yum、apt-get、...)进行部署。
它还可以更轻松地缓慢推出新版本。
当然可以进行文件共享,但这可能会成为单点故障。
当您添加更多服务器时,在放置新配置后检查哪台机器已经重新启动服务将会很痛苦。
您可以在许多相同的机器之间共享 apache 配置和文档根目录 - 为这些目的使用例如 NFS 共享是没有问题的。
明智的做法是不要共享 apache 日志目录,因为在重负载时您将获得许多并发写入。在一种设置中,我使用远程系统日志记录来获取常见的 apache 日志。这将是一个单独的问题,如何实现这一点。请参阅http://httpd.apache.org/docs/2.2/mod/core.html作为发送方的起点。
您必须相应地配置您的(服务器的本地)系统日志。
我建议要么使用配置管理系统,例如 puppet 或 CFEngine,要么至少将配置集中存储在单个存储库中并将它们拉到所有 Web 服务器。
对于配置管理解决方案,您可以指定必须存在的整个文件,以及在配置管理服务器上从何处获取规范副本,或者您可以使用配置管理语言为这些文件指定参数,该语言提供抽象层和简化了以正确方式引入新配置的过程。
为了简单地集中维护和分发文件,您可能希望将配置文件签入版本控制软件,例如 CVS 或 SVN。从这里开始,有两种非常简单的方法可以将这些配置导入所有 Web 服务器。
仅限 VCS 的解决方案最容易设置,并且可以跨操作系统工作。包存储库解决方案设置起来有点困难,但它将为您打包和分发各种配置、代码和脚本铺平道路,并且更接近操作系统供应商的方法。
包存储库解决方案的另一个好处是您可以定义依赖项和包组。这意味着您可以使my-apache-configs依赖于httpd和mod_ssl。然后,您可以创建一个空包,您可以将其称为company_com-web_server,它依赖于my-apache-configs和my-ssl-certificates以及您公司特定的任何其他包。要设置新的 Web 服务器实例,请将新安装的服务器(将您的 yum 存储库添加到 kickstart)在负载均衡器后面,发出yum -y install company_com-web_server,走开喝杯咖啡,然后回来准备-to-roll Web 服务器实例。
===== 编辑 =====
这种机制的价值在于它创建了一个松散耦合的系统。如果配置管理服务器或 yum 存储库脱机,您将失去重新配置的能力,但 Web 服务器保持运行。即使在 htat 实例中,您也可以手动将更改复制到所有机器,并在 repo 恢复时手动检查更改。使用共享存储(NFS、集群文件系统等)会产生单点故障。