Назад | Перейти на главную страницу

Как мне обновить файл конфигурации Nginx на многих идентичных серверах одновременно?

У нас есть парк серверов Nginx на Amazon EC2, где нам время от времени требуется обновлять файлы конфигурации для внедрения новых настроек.

В настоящее время у нас есть конфигурации в пользовательском AMI, и если нам нужно обновить, мы должны перестроить AMI, а затем экземпляры EC2. У нас есть несколько вспомогательных скриптов, но сделать это все еще довольно сложно. Есть ли способ лучше?

Есть ряд концепций, которые вы можете использовать.

Ключ к успеху - это автоматизация

Первый вариант заключается в том, чтобы продолжать делать то, что вы делаете сейчас, т.е. перестраивать EC2 с каждым изменением конфигурации. Просто полностью автоматизированным способом.

Теперь, когда вы выполняете обновления конфигурации через AMI, вы делаете еще один шаг вперед и создаете трубопровод что при изменении файла конфигурации в каком-либо репозитории:

  1. Автоматически построить новый AMI - один из самых популярных инструментов для этого - Упаковщик
  2. Автоматически восстановите свой парк Nginx - у вас уже должны быть все серверы Nginx в Группа автоматического масштабирования с Балансировщик нагрузки приложений спереди. Если вы этого не сделаете вам следует так как это сделает обновление таким же простым, как обновление Конфигурация запуска ASG и ждем, пока экземпляры будут перестроены из нового AMI.

Второй вариант состоит в том, чтобы держать экземпляры на месте и развертывать только файлы конфигурации, не перестраивая их. Обычно вы можете рассматривать файлы конфигурации как код и развертывать изменения конфигурации так же, как и выпуски кода. У AWS есть множество инструментов, которые помогут в этом.

  • AWS Elastic Beanstalk который использует Повар внутренне, и вы можете создать скрипт для обновлений Nginx таким образом.
  • Развертывание кода AWS который представляет собой инструмент развертывания с полной поддержкой сценариев, который хорошо интегрируется с другими частями AWS Code Suite:
    • Фиксация кода где вы можете хранить файлы конфигурации Nginx в Git.
    • Кодовый конвейер который может автоматически запускать развертывание при каждом обновлении файла конфигурации в Code Commit.
  • Ansible или Кукольный которые являются популярными инструментами, не относящимися к AWS, которые могут помочь вам сохранить одинаковую настройку всех серверов.

Как только вы научитесь автоматизировать эти обновления конфигурации Nginx, вы можете расширить автоматизацию на остальную часть вашей инфраструктуры.


Есть отличный технический документ Обзор вариантов развертывания на AWS это даст вам хороший обзор.

Надеюсь, это поможет :)

Сохраните свои конфигурации в EFS и смонтируйте EFS в том месте, где ожидаются конфигурации Nginx. В качестве альтернативы поместите их на Amazon S3 и время от времени запускайте синхронизацию или используйте s3fs (будьте осторожны, s3fs может быть недостаточно хорошим для производственного использования).

Когда вам нужно изменить конфигурацию, увеличьте желаемый размер группы автомасштабирования, чтобы вдвое больше, чем вам нужно для запуска новых экземпляров с новой конфигурацией, а затем вернитесь к тому, что вам нужно, что удалит старые экземпляры. В качестве альтернативы просто выполните последовательную перезагрузку серверов.

Другой вариант - просто отправить новые конфигурации на ваш сервер с помощью базового инструмента автоматизации, такого как развертывание кода AWS.

Полностью автоматизированные параметры выше технически лучше и чище, но если вы редко меняете конфигурации и хотите найти простое решение, это может помочь.

AWS Выполнить команду https://docs.aws.amazon.com/systems-manager/latest/userguide/execute-remote-commands.html

Или вы можете использовать Opsworks https://aws.amazon.com/opsworks/

Перестройка AMI или создание полнофункциональных конвейеров развертывания, как предлагают другие, только для изменения файла конфигурации, кажется излишним. Вы должны использовать Ansible, чтобы отправлять изменения и синхронизировать все ваши узлы. Существует множество модулей Ansible, которые могут помочь вам автоматизировать общие задачи.