Как разделить ресурсы между несколькими веб-серверами?
У меня есть несколько веб-серверов Linux, подключенных к балансировщику нагрузки, и я люблю обмениваться ресурсами (такими как изображения, видео и другие материалы) между этими серверами. Каков наилучший способ сделать это?
В настоящее время я подключил файловый сервер ко всем веб-серверам, но меня беспокоит то, что он будет работать из-за большого трафика. Как я могу избежать этого?
Заранее спасибо.
6 ответов
Есть несколько способов сделать это в зависимости от ваших потребностей.
- Используйте центральный файловый сервер, смонтированный с fx NFS на веб-серверах
- То же, что и выше, но избыточно, поэтому, если один выходит из строя, другой берет на себя
- Используйте какой-либо инструмент синхронизации (например, rsync) и размещайте файлы локально на веб-серверах. Затем настройте cronjob для синхронизации файлов между серверами через определенный интервал.
- Используйте CDN, такие как Amazon S3, Akamai и т. Д.
Первые два лучше, если у вас много новых файлов. Третье было бы идеальным решением, если вы не добавляете и не изменяете файлы, которые часто, так как пользователи получат 404-й статический контент, еще не синхронизированный.
Последний вариант может быть идеальным во многих отношениях, но также может оказаться самым дорогим из 4. Вам также придется переписать свои веб-сайты для поддержки этого.
Другой отличный способ уменьшить нагрузку на веб-серверы и выполнить балансировку нагрузки - это использовать squid (а именно squid3). Установите его в качестве обратного прокси-сервера с кэшированием. Он будет кешировать статический контент, например изображения и т. Д., Либо на жесткий диск (по умолчанию), либо в ОЗУ (быстрее и лучше), если вы установите его таким образом. Он способен выполнять циклический перебор на другие серверы squid, даже если какой-то один узел перегружен.
Одним из решений этой проблемы, которое я использовал, является наличие основной копии файлов для чтения / записи на общем диске NFS, а также сохранение копии только для чтения на каждом веб-сервере, так что сбой узла NFS создает доступ к файлам. в режиме только для чтения, а не потерять их полностью.
- Файлы живут на центральном хосте, обмениваются с веб-хостами через монтирование NFS
rsync
работает каждые 15 минут, чтобы сохранять копию только для чтения на каждом веб-хосте свежей.check_link
Скрипт bash запускается каждую минуту, чтобы убедиться, что монтирование NFS все еще там, и если нет, то заменяет символическую ссылку на копию только для чтения.
Более подробную информацию можно найти в этой статье, когда я впервые настроил эту систему.
расквитаться:
- Чтения файлов очень доступны
- Нет условий гонки для записи в файл
- Новые файлы мгновенно доступны для всех веб-хостов.
Недостатки:
- немного сложнее.
- количество копий только для чтения масштабируется с количеством веб-хостов, что может быть чрезмерно, если у вас их много больше двух.
- Запись в файл недоступна.
- Потенциал до 1 минуты простоя перед переключением на только для чтения копию.
Поскольку обычно потребность в большем количестве серверов обусловлена ресурсами, необходимыми для запуска динамических веб-сайтов / приложений, рассмотрите возможность размещения статических ресурсов в другом поддомене / домене. (например, static.yourdomain.com)
Затем вы можете использовать другой сервер / серверы для их размещения. Хостинг статических файлов не требует много ресурсов, поэтому для статического контента вам потребуется значительно меньше серверов. Вы также освободите некоторые ресурсы на серверах для вашего динамического контента.
В зависимости от вашего балансировщика нагрузки вы также можете сделать это в том же домене с помощью балансировщика нагрузки, который решит, какой сервер использовать для какого запроса, но если вы используете отдельный домен, вы можете легко разместить свои статические ресурсы в CDN, если необходимость должна возникнуть!
Возможно, вы захотите рассмотреть базу данных NoSQL. Они предназначены для работы на кластерах, обеспечивают возможную согласованность. Но будьте осторожны, они не КИСЛОТЫ.
Вот введение, которое поможет вам решить, какую базу данных NoSQL вы можете использовать для своих целей.
Вот список ресурсов, связанных с доступным NoSQL.
Почему бы вам не попробовать решение DFS, оно обеспечивает высокий уровень избыточности, и объем может быть распределен между любыми пользователями. Gluster - мой любимый продукт, его очень легко установить и настроить в любом известном дистрибутиве Linux.