如何在Web群集中保持Apache conf文件同步

在负载平衡器后面的多个Web服务器上保持httpd.conf和php.ini文件一致的最佳实践是什么?

我可以定期rsync这些文件,或编写一个自定义的部署脚本。 我错过了什么其他选项?

理想情况下,您可以使用Puppet或其他类似工具(例如cfengine)来设置configurationpipe理服务器。

一般来说,关于服务器configuration的最佳做法是:

永远不要login到机器上去改变任何东西,而是始终在[configurationpipe理服务器]上进行更改,并让更改传播出去 ”(摘自http://www.infrastructures.org/papers/bootstrap/bootstrap.html

最好的问候,Alex

我们的networking节点有一个NFS群集。 我们将Apache和PHP的默认configuration文件位置符号链接到NFS共享上的共享副本。 一个非常简单的shell脚本然后做一些基本的内务(重buildApparmor规则等),然后遍历web节点首先触发一个apache2ctl configtest ,然后apache2ctl graceful

其他想法:

  1. 包裹rsyncscp简单shell脚本。
  2. 对于更大的安装, Puppet配方可以可靠地交付更新后的configuration文件,并在之后反弹Apache。

svn可以用来提供版本控制和configuration文件的分发。 git或bzr等也可以使用。

编辑“主”服务器上的文件,svn提交它们,并且可以运行cron作业或ssh,然后在“从”服务器上运行“svn update”。

我倾向于使用ssh,并设置无密码访问以允许“主”服务器在从服务器上运行特定的Makefile – Makefile运行“svn update”,它是基于文件信息的依赖性规则,然后决定还需要其他什么东西(例如,从文本生成哈希数据库用户或组文件,从NIC添加或删除IP地址,重新启动Apache等 – 任何时候当您可以确定一系列操作依赖于文件更改和/或另一个操作序列是使用make来自动化进程的一个好的select)。

即使在“主”服务器上,一切都是由make驱动的。 编辑一个或多个configuration文件,然后运行make。 Makefile指出需要做什么(svn commit,从源input文件生成configuration片段,'ssh make'到其他服务器等)。 用这样的方式确保每一步都按正确的顺序完成,而且没有任何一步被遗忘。 使svn成为stream程的重要组成部分,可确保每次更改都在提交日志中提供时间戳记和解释。

当然,很多人会用木偶或类似的东西来做到这一点。 如果我要从头开始,我可能也会这么做……但是,在傀儡出现之前很久,我一直这样做。 在傀儡前面有类似的工具,但傀儡是我见过的第一个看起来好像可能会改变的麻烦……但是很难certificate改变什么东西只适合看起来很好的东西可能会更好。

有几个解决scheme。

  • 共享文件系统,如NFS或OCFS2。
  • Puppetmaster或同等configurationpipe理器
  • Shell脚本解决scheme(相当于puppetmaster,但轻量级的shell进入服务器,更新文件,反弹阿帕奇)
  • 通过颠覆,使用post-commit钩子来完成上述操作。
  • 手动执行上述shell脚本中的步骤…(这是您的红色订书机)

最大的问题是:CONTENT(或访问数据库内容的dynamic脚本)如何同步? 如果你仔细想想,configuration文件只是另一种内容。

目前,我有一个脚本坐在每个Web服务器上,从一个共享复制configuration,并更新configuration信息,以加工本地服务器(ip等)。 虽然这3个服务器工作正常,在10台服务器这是烦人的(login到服务器,运行脚本,注销,冲洗,洗,重复)。 我会build议一个解决scheme(如木偶和朋友),当你完成对本地文件的更改时,将更改推送到服务器。