当负载均衡Apache时如何处理日志和配置文件

9
所以,我目前正在将我的Web平台从单机重建为一组机器,并将使用Apache负载平衡来实现。但在继续之前,我有两个问题需要好的答案。我已经在Google和SO中搜索过,但没有找到什么好的答案。
我的设置将是一个Debian机器运行Apache负载平衡服务器(即具有mod_proxy的Apache),然后是任意数量的“从”机器,它们是平衡成员。所有这些都是VMWare机器内部的VPS,因此按需设置新的从机器将非常简单。
日志文件 第一个问题是日志文件。为了排除故障,我有时需要分析Apache的访问日志和错误日志。当负载均衡均匀分布(即我不知道是否会使用粘性负载平衡,任何主机可能可以随时处理任何请求)时,每个从Apache实例的日志文件也会如此。有没有办法将这些实时合并,使我的实时日志分析器可以查看所有主机的日志文件?我当然理解,在文件位于多个主机上时这样做可能很困难,所以有没有办法确保所有日志文件保存在一个服务器上?
我自己考虑了两件事情,但我非常感谢您的意见。
syslogd 首先是syslogd,其中几个主机可以写入一个记录主机。但是,我的当前设置中,Apache中的每个虚拟主机都有自己的日志文件。尽管可能可以以某种方式解决这个问题。我的主要用途是为了排除故障,而不是为每个主机保留单独的日志(尽管如果两个目标都能实现,那当然会是一个奖励)。
NFS 我接下来想到的是NFS,即在LAN上有一个NFS共享,每个从机器都可以写入相同的日志文件。我将继续假设这将是困难的,因为从机器1将打开日志文件,然后从机器2将无法写入它。
正如我所说,非常感谢您的意见,因为我感到陷入了如何解决这个问题的困境。
配置文件 这是另一件事情。每个从机器将响应每个请求,就像作为一个单一服务器一样。这就是整个想法。但是,如何更改Apache配置文件,添加虚拟主机,设置其他参数呢?如果我有十个或五十个从机器,怎么办?有没有办法确保所有这些从机器始终同步?我已经使用NFS导出使它们都具有相同的文件,但是我是否应该使用相同的方法处理配置文件?还是应该将它们作为某种存储库,然后使用rsync将它们复制到从机器上?一个问题是我在我的Web平台中构建了一个界面,用于编辑这些配置文件(即具有虚拟主机的文件),由于该操作将在一个从机器上进行,因此该文件的最新副本可能潜在地位于一个从机器上。

我意识到这是一篇冗长而复杂的文章,我很抱歉。我只是想确保我的问题的所有参数都被表达出来。

希望有人能够像以前一样帮助我!提前感谢你!


(Note: The original text contained no technical vocabulary or jargon, so there was no need to add any specialized terminology to the translation.)
3个回答

5

我建议不要使用NFS进行日志记录,因为它可能会严重影响性能。相反,请使用启用了远程日志记录的rsyslog。在您的apache2.conf中,您可以设置一个包括VirtualHost名称的LogFormat,然后将日志传输到rsyslog,并告诉它将输出写入远程主机。

在apache2.conf中:

LogFormat "%v %{X-FORWARDED-FOR}i %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
CustomLog "|/usr/bin/logger -t apache2 -p local7.info" vhost_combined

在 Web 服务器上的 rsyslog.conf 文件中:
local7.* @<remote host ip>

在远程主机的rsyslog.conf文件中:

local7.*    /var/log/webfrontends.log;precise

关于Apache配置文件,我们使用NFS。

apache2.conf是一个指向远程文件的链接(如果需要,不同的机器会有不同的文件),在apache2.conf中,我们使用Include指令来读取特定站点的配置文件(如果需要,不同的机器会有不同的目录)。

在NFS服务器上,NFS导出的目录/NFS_EXPORT/etc/apache2/包含:

 - webserver1_apache2.conf
 - webserver2_apache2.conf
 - webserver1_vhosts (dir)
 - webserver2_vhosts (dir)

webserver1_apache2.confwebserver2_apache2.conf都包含Include "/etc/apache2/vhosts"

在WebServer 1上

ln -s /NFS_EXPORT/etc/apache2/webserver1_apache2.conf /etc/apache2/apache2.conf
ln -s /NFS_EXPORT/etc/apache2/webserver1_vhosts/ /etc/apache2/vhosts

在WebServer 2上。
ln -s /NFS_EXPORT/etc/apache2/webserver2_apache2.conf /etc/apache2/apache2.conf
ln -s /NFS_EXPORT/etc/apache2/webserver2_vhosts/ /etc/apache2/vhosts

如果您的所有Web服务器在硬件规格和提供相同的网站/应用方面都是相同的,则不需要区分配置文件。当然,您需要一个脚本或其他机制,在修改配置后重新启动所有服务器上的Apache。此外,除非您具有对NFS导出的根访问权限,否则升级apache2软件可能会很棘手,因为通常包管理系统会抱怨无法修改某些配置文件。

非常感谢您的回复,非常详尽! - Sandman

4
NFS无法帮助您处理日志文件,就像您上面描述的原因一样。您应该使用syslogd(或类似Splunk的其他解决方案)来集中记录日志。很容易包含有关日志条目来自哪个主机的信息,因此在疑难解答时仍然可以缩小到每个主机的数据。
配置文件:您需要将它们集中化(一个“主”副本),或者有一种分发对所有其他服务​​器进行更改的方法。我建议选择集中化作为较简单的方法。 NFS可以在这里完成任务,或者像您建议的那样,从其中所有主机定期更新的存储库。这里有很多选项,一直运行到版本控制(SVN,git等),甚至是配置服务器(Chef等)。
请注意,从单个服务器移动到群集具有许多影响。在上述两种情况下(记录日志,配置文件),如果天真地做,可能会引入单点故障的潜在风险。由于您已经拥有了一个服务器,因此您不会变得更糟,但您应该尝试了解并计划可能需要应对的故障场景。

非常感谢您的评论。我很清楚单点故障的风险,但我仍然需要将日志集中存储。 - Sandman

0
使用专为此工作而建的工具 - Puppet 旨在管理多个服务器上的配置文件。有一个开源工具,或者您可以获取他们的企业版。

puppetlabs.com


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接