【问题标题】:Handling log and configuration files when load balancing apache在负载平衡 apache 时处理日志和配置文件
【发布时间】:2011-10-14 22:38:35
【问题描述】:

因此,我目前正在将我的 Web 平台从单机重建为一组机器,并且我将使用 Apache 负载平衡来执行此操作。但是在继续之前我有两个问题需要一个好的答案.我在 SO 中搜索并搜索了这里,但没有找到任何好的东西。

我的设置将是一台运行 Apache 负载平衡服务器的 Debian 机器(即带有 mod_proxy 的 Apache),然后是任意数量的“从”机器,它们是平衡成员。所有这些都是 VMWare 机器内的 VPS,因此根据需要设置新的从属服务器将是微不足道的。

日志文件 第一个问题是日志文件的问题。为了对我的平台进行故障排除,我有时需要分析来自 Apache 的日志文件,包括访问日志和错误日志。当负载均匀分布时(即我不知道我是否会使用粘性平衡,任何主机都可能随时处理任何请求),每个从属 Apache 实例的日志文件也是如此。有没有办法整合这些live,这意味着我的实时日志分析器可以看到来自所有主机的日志文件?我当然明白,当文件在多个主机上时这样做会很困难,那么有没有办法确保所有日志文件都保存在一个服务器上?

我自己也在考虑两件事,但我非常感谢您的意见。

系统日志 第一个是 syslogd,其中可以有多个主机写入一个日志记录主机。问题在于,在我当前的设置中,apache 中的每个虚拟主机都有自己的日志文件。不过,这可能会以某种方式解决。我的主要用途是进行故障排除,而不是为每个主机保留单独的日志(尽管如果可以同时满足这两个目标,那肯定是一个奖励)。

NFS 我的下一个想法是关于 NFS,即在 LAN 上有一个 NFS 共享,每个从站都可以写入同一个日志文件。我将继续假设这会很困难,因为从属 1 会打开日志文件,然后从属 2 将无法写入。

正如我所说,非常感谢您的意见,因为我觉得我被困在如何解决这个问题上。

配置文件 这完全是另一回事。每个从站将响应每个请求,就好像充当一个单独的服务器一样。这就是整个想法。但是如何更改 apache 配置文件、添加虚拟主机、设置其他参数呢?如果我有十个或五十个奴隶怎么办?有没有办法确保所有这些从站始终保持同步?我已经在使用 NFS 导出来确保它们都具有相同的文件,但我应该对配置文件使用相同的方法吗?或者我应该将它们作为某种形式的存储库,然后使用 rsync 将它们复制到从站?一个问题是我在我的 Web 平台中构建了一个界面来编辑这些配置文件(即具有虚拟主机的文件),并且由于该操作将发生在其中一个从属设备上,因此该文件的最新副本可能一个奴隶。

我意识到这是一个冗长而实用的帖子,我深表歉意。我只是想确保我的问题的所有参数都得到了表达。

我希望有人可以像以前一样帮助我!提前谢谢!

【问题讨论】:

    标签: logging load-balancing apache nfs


    【解决方案1】:

    NFS 不会帮助您处理日志文件,原因正是您上面描述的。您应该使用 syslogd(或 Splunk 等其他解决方案)来集中日志记录。包含有关日志条目来自哪个主机的信息很简单,因此您在进行故障排除时仍然可以筛选到每个主机的数据。

    配置文件:您需要将它们集中起来(“主”副本),或者有办法将在任何服务器上所做的更改分发给所有其他服务器。我建议集中化作为更简单的方法。 NFS 将在这里完成这项工作,或者,正如您所建议的,所有主机都会定期更新的存储库。这里有很多选项,一直运行到版本控制(SVN、git 等)甚至配置服务器(Chef 等)。

    请注意,从单台服务器迁移到集群有很多含义。在上述两种情况下(日志记录、配置文件),如果天真地完成,可能会引入单点故障。由于您已经拥有(一台服务器),因此您的情况并没有更糟,但您应该尝试了解并计划您可能需要响应的故障场景。

    【讨论】:

    • 非常感谢 cmets。我很清楚单点故障,但我仍然需要集中日志记录。
    【解决方案2】:

    我建议不要使用 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
    

    在网络服务器上的 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"

    在网络服务器 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
    

    如果您所有的网络服务器在硬件规格方面都相同,并且服务于相同的站点/应用程序,则无需区分配置。

    当然,一旦您修改了配置,您将需要一个脚本或其他机制来重新启动您所有服务器上的 apache。 此外,升级 apache2 软件可能会很棘手,除非您对 NFS 导出具有 root 访问权限,因为通常您的包管理系统会抱怨无法修改某些配置文件。

    【讨论】:

    • 非常感谢您的回复,非常详尽!
    【解决方案3】:

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

    puppetlabs.com

    【讨论】:

      猜你喜欢
      • 2010-10-23
      • 2013-08-23
      • 2011-04-15
      • 2023-03-09
      • 1970-01-01
      • 2018-02-17
      • 1970-01-01
      • 1970-01-01
      • 2016-08-20
      相关资源
      最近更新 更多