Лучшие практики для синхронизации источников между серверами (Amazon EC2)

Я перехожу с одного сервера приложений на конфигурацию с балансировкой нагрузки.

В конфигурации с одним сервером я синхронизировал источники с помощью S3 cmd sync s3 каждые несколько минут, а на хосте (событие Scalr) я синхронизировал источники с S3. Это гарантирует, что сервер будет работать с обновленными источниками.

Какова оптимальная практика, когда число серверов приложений является динамическим?

Предположим, у меня есть 2 сервера и сервер A получает обновленные источники. Если сценарий синхронизации сначала запускается на B, сервер A получит старый файл из B, а не наоборот.

Какова лучшая практика в этом случае?

4 ответа

Решение

Ниже приведены основные протоколы, используемые для централизации хранилища:

  • SSHFS - передает все по SSH, поэтому он безопасен и может быть использован через Интернет без проблем. SSH поддерживает прозрачное сжатие, если вы этого хотите. Тем не менее, SSHFS может быть трудно получить работу.

  • NFS - по своей сути небезопасен и использует IP-адреса для различения прав, но, как правило, очень легко получить работу.

Лично я бы попробовал SSHFS и вернулся к NFS, если он не работает.

Поместите ваш главный источник в S3. Все серверы только синхронизируются (вытащить из S3) при запуске.

Когда вы хотите обновить свои серверы:

  1. Обновление S3
  2. Запустить новые экземпляры (которые будут тянуть из S3 при запуске)
  3. Остановите и / или завершите работу старых экземпляров, работающих под старой версией

Ты можешь использовать inotify (inotifywait) и / или rsync, Зависит от того, сколько у вас файлов, как часто вы их обновляете и насколько они велики.

Я не уверен, что вы подразумеваете под источниками, но я предполагаю, что вы имеете в виду код веб-приложения, который обслуживают ваши серверы.

Лучшее решение для этого - использовать общую сетевую файловую систему для динамического обновления источников. Двумя наиболее популярными являются NFS и GlusterFS.

Другие вопросы по тегам