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

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

我们在 Amazon EC2 上拥有一批 Nginx 服务器,偶尔需要更新配置文件来实现新的设置。

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

答案1

您可以利用许多概念。

成功的关键是自动化

第一个选项就是继续做你现在正在做的事情,即每次配置更改时重建 EC2. 完全以自动化的方式。

由于您现在通过 AMI 进行配置更新,因此您可以更进一步,创建一个管道当某个存储库中的配置文件发生更改时,将会:

  1. 自动地构建新的 AMI- 最流行的工具之一是打包机
  2. 自动地重建你的 Nginx 集群- 你应该已经将所有 Nginx 服务器放在自动扩展组应用程序负载均衡器在前面。如果你不你应该因为它将使更新变得像更新ASG 启动配置并等待从新的 AMI 重建实例。

第二种选择是为了保持实例不变,并且仅部署配置文件,而无需重建它们。通常,您可以将配置文件视为代码,并以与部署代码版本相同的方式部署配置更改。AWS 有许多工具可以帮助您实现这一点。

  • AWS Elastic Beanstalk使用厨师内部,您可以通过这种方式编写 Nginx 更新脚本。
  • AWS 代码部署这是一个完全可编写脚本的部署工具,可以与AWS 代码套件
    • 代码提交您可以在 Git 中保存 Nginx 配置文件。
    • 代码管道每当 Code Commit 中的配置文件更新时,它都可以自动触发部署。
  • Ansible或者木偶它们是流行的非 AWS 工具,可以帮助您以相同的方式配置所有服务器。

一旦您熟悉了自动化这些 Nginx 配置更新,您可能希望将自动化扩展到基础设施的其余部分。


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

希望对您有帮助:)

答案2

将您的配置存储在 EFS 上,并将 EFS 挂载到需要 Nginx 配置的位置。或者将它们放在 Amazon S3 上并偶尔运行同步,或者使用 s3fs(请注意,s3fs 可能不适合生产使用)。

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

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

上述全自动选项在技术上更好、更清洁,但如果您很少更改配置并想要一个简单的解决方案,这可能会有所帮助。

答案3

答案4

像其他人建议的那样,为了更改配置文件而重建 AMI 或创建功能齐全的部署管道似乎有些过头了。您应该使用 Ansible 来推送更改并保持所有节点同步。有许多 Ansible 模块可以帮助您自动执行常见任务。

相关内容