我倾向于使用 ssh,并设置无密码访问权限,以允许“主”服务器在从属服务器上运行特定的 Makefile - Makefile 运行“svn update”,它是基于文件戳的依赖规则,然后决定其他需要做什么完成(例如,从文本生成散列的 db 用户或组文件,从 nic 添加或删除 ip 地址,重新启动 apache,等等 - 任何时候您可以确定一系列操作取决于文件更改和/或另一个动作序列是使用 make 自动化过程的一个很好的候选)。
即使在“主”服务器上,一切都由 make 驱动。编辑一个或多个配置文件,然后运行 make。Makefile 确定需要做什么(svn 提交,从源输入文件生成配置片段,'ssh make' 到其他服务器等)。像这样使用 make 可以确保每个步骤都以正确的顺序完成,并且不会忘记任何步骤。并使 svn 成为该过程的重要组成部分可确保每次更改都带有时间戳和提交日志中的解释。
理想情况下,您可以使用 Puppet 或其他类似工具(例如 cfengine)来设置配置管理服务器。
我可以建议的关于服务器配置的最佳实践一般是:
“永远不要登录到机器上更改任何内容。始终在 [配置管理服务器] 上进行更改并让更改传播出去”(取自http://www.infrastructures.org/papers/bootstrap/bootstrap.html )
最好的问候,亚历克斯
我们的 Web 节点后面有一个 NFS 集群。我们将 Apache 和 PHP 的默认配置文件位置符号链接到 NFS 共享上的共享副本。然后,一个非常简单的 shell 脚本会进行一些基本的内务处理(重建 Apparmor 规则等),然后遍历 web 节点,首先触发 an
apache2ctl configtest
然后apache2ctl graceful
.其他想法:
rsync
或scp
.svn 可用于提供版本控制和配置文件的分发。也可以使用 git 或 bzr 等。
编辑“主”服务器上的文件,svn 提交它们,然后可以在“从”服务器上运行 cron 作业或 ssh,然后“svn update”。
我倾向于使用 ssh,并设置无密码访问权限,以允许“主”服务器在从属服务器上运行特定的 Makefile - Makefile 运行“svn update”,它是基于文件戳的依赖规则,然后决定其他需要做什么完成(例如,从文本生成散列的 db 用户或组文件,从 nic 添加或删除 ip 地址,重新启动 apache,等等 - 任何时候您可以确定一系列操作取决于文件更改和/或另一个动作序列是使用 make 自动化过程的一个很好的候选)。
即使在“主”服务器上,一切都由 make 驱动。编辑一个或多个配置文件,然后运行 make。Makefile 确定需要做什么(svn 提交,从源输入文件生成配置片段,'ssh make' 到其他服务器等)。像这样使用 make 可以确保每个步骤都以正确的顺序完成,并且不会忘记任何步骤。并使 svn 成为该过程的重要组成部分可确保每次更改都带有时间戳和提交日志中的解释。
当然,许多人会使用 puppet 或类似的东西来做到这一点。如果我要从头开始,我可能也会....但我已经这样做了很多年了,早在 puppet 出现之前。在 puppet 之前有类似的工具,但 puppet 是我见过的第一个看起来它实际上可能值得改变的麻烦......但很难证明改变一些只适用于看起来像它的东西是合理的可能会更好。
有几种解决方案。
最大的问题:您的内容(或访问数据库内容的动态脚本)当前如何同步?如果您考虑一下,配置文件只是另一种内容。
目前,我在每个 Web 服务器上都有一个脚本,它从共享复制配置并更新配置信息以匹配本地服务器(ip 等)。虽然这适用于 3 台服务器,但在 10 台服务器上却很烦人(登录到服务器、运行脚本、注销、冲洗、清洗、重复)。我建议您在完成对本地文件的更改后将更改推送到服务器的解决方案(例如 puppet 和朋友)。