如何在许多相同服务器上同时更新Nginx配置文件?


12

我们在Amazon EC2上拥有Nginx服务器群,有时我们需要更新配置文件以实施新设置。

当前,我们在自定义AMI中拥有配置,如果需要更新,则必须先重建AMI,然后重建EC2实例。我们有一些帮助程序脚本,但是这样做仍然很费力。有更好的办法吗?


3
Ansible,盐堆等等。
poige

Answers:


26

您可以利用许多概念。

成功的关键是自动化

第一种选择是继续做您现在正在做的事情,即在每次配置更改时重建EC2。只是以完全自动化的方式。

当您现在通过AMI执行配置更新时,您将更进一步,并创建一个管道,该管道在某些存储库中的配置文件发生更改时将:

  1. 自动构建新的AMI - Packer是最受欢迎的工具之一
  2. 自动重建您的Nginx机队 -您应该已经将所有Nginx服务器放在一个Auto-Scaling组中,并且前面有一个Application Load Balancer。如果不这样做,您应该这样做,它将使更新变得简单,就像更新ASG启动配置并等待从新AMI重新构建实例一样。

第二种选择是将实例保留在原位,仅部署配置文件,而不重建它们。通常,您可以将配置文件视为代码,并以与部署代码版本相同的方式部署配置更改。AWS有许多工具可以帮助您解决此问题。

  • 内部使用 Chef的AWS Elastic Beanstalk,您可以通过这种方式编写Nginx更新的脚本。
  • AWS Code Deploy是完全可编写脚本的部署工具,可与 AWS Code Suite的其他部分很好地集成:
    • 代码提交,您可以在其中将Nginx配置文件保存在Git中。
    • 在配置文件中更新配置文件时可以自动触发部署的代码管道
  • Ansible Puppet是流行的非AWS工具,可以帮助您以相同方式配置所有服务器。

一旦您对自动化这些Nginx配置更新感到满意,您可能希望将自动化扩展到基础架构的其余部分。


有一个很棒的白皮书《 AWS上的部署选项概述》,将为您提供一个很好的概述。

希望对您有所帮助:)


Salt是Ansible或Puppet的替代产品,它设计用于主/副类型安装,并针对大型部署进行了优化。
Araho

5

将您的配置存储在EFS上,并在预期的Nginx配置位置安装EFS。或者将它们放在Amazon S3上并偶尔运行同步,或使用s3fs(请注意s3fs可能不足以用于生产用途)。

当您需要更改配置时,请增加自动伸缩组所需的大小,以使使用新配置触发新实例所需的容量增加一倍,然后再恢复到所需的容量,这将删除旧实例。或者,只需滚动重启服务器即可。

另一个选择是仅使用基本自动化工具(例如AWS代码部署)将新配置推送到您的服务器。

上面的全自动选项在技术上更好,更干净,但是,如果您很少更改配置并希望使用简单的解决方案,则可能会有所帮助。



1

像其他人一样,重建AMI或创建完整的部署管道建议仅更改配置文件似乎是过大的选择。您应该使用Ansible进行更改并保持所有节点同步。有许多Ansible模块可以帮助您自动执行常见任务。


不变基础架构的一个好处是您知道您没有任何脆弱且必须维护的“宠物”服务器。这使您充满信心,可以在prod / DR /测试中创建更多服务器而不会出现问题。
蒂姆(Tim)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.