![在多台服务器上配置部署](https://linux22.com/image/535786/%E5%9C%A8%E5%A4%9A%E5%8F%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E9%85%8D%E7%BD%AE%E9%83%A8%E7%BD%B2.png)
我在 WEB 集群中有多个服务器(尽管 IP 不同,但所有服务器的配置都相同)
如何在多台服务器上部署配置更改?
我制作了新的配置,然后为每个服务器创建配置(放置正确的 IP),接下来:
- 将它们上传到每台服务器上,替换旧服务器(通过 ssh 进行 rsync)
- 在每台服务器上设置一个同时重新加载 Web 服务器的作业(服务器使用 ntp)。- 这是通过脚本发出命令来完成的(以节省登录时间)
- 在添加服务器重新加载作业之前 - 服务器上的配置会进行校验和测试) - 发生故障时发出通知
您如何看待这种方法?什么应该是“专业方法:)?(我不是说我的方法不起作用......它有效并且节省了我不必登录每个网络服务器的时间。)
问候,
答案1
您可以使用任何现代变更自动化工具(Puppet、Chef、cfengine、bcfg2 等)来实现此目的。它们中的任何一个都可以部署文件,并在其管理的文件被修改时重新启动服务。
过去几年来我在多个环境中使用 Puppet 取得了巨大的成功。
一旦您开始使用该工具进行所有操作,它还具有记录您的流程和基础设施的额外好处。
通过 git 或 svn 等版本控制工具支持它,现在您就有了...一个版本化基础设施。
答案2
我大体上同意 bdha 的回答 - 使用配置管理工具来管理您的更改。我想说的另一点是,您应该尽可能多地使用系统的包管理工具来处理所有非配置文件的内容。管理安装了一组包的系统比管理一堆手动文件编辑的系统(或通过 puppet 自动编辑一堆文件的系统)要容易得多。
如果您有永远不会改变的配置文件,那么它们也可以包含在系统软件包中。了解如何在系统的软件包工具中构建软件包,以及如何将它们暂存到集中存储库中,以便您随后可以使用以下工具好吃来管理和安装它们。
还要仔细考虑您的软件推送系统。很多人使用 puppet 或 cfengine 来执行此操作,但同样,随着您的环境变大,还有一些更专业的工具可能会更好地扩展。这些类型的工具的示例包括卡皮斯特拉诺和波戈。
答案3
如果您拥有大量服务器,那么您一定要考虑 puppet 或 chef,它们是最好的解决方案,可以满足您的所有要求,甚至在确认新配置后立即重新加载服务器配置。
如果您发现这有点小题大做,那么您可以只从一个中心位置制作一些带有交叉 ssh 密钥的脚本来推送配置,如果我是您,我会在该中心存储库上使用 mercurial 或 bazaar 来跟踪更改,并且能够在出现问题时轻松回滚。
答案4
实际上,如果您有大量服务器,Cfengine 绝对是您的不二之选。它每 5 分钟运行一次(而不是每小时运行一次!)我反复听别人说 Puppet 的扩展性不是很好。您需要在管理大量机器和准确了解它们的状态之间做出权衡。不幸的是,这是由于它的架构所致,因此很难绕过它。我还没有真正使用过 Chef,所以我不了解它的全部潜力。