Лучшие практики для синхронизации источников между серверами (Amazon EC2)
Я перехожу с одного сервера приложений на конфигурацию с балансировкой нагрузки.
В конфигурации с одним сервером я синхронизировал источники с помощью S3 cmd sync s3 каждые несколько минут, а на хосте (событие Scalr) я синхронизировал источники с S3. Это гарантирует, что сервер будет работать с обновленными источниками.
Какова оптимальная практика, когда число серверов приложений является динамическим?
Предположим, у меня есть 2 сервера и сервер A получает обновленные источники. Если сценарий синхронизации сначала запускается на B, сервер A получит старый файл из B, а не наоборот.
Какова лучшая практика в этом случае?
4 ответа
Ниже приведены основные протоколы, используемые для централизации хранилища:
SSHFS - передает все по SSH, поэтому он безопасен и может быть использован через Интернет без проблем. SSH поддерживает прозрачное сжатие, если вы этого хотите. Тем не менее, SSHFS может быть трудно получить работу.
NFS - по своей сути небезопасен и использует IP-адреса для различения прав, но, как правило, очень легко получить работу.
Лично я бы попробовал SSHFS и вернулся к NFS, если он не работает.
Поместите ваш главный источник в S3. Все серверы только синхронизируются (вытащить из S3) при запуске.
Когда вы хотите обновить свои серверы:
- Обновление S3
- Запустить новые экземпляры (которые будут тянуть из S3 при запуске)
- Остановите и / или завершите работу старых экземпляров, работающих под старой версией
Ты можешь использовать inotify
(inotifywait
) и / или rsync
, Зависит от того, сколько у вас файлов, как часто вы их обновляете и насколько они велики.
Я не уверен, что вы подразумеваете под источниками, но я предполагаю, что вы имеете в виду код веб-приложения, который обслуживают ваши серверы.
Лучшее решение для этого - использовать общую сетевую файловую систему для динамического обновления источников. Двумя наиболее популярными являются NFS и GlusterFS.